カテゴリ:

コンテキスト関数 (一般)

SYS_CONTEXT(SNOWFLAKE$SESSION 名前空間)

関数が呼び出されるセッションに関する情報を返します。

この関数は以下のコンテキストで呼び出すことができます。

  • この関数は現在のセッションで直接呼び出すことができます。

  • この関数を呼び出す呼び出し元権限実行可能ファイル(呼び出し元権限ストアドプロシージャなど)を実行することができます。

  • 所有者ロールにアカウントに対する READ SESSION 権限が付与されている場合、この関数を呼び出す呼び出し元権限実行可能ファイル(呼び出し元権限ストアドプロシージャなど)を実行することができます。

その他のコンテキストでは、関数は NULL を返します。

こちらもご参照ください。

SYS_CONTEXTSYS_CONTEXT(SNOWFLAKE$APPLICATION 名前空間)SYS_CONTEXT(SNOWFLAKE$ENVIRONMENT 名前空間)SYS_CONTEXT(SNOWFLAKE$ORGANIZATION 名前空間)

構文

プロパティを取得するための構文:

SYS_CONTEXT(
  'SNOWFLAKE$SESSION' ,
  '<property>'
)
Copy

関数を呼び出すための構文:

SYS_CONTEXT(
  'SNOWFLAKE$SESSION' ,
  '<function>' , '<argument>' [ , ... ]
)
Copy

引数

'SNOWFLAKE$SESSION'

プロパティを取得するか、関数を呼び出して、関数が呼び出されたセッションに関する情報を返すことを指定します。

'property'

取得するプロパティの名前。次のプロパティを指定できます。

プロパティ

説明

PRINCIPAL_NAME

セッションを開始したプリンシパルの名前( ユーザー:doc:タスク </user-guide/tasks-intro> または SPCS サービス)。名前は PRINCIPAL_TYPE プロパティの値によって異なります。

  • PRINCIPAL_TYPE が次の値のいずれかである場合、PRINCIPAL_NAME プロパティの値はユーザーの名前です。

    • USER

    • USER_PERSON

    • USER_SERVICE

    • USER_LEGACY_SERVICE

  • PRINCIPAL_TYPETASK である場合、値はタスクの名前です。

  • PRINCIPAL_TYPESNOWSERVICE である場合、値は SPCS サービスの名前です。

PRINCIPAL_TYPE

セッションを開始したプリンシパルのタイプ。このプロパティは、次の値のいずれかを持つことができます。

  • ユーザーがセッションを開始した場合は、USER または USER_suffixsuffix はユーザーのタイプに応じて異なります。

    • ユーザーオブジェクトに 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;
Copy

このプロパティの JSON 配列には ACCOUNTADMIN ロールと SECURITYADMIN、SYSADMIN および USERADMIN ロールが含まれ、これらは ACCOUNTADMIN ロールの下にあります。

WANTED_SECONDARY_ROLES

ユーザーがリクエストしたアカウントレベルのロールの JSON 配列。例えば、ユーザーが次のことを実行したとします。

USE SECONDARY ROLES ACCOUNTADMIN;
Copy

このプロパティの JSON 配列には、ACCOUNTADMIN ロールのみが含まれます。

DATABASE

関数を呼び出したロールがデータベースにアクセスする権限を持っている場合は、セッションで使用されている現在のデータベース。

SCHEMA

関数を呼び出したロールがスキーマにアクセスする権限を持っている場合は、セッションで使用されている現在のスキーマ。

SCHEMAS

関数を呼び出したロールが現在のデータベースにアクセスする権限を持っている場合は、セッションのスキーマの現在の 検索パス

WAREHOUSE

セッションで使用中の現在のウェアハウス。

'function'

呼び出したい関数の名前。次の関数を呼び出すことができます。

'argument' [ , ... ]

呼び出したい関数に渡す引数。

戻り値

関数は VARCHAR 値または NULL を返します。

使用上の注意

  • シェルの二重引用符で囲まれた文字列で関数呼び出しを指定する場合は、$ 文字をバックスラッシュ(\)でエスケープして、$SESSION がシェル変数として解釈されないようにします。

    たとえば、Snowflake CLI を使用していて、SQL ステートメントを二重引用符で囲まれたコマンドライン引数として指定する 場合は、次のようになります。

    snow sql --query "SELECT SYS_CONTEXT('SNOWFLAKE\$SESSION', 'PRINCIPAL_NAME');"
    
    Copy

次の例は、セッションに関するコンテキスト情報を取得する方法を示しています。

プリンシパルの情報の取得

次の例は、関数を呼び出したプリンシパルの名前と型を返します。

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;
Copy
+--------------+-------------+---------------------+
| 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;
Copy
+---------+------+
| 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;
Copy
+------------------+---------------------------------------------------------+
| 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;
Copy
+----------+--------+--------------+
| DATABASE | SCHEMA | WAREHOUSE    |
|----------+--------+--------------|
| MY_DB    | PUBLIC | MY_WAREHOUSE |
+----------+--------+--------------+

次の例は、セッションの検索パスを含む JSON 配列を返します。

SELECT SYS_CONTEXT('SNOWFLAKE$SESSION', 'SCHEMAS');
Copy
+---------------------------------------------+
| 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'))));
Copy
+-----------------------+
| PATH_ELEMENT          |
|-----------------------|
| BOOKS_DB.BOOKS_SCHEMA |
| BOOKS_DB.PUBLIC       |
+-----------------------+