- カテゴリ:
 コンテキスト関数 (一般)
SYS_CONTEXT(SNOWFLAKE$SESSION 名前空間)¶
関数が呼び出されるセッションに関する情報を返します。
この関数は以下のコンテキストで呼び出すことができます。
この関数は現在のセッションで直接呼び出すことができます。
この関数を呼び出す呼び出し元権限実行可能ファイル(呼び出し元権限ストアドプロシージャなど)を実行することができます。
所有者ロールにアカウントに対する READ SESSION 権限が付与されている場合、この関数を呼び出す呼び出し元権限実行可能ファイル(呼び出し元権限ストアドプロシージャなど)を実行することができます。
その他のコンテキストでは、関数は NULL を返します。
- こちらもご参照ください。
 SYS_CONTEXT、 SYS_CONTEXT(SNOWFLAKE$APPLICATION 名前空間)、 SYS_CONTEXT(SNOWFLAKE$ENVIRONMENT 名前空間)、 SYS_CONTEXT(SNOWFLAKE$ORGANIZATION 名前空間)
構文¶
プロパティを取得するための構文:
SYS_CONTEXT(
  'SNOWFLAKE$SESSION' ,
  '<property>'
)
関数を呼び出すための構文:
SYS_CONTEXT(
  'SNOWFLAKE$SESSION' ,
  '<function>' , '<argument>' [ , ... ]
)
引数¶
'SNOWFLAKE$SESSION'プロパティを取得するか、関数を呼び出して、関数が呼び出されたセッションに関する情報を返すことを指定します。
'property'取得するプロパティの名前。次のプロパティを指定できます。
プロパティ
説明
PRINCIPAL_NAMEセッションを開始したプリンシパルの名前( ユーザー:doc:
タスク </user-guide/tasks-intro>または SPCS サービス)。名前はPRINCIPAL_TYPEプロパティの値によって異なります。PRINCIPAL_TYPEが次の値のいずれかである場合、PRINCIPAL_NAMEプロパティの値はユーザーの名前です。USERUSER_PERSONUSER_SERVICEUSER_LEGACY_SERVICE
PRINCIPAL_TYPEがTASKである場合、値はタスクの名前です。PRINCIPAL_TYPEがSNOWSERVICEである場合、値は SPCS サービスの名前です。
PRINCIPAL_TYPEセッションを開始したプリンシパルのタイプ。このプロパティは、次の値のいずれかを持つことができます。
ユーザーがセッションを開始した場合は、
USERまたはUSER_suffix。suffixはユーザーのタイプに応じて異なります。ユーザーオブジェクトに TYPE プロパティがない場合、値は
USERです。TYPE プロパティが
PERSONの場合、値はUSER_PERSONです。TYPE プロパティが
SERVICEの場合、値はUSER_SERVICEです。TYPE プロパティが
LEGACY_SERVICEの場合、値はUSER_LEGACY_SERVICEです。
タスク がセッションを開始した場合は、
TASK。SPCS サービス がセッションを開始した場合は、
SNOWSERVICE。
PRINCIPAL_EMAILプリンシパルに関連付けられているメールアドレス。関連付けられたメールアドレスがない場合、このプロパティの値は NULL です。
PRINCIPAL_DATABASEプリンシパルのオブジェクトを含むデータベースの名前。例えば、プリンシパルがタスクの場合、このプロパティの値はタスクを含むデータベースの名前になります。
プリンシパルがアカウントレベルのオブジェクト(ユーザーなど)である場合、このプロパティの値は NULL です。
PRINCIPAL_SCHEMAプリンシパルのオブジェクトを含むスキーマの名前。例えば、プリンシパルがタスクの場合、このプロパティの値はタスクを含むスキーマの名前になります。
プリンシパルがアカウントレベルのオブジェクト(ユーザーなど)である場合、このプロパティの値は NULL です。
ID関数が呼び出されたセッションの識別子。
ROLE関数が呼び出されたセッションのプライマリロール。
ROLE_TYPEプライマリロールのタイプ。このプロパティは、次の値のいずれかを持つことができます。
プライマリロールがアカウントロールの場合は
ROLE。
ROLE_DATABASEプライマリロールがデータベースロールの場合は、データベースロールを含むデータベースの名前。
SECONDARY_ROLESセッションでセカンダリロールとしてアクティブ化されたアカウントレベルのロールの JSON 配列。アクティブ化されたロールには、リクエストされたロールの階層の下にあるロールが含まれます。例えば、ユーザーが次のことを実行したとします。
USE SECONDARY ROLES ACCOUNTADMIN;
このプロパティの JSON 配列には ACCOUNTADMIN ロールと SECURITYADMIN、SYSADMIN および USERADMIN ロールが含まれ、これらは ACCOUNTADMIN ロールの下にあります。
WANTED_SECONDARY_ROLESユーザーがリクエストしたアカウントレベルのロールの JSON 配列。例えば、ユーザーが次のことを実行したとします。
USE SECONDARY ROLES ACCOUNTADMIN;
このプロパティの JSON 配列には、ACCOUNTADMIN ロールのみが含まれます。
DATABASE関数を呼び出したロールがデータベースにアクセスする権限を持っている場合は、セッションで使用されている現在のデータベース。
SCHEMA関数を呼び出したロールがスキーマにアクセスする権限を持っている場合は、セッションで使用されている現在のスキーマ。
SCHEMAS関数を呼び出したロールが現在のデータベースにアクセスする権限を持っている場合は、セッションのスキーマの現在の 検索パス
WAREHOUSEセッションで使用中の現在のウェアハウス。
'function'呼び出したい関数の名前。次の関数を呼び出すことができます。
'argument' [ , ... ]呼び出したい関数に渡す引数。
戻り値¶
関数は VARCHAR 値または NULL を返します。
戻り値は、取得するプロパティ または:ref:
呼び出す関数 <label-sys_context_snowflake_session_function>によって異なります。サポートされているコンテキストのいずれか の外にある SNOWFLAKE$SESSION 名前空間で SYS_CONTEXT を呼び出す場合、関数は NULL を返します。
使用上の注意¶
シェルの二重引用符で囲まれた文字列で関数呼び出しを指定する場合は、
$文字をバックスラッシュ(\)でエスケープして、$SESSIONがシェル変数として解釈されないようにします。たとえば、Snowflake CLI を使用していて、SQL ステートメントを二重引用符で囲まれたコマンドライン引数として指定する 場合は、次のようになります。
snow sql --query "SELECT SYS_CONTEXT('SNOWFLAKE\$SESSION', 'PRINCIPAL_NAME');"
例¶
次の例は、セッションに関するコンテキスト情報を取得する方法を示しています。
プリンシパルの情報の取得¶
次の例は、関数を呼び出したプリンシパルの名前と型を返します。
SELECT SYS_CONTEXT('SNOWFLAKE$SESSION', 'PRINCIPAL_NAME') AS name,
  SYS_CONTEXT('SNOWFLAKE$SESSION', 'PRINCIPAL_TYPE') AS type,
  SYS_CONTEXT('SNOWFLAKE$SESSION', 'PRINCIPAL_EMAIL') AS email;
+--------------+-------------+---------------------+
| NAME         | TYPE        | EMAIL               |
|--------------+-------------+---------------------|
| MY_USER_NAME | USER_PERSON | my.user@example.com |
+--------------+-------------+---------------------+
ロールに関する情報の取得¶
次の例は、関数が呼び出されたセッションのプライマリロールの名前と型を返します。
SELECT SYS_CONTEXT('SNOWFLAKE$SESSION', 'ROLE') AS role,
  SYS_CONTEXT('SNOWFLAKE$SESSION', 'ROLE_TYPE') AS type;
+---------+------+
| ROLE    | TYPE |
|---------+------|
| MY_ROLE | ROLE |
+---------+------+
次の例は、ACCOUNTADMIN ロールをセカンダリロールとして使用します。次に、例はセッションでリクエストされたセカンダリロールのリスト(ACCOUNTADMIN)、およびセッションでセカンダリロールとしてアクティブ化されるアカウントレベルのロールのリストを返します。
アクティブ化されたロールのリストには、リクエストされたロールの階層の下にあるロールが含まれます。ACCOUTADMIN ロールがアクティブ化されるので、リストに SECURITYADMIN、SYSADMIN および USERADMIN が含まれます。これらは ACCOUNTADMIN ロールの下にあります。
USE SECONDARY ROLES ACCOUNTADMIN;
SELECT SYS_CONTEXT('SNOWFLAKE$SESSION', 'WANTED_SECONDARY_ROLES') AS requested_roles,
  SYS_CONTEXT('SNOWFLAKE$SESSION', 'SECONDARY_ROLES') AS requested_roles_with_child_roles;
+------------------+---------------------------------------------------------+
| REQUESTED_ROLES  | REQUESTED_ROLES_WITH_CHILD_ROLES                        |
|------------------+---------------------------------------------------------|
| ["ACCOUNTADMIN"] | ["ACCOUNTADMIN","SECURITYADMIN","SYSADMIN","USERADMIN"] |
+------------------+---------------------------------------------------------+
現在のデータベース、スキーマ、検索パス、ウェアハウスの取得¶
次の例は、セッションで使用中の現在のデータベース、スキーマ、およびウェアハウスを返します。
SELECT SYS_CONTEXT('SNOWFLAKE$SESSION', 'DATABASE') AS database,
  SYS_CONTEXT('SNOWFLAKE$SESSION', 'SCHEMA') AS schema,
  SYS_CONTEXT('SNOWFLAKE$SESSION', 'WAREHOUSE') AS warehouse;
+----------+--------+--------------+
| DATABASE | SCHEMA | WAREHOUSE    |
|----------+--------+--------------|
| MY_DB    | PUBLIC | MY_WAREHOUSE |
+----------+--------+--------------+
次の例は、セッションの検索パスを含む JSON 配列を返します。
SELECT SYS_CONTEXT('SNOWFLAKE$SESSION', 'SCHEMAS');
+---------------------------------------------+
| SYS_CONTEXT('SNOWFLAKE$SESSION', 'SCHEMAS') |
|---------------------------------------------|
| ["MY_DB.MY_SCHEMA","MY_DB.PUBLIC"]          |
+---------------------------------------------+
次の例は、検索パスの各要素の行を返します。
SELECT value::VARCHAR AS path_element
  FROM TABLE(
    FLATTEN(INPUT => PARSE_JSON(SYS_CONTEXT('SNOWFLAKE$SESSION', 'SCHEMAS'))));
+-----------------------+
| PATH_ELEMENT          |
|-----------------------|
| BOOKS_DB.BOOKS_SCHEMA |
| BOOKS_DB.PUBLIC       |
+-----------------------+