適用対象: Databricks SQL
Databricks Runtime 16.3 以降
重要
この機能は パブリック プレビュー段階です。
SQL/PSM 標準ベースのスクリプト構文を使用して、強力な手続き型ロジックを使用できます。
すべての SQL スクリプトは、 複合ステートメント ブロック (BEGIN ... END
) で構成され、開始されます。
複合ステートメントは、ローカル変数、ユーザー定義条件、および例外をキャッチするために使用される条件ハンドラーを宣言するセクションで始まります。
その後に、次の複合ステートメント本体が続きます。
- フロー制御ステートメントには、述語式に対するループ、クエリ結果に対する FOR ループ、 IF や CASE などの条件付きロジック、 LEAVE や ITERATE などのループを分割する手段が含まれます。
-
ALTER
、CREATE
、DROP
などの DDL ステートメント。 - GRANTやREVOKEなどの DCL (データ制御) ステートメント。
- DML ステートメント INSERT、 UPDATE、 DELETE、 MERGE です。
- スクリプトの呼び出し側に結果セットを返すクエリ。
- SET ステートメントを使用して、ローカル変数とセッション変数を設定します。
- EXECUTE IMMEDIATE ステートメント。
- 入れ子になった複合ステートメント。変数、条件、および条件ハンドラーの入れ子になったスコープを提供します。
呼び出し側と複合ステートメントの間でデータを渡す
SQL スクリプトとの間でデータを渡すには、次の 2 つの方法があります。
- セッション変数を使用して、スカラー値または配列またはマップの小さなセットを 1 つの SQL スクリプトから別の SQL スクリプトに渡します。
- パラメーター マーカーを使用して、スカラー値または配列の小さなセットを渡すか、ノートブック ウィジェット、Python、または別の言語から SQL スクリプトにデータをマップします。
変数スコープ
複合ステートメント内で宣言された変数は、複合ステートメント内の任意の式で参照できます。 Databricks は、名前解決で説明されている規則に従って、最も内側のスコープから外側に識別子を 解決します。 省略可能な複合ステートメント ラベル を使用して、重複する 変数名のあいまいさを解消できます。
条件処理
SQL スクリプトでは、SQL スクリプトの処理中に例外を捕捉して処理するための条件ハンドラーがサポートされています。 条件ハンドラー内では、元の例外を RESIGNAL したり、新しい例外を 通知 したり、例外なしで複合ステートメントを終了したりできます。
条件ハンドラーは、3 つの異なる条件クラスを処理するように定義できます。
DIVIDE_BY_ZERO
やユーザー宣言条件など、特定の Databricks 定義のエラー クラスにすることができる 1 つ以上の名前付き条件。 これらのハンドラーは、これらの特定の条件を処理します。Databricks またはユーザーの
SQLSTATE
ステートメントによって発生させることができる 1 つ以上のSIGNAL
。 これらのハンドラーは、そのSQLSTATE
に関連付けられている任意の条件を処理できます。ジェネリック
SQLEXCEPTION
ハンドラーは、SQLEXCEPTION
に含まれるすべての条件 (SQLSTATE
ではなくXX***
されていない任意の02***
) をキャッチできます。
例外に適用される条件ハンドラーを決定するには、次を使用します。 この条件ハンドラーは、 最も適切なハンドラーと呼ばれます。
条件ハンドラーは、独自の本体または同じ複合ステートメントで宣言された条件ハンドラーの本体で定義されているステートメントには適用できません。
例外が発生した最も内側の複合ステートメントで定義されている適用可能な条件ハンドラーが適切です。
複数の適切なハンドラーが使用可能な場合は、最も具体的なハンドラーが最も適切です。 たとえば、名前付き条件のハンドラーは、名前付き
SQLSTATE
のハンドラーよりも具体的です。 ジェネリックEXCEPTION
ハンドラーは、最も具体性が低いハンドラーです。
ハンドラーが独自の条件を SIGNAL
または RESIGNAL
しない限り、条件ハンドラーの結果は、次に実行するハンドラーを宣言した複合ステートメントの後にステートメントを実行することです。
SQL ストアド プロシージャ
重要
この機能は パブリック プレビュー段階です。
適用対象: Databricks Runtime 17.0 以降
CREATE PROCEDURE ステートメントを使用すると、Unity カタログに SQL スクリプトを保持できます。 その後、プロシージャへのアクセスを他のプリンシパルに GRANT することができます。 これらのプリンシパルは、 CALL ステートメントを使用してプロシージャを呼び出すことができます。
制御フロー ステートメントの一覧
サポートされている制御フロー ステートメントの一覧を次に示します。
- CASE ステートメント
- BEGIN END 複合ステートメント
- FOR ステートメント
- GET DIAGNOSTICS ステートメント
- IF THEN ELSE ステートメント
- ITERATE ステートメント
- LEAVE ステートメント
- LOOP ステートメント
- REPEAT ステートメント
- RESIGNAL ステートメント
- SIGNAL ステートメント
- WHILE ステートメント