LoginSignup
1
1

Unity Catalogにおける関数のサポート

Posted at

こちらの機能を試します。というか、最近まで気づいていませんでした。

プレビュー
本機能はパブリックプレビューです。Databricks Runtime 13.2 以降が必要です。

要はSQLやPythonの関数(User-defined function:UDF)をUnity Catalog(カタログエクスプローラ)で管理できる機能です。権限設定やリネージなどの機能を活用できます。

ただ、パブリックプレビューであることもあり、いくつかの制限があります。以下に列挙します。

  • Databricks Runtime 13.2 以降が必要です。
  • Gravitonインスタンスではサポートされません。
  • 従来のPython UDFのスコープはSparkSessionですが、こちらはカタログエクスプローラで管理されるので、権限が許可される限りDatabricksアカウントで共有されます。

SQLのUDF

以下のSQLを実行すると指定したカタログ、スキーマの配下に関数が作成されます。

CREATE FUNCTION takaakiyayoi_catalog.default.simple_roll_dice()
    RETURNS INT
    LANGUAGE SQL
    NOT DETERMINISTIC
    CONTAINS SQL
    COMMENT 'Roll a single 6 sided die'
    RETURN (rand() * 6)::INT + 1;

Screenshot 2024-04-16 at 19.44.14.png

SELECT takaakiyayoi_catalog.default.simple_roll_dice()

Screenshot 2024-04-16 at 19.44.46.png

PythonのUDF

Pythonの方が自由度の高い分、制限も増えます。

  • Python UDFは安全で分離された環境で実行され、ファイルシステムや内部サービスにアクセスできません。
  • Python UDFはスカラー値を返す必要があります。UDTF(ユーザー定義テーブル関数)やUDAF(ユーザー定義集計関数)はサポートされていません。
  • 標準のPythonライブラリをインポートできますが、カスタムライブラリや外部の依存関係を持ち込むことはできません。
  • PySparkから呼び出すことはできず、Spark SQLからのみ呼び出すことができます。
CREATE OR REPLACE FUNCTION takaakiyayoi_catalog.default.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)
$$

Screenshot 2024-04-16 at 19.48.06.png

SELECT takaakiyayoi_catalog.default.roll_dice(3, 6)

Screenshot 2024-04-16 at 19.49.29.png

はじめてのDatabricks

はじめてのDatabricks

Databricks無料トライアル

Databricks無料トライアル

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1