Unity Catalog のユーザー定義関数 (UDF)
重要
この機能は、パブリック プレビュー段階であり、Databricks Runtime 13.3 LTS 以降を必要とします。
Azure Databricks には、Unity Catalog によって管理されるスキーマにカスタム関数を登録するための SQL ネイティブ構文が用意されています。 標準的な CREATE FUNCTION
SQL 構文は、Azure Databricks 上のすべての Unity Catalog コンピューティングでサポートされています。 プロまたはサーバーレス SQL ウェアハウスおよび Databricks Runtime 13.3 LTS 以降では、Unity Catalog に登録されている関数に Python コードを含めることができます。
Note
UDF を使用するクエリから登録されたビューでは、サポートされているコンピューティングを使用する必要があります。 クラシック SQL ウェアハウスと Databricks Runtime 12.2 LTS 以前では、Unity Catalog に登録されている UDF を含むビューを解決できません。
完全な SQL 言語リファレンスについては、「CREATE FUNCTION (SQL および Python)」を参照してください。
Unity Catalog が関数に対するアクセス許可を管理する方法については、「CREATE FUNCTION」を参照してください。
重要
Unity Catalog の関数として登録されている Python UDF は、スコープとサポートが、ノートブックまたは SparkSession にスコープ指定された PySpark UDF とは異なります。 「ユーザー定義スカラー関数 - Python」を参照してください。
Unity Catalog のカスタム SQL 関数
Unity Catalog 用に構成されたコンピューティングを使用して SQL 関数を作成すると、関数は既定で現在アクティブなスキーマに登録されます。 次の例では、新しい関数のターゲット カタログとスキーマを宣言するために使用できる構文を示します。
CREATE FUNCTION target_catalog.target_schema.roll_dice()
RETURNS INT
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
COMMENT 'Roll a single 6 sided die'
RETURN (rand() * 6)::INT + 1;
関数に対する十分な権限を持つすべてのユーザーは、次の例のように、Unity Catalog 用に構成されたコンピューティング環境でその関数を使用できます。
SELECT target_catalog.target_schema.roll_dice()
Note
LANGUAGE SQL
を使用する UDF を使用して、テーブルまたはスカラー値を返すことができます。
Python UDF を Unity Catalog に登録する
Databricks Runtime 13.3 LTS 以降では、SQL CREATE FUNCTION
ステートメントを使用してスカラー Python UDF を Unity Catalog に登録できます。
重要
Unity Catalog 用の Python UDF をサポートするのは、プロおよびサーバーレス SQL ウェアハウスのみです。
Python UDF は、SQL 関数内で直接 Python の完全な表現力を提供するように設計されており、高度な変換、データ マスク、ハッシュなどのカスタマイズされた操作を可能にします。
Python UDF は、セキュリティで保護された分離された環境で実行され、ファイル システムや内部サービスへのアクセス権は持ちません。
サーバーレス コンピューティングまたは共有アクセス モードで実行されている Python UDF では、ポート 80、443、53 経由の TCP/UDP ネットワーク トラフィックが許可されます。
「最も効率的な UDF はどれか」を参照してください。
Note
Unity Catalog の Python UDF の構文とセマンティクスは、SparkSession に登録されている Python UDF とは異なります。 「ユーザー定義スカラー関数 - Python」を参照してください。
Unity Catalog 用の Python UDF では、次のコード例のように、二重ドル記号 ($$
) で囲まれたステートメントを使用します。
CREATE FUNCTION target_catalog.target_schema.greet(s STRING)
RETURNS STRING
LANGUAGE PYTHON
AS $$
return f"Hello, {s}"
$$
次の例は、この関数を使用して、students
という名前のテーブルの first_name
列に格納されているすべての名前に対するグリーティング ステートメントを返す方法を示しています。
SELECT target_catalog.target_schema.greet(first_name)
FROM students;
Python UDF 内では任意の数の Python 関数を定義できますが、スカラー値を返す必要があります。
Python 関数は個別に NULL
値を処理する必要があり、すべての型マッピングは Azure Databricks の SQL 言語マッピングに従う必要があります。
Azure Databricks に含まれる標準 Python ライブラリをインポートすることはできますが、カスタム ライブラリや外部依存関係を含めることはできません。
カタログまたはスキーマが指定されていない場合、Python UDF は現在アクティブなスキーマに登録されます。
次の例は、Python UDF 内でライブラリをインポートし、複数の関数を使用します。
CREATE FUNCTION roll_dice(num_dice INTEGER, num_sides INTEGER)
RETURNS INTEGER
LANGUAGE PYTHON
AS $$
import numpy as np
def roll_die(num_sides):
return np.random.randint(num_sides) + 1
def sum_dice(num_dice,num_sides):
return sum([roll_die(num_sides) for x in range(num_dice)])
return sum_dice(num_dice, num_sides)
$$
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示