Esquema:

ACCOUNT_USAGE

Exibição ACCESS_HISTORY

Esta visualização de Account Usage pode ser usada para consultar o histórico de acesso dos objetos Snowflake (por exemplo, tabela, visualização, coluna) nos últimos 365 dias (1 ano).

Colunas

Há duas tabelas nesta seção:

  • A primeira tabela define as colunas na visualização ACCESS_HISTORY.

  • A segunda tabela define os campos na matriz JSON para as colunas BASE_OBJECTS_ACCESSED, DIRECT_OBJECTS_ACCESSED e OBJECTS_MODIFIED.

Nome da coluna

Tipo de dados

Descrição

Exemplo

QUERY_ID

TEXT

Um identificador interno gerado pelo sistema para a instrução SQL. Este valor também é mencionado em Exibição QUERY_HISTORY.

a0fda135-d678-4184-942b-c3411ae8d1ce

QUERY_START_TIME

TIMESTAMP_LTZ

A hora de início da instrução (fuso horário UTC).

2022-01-25 16:17:47.388 +0000

USER_NAME

TEXT

O usuário que emitiu a consulta.

JSMITH

DIRECT_OBJECTS_ACCESSED

ARRAY

Uma matriz JSON de objetos de dados, como funções definidas pelo usuário (ou seja UDFs e UDTFs), procedimentos armazenados, tabelas, visualizações e colunas nomeadas diretamente na consulta explicitamente ou por atalhos como o uso de um asterisco (ou seja, *).

As colunas virtuais podem ser devolvidas neste campo.

Para obter notas adicionais sobre UDFs, consulte as notas sobre UDF (neste tópico).

[
  {
    "objectDomain": "FUNCTION",
    "objectName": "GOVERNANCE.FUNCTIONS.RETURN_SUM",
    "objectId": "2",
    "argumentSignature": "(NUM1 NUMBER, NUM2 NUMBER)",
    "dataType": "NUMBER(38,0)"
  },
  {
    "columns": [
      {
        "columnId": 68610,
        "columnName": "CONTENT"
      }
    ],
    "objectDomain": "Table",
    "objectId": 66564,
    "objectName": "GOVERNANCE.TABLES.T1"
  }
]
Copy

BASE_OBJECTS_ACCESSED

ARRAY

Uma matriz JSON de todos os objetos de dados básicos para executar uma consulta, incluindo colunas, funções externas, UDFs e procedimentos armazenados.

Neste exemplo, os campos da primeira matriz especificam uma UDF. Estes mesmos campos na primeira matriz também especificam um procedimento armazenado, quando aplicável.

Observe o seguinte:

  • Este campo especifica os nomes das exibições ou colunas de exibição, incluindo colunas virtuais, se uma exibição compartilhada for acessada em uma conta de consumidor de compartilhamento de dados.

  • Para obter notas adicionais sobre UDFs, consulte as notas sobre UDF (neste tópico).

[
  {
    "objectDomain": "FUNCTION",
    "objectName": "GOVERNANCE.FUNCTIONS.RETURN_SUM",
    "objectId": "2",
    "argumentSignature": "(NUM1 NUMBER, NUM2 NUMBER)",
    "dataType": "NUMBER(38,0)"
  },
  {
    "columns": [
      {
        "columnId": 68610,
        "columnName": "CONTENT"
      }
    ],
    "objectDomain": "Table",
    "objectId": 66564,
    "objectName": "GOVERNANCE.TABLES.T1"
  }
]
Copy

OBJECTS_MODIFIED

ARRAY

Uma matriz JSON que especifica os objetos que foram associados a uma operação de gravação na consulta.

A matriz de procedimento armazenado e UDF é a mesma que foi mostrada anteriormente e aparece nas matrizes para baseSources e directSources dependendo de como o acesso foi feito. Para maior brevidade, este exemplo omite a matriz de procedimento armazenado e UDF.

Para obter notas adicionais sobre UDFs, consulte as notas sobre UDF (neste tópico).

[
  {
    "objectDomain": "STRING",
    "objectId":  NUMBER,
    "objectName": "STRING",
    "columns": [
      {
        "columnId": "NUMBER",
        "columnName": "STRING",
        "baseSources": [
          {
            "columnName": STRING,
            "objectDomain": "STRING",
            "objectId": NUMBER,
            "objectName": "STRING"
          }
        ],
        "directSources": [
          {
            "columnName": STRING,
            "objectDomain": "STRING",
            "objectId": NUMBER,
            "objectName": "STRING"
          }
        ]
      }
    ]
  },
  ...
]
Copy

OBJECT_MODIFIED_BY_DDL

OBJECT

Esta coluna é um espaço reservado para futuras funcionalidades.

POLICIES_REFERENCED

ARRAY

Especifica as informações sobre a política de mascaramento aplicada definida na coluna e a política de acesso a linhas aplicada na tabela, incluindo políticas definidas em objetos ou colunas intermediários.

[
  {
    "columns": [
      {
        "columnId": 68610,
        "columnName": "SSN",
        "policies": [
          {
              "policyName": "governance.policies.ssn_mask",
              "policyId": 68811,
              "policyKind": "MASKING_POLICY"
          }
        ]
      }
    ],
    "objectDomain": "VIEW",
    "objectId": 66564,
    "objectName": "GOVERNANCE.VIEWS.V1",
    "policies": [
      {
        "policyName": "governance.policies.rap1",
        "policyId": 68813,
        "policyKind": "ROW_ACCESS_POLICY"
      }
    ]
  }
]
Copy

Os campos na matriz JSON para as colunas DIRECT_OBJECTS_ACCESSED, BASE_OBJECTS_ACCESSED, OBJECTS_MODIFIED e POLICIES_REFERENCED estão descritos abaixo.

Campo

Tipo de dados

Descrição

columnId

NUMBER

Uma coluna ID que é única dentro da conta. Este valor é idêntico ao columnID na visualização COLUMNS.

columnName

TEXT

O nome da coluna acessada. Para as políticas, especifica a coluna na qual a política de mascaramento é definida.

objetId

NUMBER

Um identificador do objeto, que é único dentro de uma determinada conta e domínio. Este número será correspondente ao seguinte:

  • O número TABLE_ID para uma tabela, exibição e exibição materializada.

  • Se um estágio foi acessado, este número corresponderá ao seguinte:

    • O identificador NAME de um usuário (estágio do usuário).

    • O número TABLE_ID de uma tabela (estágio da tabela).

    • Número STAGE_ID de um estágio (estágio nomeado).

objectName

TEXT

O nome completo e qualificado do objeto que foi acessado.

Se uma política de mascaramento for definida em uma coluna ou uma política de acesso a linhas for definida em uma tabela ou exibição, o valor se referirá ao nome totalmente qualificado da tabela ou exibição na qual a política de acesso a linhas é definida ou a tabela ou exibição que tem uma política de mascaramento definida em uma de suas colunas.

Se um estágio foi acessado, este valor será o valor:

  • username (estágio do usuário).

  • table_name (estágio da tabela).

  • stage_name (estágio nomeado).

objectDomain

TEXT

Uma das seguintes opções: EXTERNAL TABLE, FUNCTION, MATERIALIZED VIEW, PROCEDURE, STAGE, STREAM ou VIEW.

Observe que FUNCTION especifica UDFs, UDTFs e funções externas.

Para as políticas, especifica o domínio do objeto no qual a política de acesso a linhas é definida.

local

TEXT

O URL do local externo quando o acesso aos dados é um local externo (por exemplo, s3://mybucket/a.csv). . Se a consulta não acessar um estágio, este campo é omitido.

stageKind

TEXT

Ao gravar em um estágio, uma das seguintes opções: Table | User | Internal Named | External Named

Se a consulta não acessar um estágio, este campo é omitido.

baseSources

TEXT

As colunas que servem como colunas de origem para as colunas especificadas por directSources. Estas colunas facilitam a linhagem de colunas.

directSources

TEXT

As colunas especificamente mencionadas na parte dos dados escrever da declaração SQL que serve como as colunas de origem na tabela de destino para a qual os dados são escritos. Estas colunas facilitam a linhagem de colunas.

policyName

TEXT

O nome totalmente qualificado da política.

policyId

NUMBER

Um identificador da política, que é único dentro de uma determinada conta e domínio. Este valor corresponde ao identificador de uma política de mascaramento no Exibição MASKING_POLICIES ou ao identificador de uma política de acesso a linhas no Exibição ROW_ACCESS_POLICIES

policyKind

TEXT

MASKING_POLICY ou ROW_ACCESS_POLICY

argumentoSignature

TEXT

O nome e o tipo de dados para cada argumento na UDF ou procedimento armazenado.

dataType

O tipo de dados do valor de retorno para uma UDF ou procedimento armazenado.

Este valor ajuda a diferenciar duas ou mais UDFs com o mesmo nome, mas tipos de retorno diferentes.

Notas de uso

Notas gerais
  • A visualização exibe dados a partir de 22 de fevereiro de 2021.

  • A latência da visualização pode ser de até 180 minutos (3 horas).

  • Para aumentar o desempenho, filtre as consultas na coluna QUERY_START_TIME e escolha períodos mais curtos. Para amostras de consulta, consulte Consulta da exibição ACCESS_HISTORY.

  • Visualizações seguras. O registro contém a tabela base subjacente (ou seja BASE_OBJECTS_ACCESSED) para gerar a visualização. Exemplos incluem consultas em outras visualizações do Account Usage e consultas em tabelas base para operações de extração, transformação e carga (ou seja, ETL).

  • Registros na exibição QUERY_HISTORY do Account Usage nem sempre são gravados na exibição ACCESS_HISTORY. A estrutura da instrução SQL determina se o Snowflake registra uma entrada na exibição ACCESS_HISTORY.

  • Especificar a cláusula USING ao consultar esta exibição pode fazer com que colunas não referenciadas sejam registradas no campo DIRECT_OBJECTS_ACCESSED. Como alternativa, substitua a cláusula USING por uma cláusula JOIN ... ON .... Para obter mais detalhes, consulte:

Leia as notas de consulta

Esta exibição oferece suporte a consultas de leitura do seguinte tipo:

  • SELECT incluindo CREATE TABLE … AS SELECT (como CTAS).

    • O Snowflake registra a subconsulta SELECT em uma operação CTAS.

  • CREATE TABLE … CLONE

    • O Snowflake registra a tabela de origem em uma operação CLONE.

  • COPY INTO … TABLE

    • O Snowflake registra esta consulta somente quando a tabela é especificada como a fonte em uma cláusula FROM.

  • Operações DML que leem dados (por exemplo, contém uma subconsulta SELECT, especifica certas colunas em WHERE ou JOIN): INSERT … SELECT, UPDATE, DELETE e MERGE.

  • UDFs e UDFs tabulares de SQL (UDTFs) se as tabelas estiverem incluídas nas consultas dentro das funções. Isso é registrado no campo BASE_OBJECTS_ACCESSED.

    Para obter mais detalhes sobre UDFs, consulte as notas UDF (neste tópico).

Gravação de notas de operação

Esta exibição oferece suporte às operações de gravação do seguinte tipo:

  • GET <estágio_interno>

  • PUT <estágio_interno>

  • DELETE

  • TRUNCATE

  • INSERT

    • INSERT INTO … FROM SELECT *

    • INSERT INTO TABLE … VALUES ()

  • MERGE INTO … FROM SELECT *

  • UPDATE

    • UPDATE TABLE … FROM SELECT * FROM …

    • UPDATE TABLE … WHERE …

  • Instruções de carregamento de dados:

    • COPY INTO TABLE FROM internalStage

    • COPY INTO TABLE FROM externalStage

    • COPY INTO TABLE FROM externalLocation

  • Instruções de descarregamento de dados:

    • COPY INTO internalStage FROM TABLE

    • COPY INTO externalStage FROM TABLE

    • COPY INTO externalLocation FROM TABLE

  • CREATE:

    • CREATE DATABASE … CLONE

    • CREATE SCHEMA … CLONE

    • CREATE TABLE … CLONE

    • CREATE TABLE … AS SELECT

  • Para operações de escrita que chamam a função CASE para determinar as colunas a serem acessadas, como uma instrução CTAS com a função CASE na consulta SELECT, todas as colunas referenciadas em cada ramo CASE são registradas na coluna BASE_OBJECTS_ACCESSED, na coluna DIRECT_OBJECTS_ACCESSED, ou em ambas as colunas dependendo de como a instrução CTAS é escrita.

Notas de compartilhamento de dados

Se uma conta do provedor de compartilhamento de dados compartilhar objetos com contas do consumidor de compartilhamento de dados por um compartilhamento:

  • Contas do provedor: As consultas e logs dos objetos compartilhados executados na conta do provedor não ficam visíveis para as contas de consumidor de compartilhamento de dados.

  • Contas de consumidor: As consultas de compartilhamento de dados executadas na conta do consumidor são registradas e ficam visíveis somente para a conta de consumidor, e não para a conta de provedor de compartilhamento de dados.

    Por exemplo, se o provedor compartilha uma tabela e uma exibição construída a partir da tabela para a conta do consumidor, e há uma consulta sobre a exibição compartilhada, o Snowflake registra o acesso à exibição compartilhada na coluna BASE_OBJECTS_ACCESSED. Esse registro, que inclui os valores columnName e objectName, permite que o consumidor saiba qual objeto foi acessado em sua conta e também protege o provedor porque a tabela subjacente (através dos valores objectId e columnId) não é revelada ao consumidor.

  • Para linhagem de colunas:

    Se um provedor de compartilhamento de dados disponibilizar uma exibição para o consumidor de compartilhamento de dados, as colunas de origem da exibição não ficarão visíveis para o consumidor porque as colunas são originadas do provedor de compartilhamento de dados.

    Se o consumidor do compartilhamento de dados mover os dados da exibição compartilhada para uma tabela, Snowflake não registra as colunas de exibição como baseSources para a tabela recém-criada.

  • Para compartilhar UDFs e UDTFs:

    • Na conta do consumidor, a exibição ACCESS_HISTORY local registra a UDF/UDTF que foi compartilhada pelo provedor quando a UDF/UDTF compartilhada é invocada pelo consumidor.

    • Na conta do provedor, a exibição ACCESS_HISTORY local registra o uso do provedor de uma UDF/UDTF compartilhada. Os usuários na conta do consumidor não podem ver como a conta do provedor utiliza a UDF/UDTF compartilhada.

  • Para rastreamento de referências de políticas:

    A coluna POLICIES_REFERENCED contém políticas que são locais para a conta que consulta os dados.

    Se um provedor compartilhar uma tabela protegida por política e um consumidor acessar essa tabela, o consumidor não poderá ver a política que o provedor definiu na tabela ou suas colunas.

    Se um consumidor criar uma exibição (v1) do objeto compartilhado, definir uma política para a exibição (v1) ou suas colunas, e um usuário na conta do consumidor acessar a exibição protegida (v1) ou outra exibição (v2) criada a partir da exibição protegida (v1), a exibição ACCESS_HISTORY na conta do consumidor terá a política que protege a exibição (v1) e suas colunas. O provedor não pode ver o registro que corresponde a v1.

Notas de mascaramento baseado em tags

Se um usuário acessar uma tabela ou exibição protegida por uma política de mascaramento baseada em tags, a coluna POLICIES_REFERENCED terá a política de mascaramento aplicada pela tag quando o Snowflake aplica a política de mascaramento na coluna protegida.

A exibição ACCESS_HISTORY não registra nenhuma informação da tag.

UDFs e procedimentos armazenados

Estas notas se aplicam às funções externas, UDFs e UDTFs para todas as linguagens, inclusive quando estas funções têm a propriedade SECURE, e procedimentos armazenados com direitos de proprietário e direitos de chamador:

Detalhes da coluna:

  • A coluna DIRECT_OBJECTS_ACCESSED registra a menção explícita destas funções e procedimentos em uma consulta.

    O Snowflake não registra UDFs aninhadas (ou seja, uma UDF mencionada na definição de outra UDF) nesta coluna.

  • A coluna BASE_OBJECTS_ACCESSED registra funções externas, funções compartilhadas, UDFs não SQL, e procedimentos armazenados que são chamados em uma consulta.

  • A coluna OBJECTS_MODIFIED registra:

    • A UDF/UDTF quando o resultado da chamada da função copia o resultado para outra coluna.

    • A UDF, UDTF e uma função externa podem ser registradas nas matrizes para baseSources e directSources, dependendo de como a consulta é escrita.

Sem suporte

Esta visualização não registra os acessos dos seguintes tipos:

  • Funções de tabela fornecidas pelo Snowflake ou outras exibições Account Usage.

  • RESULT_SCAN para obter resultados prévios.

  • Sequências, incluindo a geração de novos valores.

  • Visualizações intermediárias acessadas entre a tabela base e o objeto direto.

    Por exemplo, considere uma consulta em View_A com a seguinte estrutura de objetos: View_A » View_B » View_C » Base_Table.

    A exibição ACCESS_HISTORY registra a consulta na Exibição_A e na Tabela_base, não na Exibição_B e Exibição_C.

  • As operações de preenchimento de exibições, exibições materializadas e fluxos.

  • Movimento de dados resultante da replicação.

Notas de uso: Linhagem de colunas

Estas notas adicionais dizem respeito à linhagem de colunas:

Operações com suporte

Detalhes da linhagem de colunas para as seguintes operações SQL:

Condições de consulta
  • Perfil/plano de consulta

    O plano de consulta que o Snowflake escreve determina se a exibição ACCESS_HISTORY contém a linhagem de colunas. Se uma coluna precisar ser avaliada como parte do plano de consulta, Snowflake contém a coluna na exibição ACCESS_HISTORY, mesmo se o resultado final do plano de consulta for que a coluna não está incluída no resultado final.

    Por exemplo, considere a seguinte instrução INSERT com uma cláusula WHERE para um determinado valor de coluna:

    insert into a(c1)
    select c2
    from b
    where c3 > 1;
    
    Copy

    Mesmo que a cláusula WHERE avalie como FALSE, Snowflake registra a coluna c2 como uma coluna de origem para a coluna c1. A coluna c3 não está listada como coluna de origem para baseSources ou directSources.

  • Colunas mascaradas:

    • A coluna mascarada é sempre listada no campo directSources.

    • O registro no campo baseSources depende da definição da política. Por exemplo:

      • Se as condições da política de mascaramento utilizarem uma função CASE, então todas as colunas referenciadas em cada uma das ramificações CASE são registradas no campo baseSources.

      • Se as condições da política de mascaramento especificarem apenas um valor constante (por exemplo, *****), então o campo baseSources estará vazio.

  • UDFs:

    • Ao passar uma coluna como argumento para um UDF e escrever o resultado para outra coluna, a coluna que é passada como argumento é registrada no campo directSources. Por exemplo:

      insert into A(col1) select f(col2) from B;
      
      Copy

      Neste exemplo, Snowflake registra col2 no campo directSources porque a coluna é um argumento para o UDF chamado f.

    • O registro no campo baseSources depende da definição do UDF.

Exibição de colunas

As colunas de exibição não são consideradas colunas de origem e não são listadas no campo baseSources quando dados de uma coluna de exibição são copiados para uma coluna de tabela. As colunas de exibição neste caso estão listadas no campo directSources.

Subconsulta EXISTS

As colunas que são referenciadas na cláusula de subconsulta EXISTS não são consideradas como colunas de origem.