SQL UDFs の紹介

このトピックでは、SQL UDFs (ユーザー定義関数)に固有の概念と使用方法の詳細について説明します。

UDFsの概要、およびすべての型の UDFsに適用される情報については、 UDFsの概要 をご参照ください。

このトピックの内容:

一般的な使用法

SQL UDF は、任意の SQL 式を評価し、式の結果を返します。

関数定義は、スカラー(つまり、単一)値、またはテーブル関数として定義されている場合は行のセットを返す SQL 式です。

SQL UDFs のセキュリティ/権限要件

関数定義が非修飾テーブルを参照する場合、そのテーブルは関数を含むスキーマで解決されます。別のスキーマオブジェクト(テーブル、ビュー、または他の関数など)への参照には、その関数の所有者がそのスキーマオブジェクトにアクセスする権限を持っている必要があります。関数の呼び出し元は、関数定義で参照されるオブジェクトにアクセスする必要はありませんが、関数を使用するための権限のみが必要です。

例えば、管理者は通常アクセスできない機密データを含む users という名前のテーブルを所有していますが、管理者は他のユーザーがアクセス権限を持っている関数を通じて合計ユーザー数を公開できます。

use role dataadmin;

desc table users;

+-----------+--------------+--------+-------+---------+-------------+------------+--------+------------+---------+
| name      | type         | kind   | null? | default | primary key | unique key | check  | expression | comment |
|-----------+--------------+--------+-------+---------+-------------+------------+--------+------------+---------|
| USER_ID   | NUMBER(38,0) | COLUMN | Y     | [NULL]  | N           | N          | [NULL] | [NULL]     | [NULL]  |
| USER_NAME | VARCHAR(100) | COLUMN | Y     | [NULL]  | N           | N          | [NULL] | [NULL]     | [NULL]  |
  ...
  ...
  ...
+-----------+--------------+--------+-------+---------+-------------+------------+--------+------------+---------+

create function total_user_count() returns number as 'select count(*) from users';

grant usage on function total_user_count() to role analyst;

use role analyst;

-- This will fail because the role named "analyst" does not have the
-- privileges required in order to access the table named "users".
select * from users;

FAILURE: SQL compilation error:
Object 'USERS' does not exist.

-- However, this will succeed.
select total_user_count();

+--------------------+
| TOTAL_USER_COUNT() |
|--------------------+
| 123                |
+--------------------+

ロールと権限を使用してアクセス制御を管理する方法の詳細については、 Snowflakeのアクセス制御 をご参照ください。