ストアドプロシージャの実行
ストアドプロシージャを使用することにより、データモデル で利用可能なデータを補完することができます。
ストアドプロシージャの実行
ストアドプロシージャは、テーブルリストの下部から新しいカスタムSQL を選択したときに表示される[カスタムSQL の編集]ウィンドウを使用して実行できます。
プロシージャは、次の構文でEXECSP システムテーブルを使用して実行できます。
SELECT * FROM EXECSP ('SchemaName.ProcedureName',StoredProcedureInput1,StoredProcedureInput2,...)
SchemaName は、テーブルリストが取得される接続の名前を示します。 ProcedureName は、実行するストアドプロシージャの名前です。
ストアドプロシージャの入力は動的であることに注意してください。ストアドプロシージャセクションのプロシージャのページに記載されている数だけ(記載されている順序で)存在します。
EXECSP vs EXEC
EXEC 構文は、他のエディションのユーザーには馴染みがあり、ストアドプロシージャの説明でよく使用されます。
EXEC ProcedureName Name1=StoredProcedureInput1, Name2=StoredProcedureInput2, ...
EXECSP 構文は、次の2つの重要な点でEXEC 構文とは異なります。
- EXECSP 構文では、パラメータに名前を付けることはできません。EXECSP をEXECSP('SchemaName.ProcedureName', Name1=StoredProcedureInput1, ...) として呼び出すと、Name1=StoredProcedureInput1 が比較として扱われるため、期待どおりの結果は返されません。
- EXECSP パラメータは、ドキュメントに記載されている順序で提供する必要があります。特定のパラメータを省略する場合は、NULL を指定します。
動的出力を持つストアドプロシージャ
Tableau はカスタムSQL を2段階で実行します。第1段階ではクエリが出力するカラムを決定し、第2段階でSpark SQL に対してクエリを実行します。 ストアドプロシージャにはあらかじめ定義された出力セットがあるため、ほとんどの場合これは問題になりません。
しかし、ストアドプロシージャの中にはSpark SQL のデータやプロシージャに与えられた入力値に依存する動的な出力を持つものがあります。 コネクタはこの種のプロシージャを実行することによってのみ出力カラムを決定できます。 これはスキーマを発見するために1回、出力データを取得するために1回と、計2回実行する必要があることを意味します。
プロシージャによっては、複数回実行するとSpark SQL のデータが変更され意図しない結果が生じる可能性があるため、デフォルトではコネクタがこれを防止しています。 このエラーを無効にするには、コネクタの接続文字列に"EnableExecSpSchemaOnlyQuery=true" を追加します。