Categorias:

Funções de contexto (General)

SYS_CONTEXT (namespace SNOWFLAKE$SESSION)

Retorna informações sobre a sessão na qual a função é chamada.

Você pode chamar essa função nos seguintes contextos:

  • Você pode chamar essa função diretamente na sessão atual.

  • Você pode executar um executável de direitos do autor da chamada (por exemplo, um procedimento armazenado de direitos do autor da chamada) que chama essa função.

  • Você pode executar um executável de direitos do proprietário (por exemplo, um procedimento armazenado de direitos do proprietário) que chama essa função, desde que a função de proprietário tenha recebido o privilégio READ SESSION na conta.

Em qualquer outro contexto, a função retorna NULL.

Consulte também:

SYS_CONTEXT, SYS_CONTEXT (namespace SNOWFLAKE$APPLICATION), SYS_CONTEXT (namespace SNOWFLAKE$ENVIRONMENT), SYS_CONTEXT (namespace SNOWFLAKE$ORGANIZATION)

Sintaxe

Sintaxe para recuperar propriedades:

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

Sintaxe para chamar funções:

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

Argumentos

'SNOWFLAKE$SESSION'

Especifica que você deseja recuperar uma propriedade ou chamar uma função para retornar informações sobre a sessão na qual a função é chamada.

'property'

Nome da propriedade que você deseja recuperar. Você pode especificar as seguintes propriedades:

Propriedade

Descrição

PRINCIPAL_NAME

Nome da entidade (o usuário, tarefa ou SPCS serviço) que iniciou a sessão. O nome depende do valor da propriedade PRINCIPAL_TYPE:

  • Se PRINCIPAL_TYPE for um dos seguintes valores, o valor da propriedade PRINCIPAL_NAME será o nome do usuário:

    • USER

    • USER_PERSON

    • USER_SERVICE

    • USER_LEGACY_SERVICE

  • Se PRINCIPAL_TYPE for TASK, o valor será o nome da tarefa.

  • Se PRINCIPAL_TYPE for SNOWSERVICE, o valor será o nome do serviço SPCS.

PRINCIPAL_TYPE

Tipo da entidade que iniciou a sessão. Essa propriedade pode ter um dos seguintes valores:

  • USER ou USER_suffix, se um usuário iniciou a sessão. suffix depende do tipo de usuário:

    • Se o objeto de usuário não tiver a propriedade TYPE, o valor será USER.

    • Se a propriedade TYPE for PERSON, o valor será USER_PERSON.

    • Se a propriedade TYPE for SERVICE, o valor será USER_SERVICE.

    • Se a propriedade TYPE for LEGACY_SERVICE, o valor será USER_LEGACY_SERVICE.

  • TASK, se uma tarefa iniciou a sessão.

  • SNOWSERVICE, se um serviço SPCS iniciou a sessão.

PRINCIPAL_EMAIL

Endereço de e-mail associado à entidade. Se não houver um endereço de e-mail associado, o valor dessa propriedade será NULL.

PRINCIPAL_DATABASE

Nome do banco de dados que contém o objeto para a entidade. Por exemplo, se a entidade for uma tarefa, o valor dessa propriedade será o nome do banco de dados que contém a tarefa.

Se a entidade for um objeto no nível da conta (como um usuário), o valor dessa propriedade será NULL.

PRINCIPAL_SCHEMA

Nome do esquema que contém o objeto para a entidade. Por exemplo, se a entidade for uma tarefa, o valor dessa propriedade será o nome do esquema que contém a tarefa.

Se a entidade for um objeto no nível da conta (como um usuário), o valor dessa propriedade será NULL.

ID

Identificador da sessão na qual a função foi chamada.

ROLE

Função principal para a sessão na qual a função foi chamada.

ROLE_TYPE

Tipo da função principal. Essa propriedade pode ter um dos seguintes valores:

  • ROLE, se a função principal for uma função de conta.

ROLE_DATABASE

Nome do banco de dados que contém a função de banco de dados, se a função principal for uma função de banco de dados.

SECONDARY_ROLES

Matriz JSON das funções em nível de conta ativadas como funções secundárias na sessão. As funções ativadas incluem funções que estão hierarquicamente abaixo da função solicitada. Por exemplo, suponha que o usuário tenha executado:

USE SECONDARY ROLES ACCOUNTADMIN;
Copy

A matriz JSON para essa propriedade inclui a função ACCOUNTADMIN e as funções SECURITYADMIN, SYSADMIN e USERADMIN, que estão abaixo da função ACCOUNTADMIN.

WANTED_SECONDARY_ROLES

Matriz JSON das funções em nível de conta solicitadas pelo usuário. Por exemplo, suponha que o usuário tenha executado:

USE SECONDARY ROLES ACCOUNTADMIN;
Copy

A matriz JSON para essa propriedade inclui apenas a função ACCOUNTADMIN.

DATABASE

Banco de dados atual em uso para a sessão, se a função que chamou a função tiver privilégios para acessar o banco de dados.

SCHEMA

Esquema atual em uso para a sessão, se a função que chamou a função tiver privilégios para acessar o esquema.

SCHEMAS

Caminho de pesquisa atual de esquemas para a sessão, se a função que chamou a função tiver privilégios para acessar o banco de dados atual.

WAREHOUSE

Warehouse atual em uso para a sessão.

'function'

Nome da função que você deseja chamar. Você pode chamar as seguintes funções:

'argument' [ , ... ]

Argumentos a serem passados ​​para a função que você deseja chamar.

Retornos

A função retorna um valor VARCHAR ou NULL:

Notas de uso

  • Se você estiver especificando a chamada da função em uma cadeia de caracteres entre aspas duplas em um shell, aplique o escape do caractere $ com uma barra invertida (\) para que $SESSION não seja interpretado como uma variável do shell.

    Por exemplo, se você estiver usando Snowflake CLI e especificando a instrução SQL como um argumento de linha de comando entre aspas duplas:

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

Exemplos

Os exemplos a seguir demonstram como recuperar informações de contexto sobre a sessão:

Recuperação de informações sobre a entidade

O exemplo a seguir retorna o nome e o tipo da entidade que chamou a função:

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 |
+--------------+-------------+---------------------+

Recuperação de informações sobre funções

O exemplo a seguir retorna o nome e o tipo da função principal na sessão em que a função foi chamada:

SELECT SYS_CONTEXT('SNOWFLAKE$SESSION', 'ROLE') AS role,
  SYS_CONTEXT('SNOWFLAKE$SESSION', 'ROLE_TYPE') AS type;
Copy
+---------+------+
| ROLE    | TYPE |
|---------+------|
| MY_ROLE | ROLE |
+---------+------+

O exemplo a seguir usa a função ACCOUNTADMIN como uma função secundária. O exemplo retorna a lista de funções secundárias solicitadas na sessão (ACCOUNTADMIN) e ​​a lista de funções em nível de conta que são ativadas como funções secundárias na sessão.

A lista de funções ativadas inclui funções que estão hierarquicamente abaixo da função solicitada. Como a função ACCOUTADMIN está ativada, a lista inclui SECURITYADMIN, SYSADMIN e USERADMIN, que estão abaixo da função 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"] |
+------------------+---------------------------------------------------------+

Recuperação do banco de dados, esquema, caminho de pesquisa e warehouse atuais

O exemplo a seguir retorna o banco de dados, esquema e warehouse atuais em uso na sessão:

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 |
+----------+--------+--------------+

O exemplo a seguir retorna uma matriz JSON que contém o caminho de pesquisa para a sessão:

SELECT SYS_CONTEXT('SNOWFLAKE$SESSION', 'SCHEMAS');
Copy
+---------------------------------------------+
| SYS_CONTEXT('SNOWFLAKE$SESSION', 'SCHEMAS') |
|---------------------------------------------|
| ["MY_DB.MY_SCHEMA","MY_DB.PUBLIC"]          |
+---------------------------------------------+

O exemplo a seguir retorna uma linha para cada elemento no caminho de pesquisa:

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       |
+-----------------------+