- 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>'
)
Sintaxe para chamar funções:
SYS_CONTEXT(
'SNOWFLAKE$SESSION' ,
'<function>' , '<argument>' [ , ... ]
)
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_NAMENome 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_TYPEfor um dos seguintes valores, o valor da propriedadePRINCIPAL_NAMEserá o nome do usuário:USERUSER_PERSONUSER_SERVICEUSER_LEGACY_SERVICE
Se
PRINCIPAL_TYPEforTASK, o valor será o nome da tarefa.Se
PRINCIPAL_TYPEforSNOWSERVICE, o valor será o nome do serviço SPCS.
PRINCIPAL_TYPETipo da entidade que iniciou a sessão. Essa propriedade pode ter um dos seguintes valores:
USERouUSER_suffix, se um usuário iniciou a sessão.suffixdepende 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_EMAILEndereço de e-mail associado à entidade. Se não houver um endereço de e-mail associado, o valor dessa propriedade será NULL.
PRINCIPAL_DATABASENome 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_SCHEMANome 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.
IDIdentificador da sessão na qual a função foi chamada.
ROLEFunção principal para a sessão na qual a função foi chamada.
ROLE_TYPETipo 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_DATABASENome 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_ROLESMatriz 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;
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_ROLESMatriz 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;
A matriz JSON para essa propriedade inclui apenas a função ACCOUNTADMIN.
DATABASEBanco 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.
SCHEMAEsquema atual em uso para a sessão, se a função que chamou a função tiver privilégios para acessar o esquema.
SCHEMASCaminho 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.
WAREHOUSEWarehouse 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:
O valor de retorno depende da propriedade que você está recuperando ou da função que você está chamando.
Se você chamar SYS_CONTEXT com o namespace SNOWFLAKE$SESSION fora de qualquer um dos contextos aceitos, a função retornará 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$SESSIONnã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');"
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;
+--------------+-------------+---------------------+
| 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;
+---------+------+
| 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;
+------------------+---------------------------------------------------------+
| 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;
+----------+--------+--------------+
| 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');
+---------------------------------------------+
| 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'))));
+-----------------------+
| PATH_ELEMENT |
|-----------------------|
| BOOKS_DB.BOOKS_SCHEMA |
| BOOKS_DB.PUBLIC |
+-----------------------+