Schéma :

ACCOUNT_USAGE

Vue ACCESS_HISTORY

Cette vue Account Usage peut être utilisée pour interroger l’historique des accès aux objets Snowflake (par exemple, table, vue, colonne) au cours des 365 derniers jours (1 année).

Colonnes

Cette section comprend deux tableaux :

  • Le premier tableau définit les colonnes de la vue ACCESS_HISTORY.

  • Le deuxième tableau définit les champs du tableau JSON pour les colonnes BASE_OBJECTS_ACCESSED, DIRECT_OBJECTS_ACCESSED et OBJECTS_MODIFIED.

Nom de la colonne

Type de données

Description

Exemple

QUERY_ID

TEXT

Identificateur interne, généré par le système pour l’instruction SQL. Cette valeur est également mentionnée dans le Vue QUERY_HISTORY.

a0fda135-d678-4184-942b-c3411ae8d1ce

QUERY_START_TIME

TIMESTAMP_LTZ

Heure de début de l’instruction (fuseau horaireUTC).

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

USER_NAME

TEXT

Utilisateur qui a émis la requête.

JSMITH

DIRECT_OBJECTS_ACCESSED

ARRAY

Tableau JSON d’objets de données, tels que des tables, des vues et des colonnes nommés directement dans la requête de manière explicite ou par des raccourcis comme l’utilisation d’un astérisque (c’est-à-dire *). Des colonnes virtuelles peuvent être renvoyées dans ce champ.

[
  {
    "columns": [
      {
        "columnId": 68610,
        "columnName": "CONTENT"
      }
    ],
    "objectDomain": "Table",
    "objectId": 66564,
    "objectName": "TEST_DB.TEST_SCHEMA.T1"
  }
]

BASE_OBJECTS_ACCESSED

ARRAY

Un tableau JSON de tous les objets de données de base, plus précisément, les colonnes des tables pour exécuter la requête.

Remarque : ce champ spécifie les noms de vue ou les colonnes de vue, y compris les colonnes virtuelles, si une vue partagée est accessible dans un compte de consommateur de partage de données.

[
  {
    "columns": [
      {
        "columnId": 68610,
        "columnName": "CONTENT"
      }
    ],
    "objectDomain": "Table",
    "objectId": 66564,
    "objectName": "TEST_DB.TEST_SCHEMA.T1"
  }
]

OBJECTS_MODIFIED

ARRAY

Un tableau JSON qui spécifie les objets qui ont été associés à une opération d’écriture dans la requête.

[
  {
    "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"
          }
        ]
      }
    ]
  },
  ...
]

Les champs du tableau JSON pour les colonnes DIRECT_OBJECTS_ACCESSED, BASE_OBJECTS_ACCESSED, et OBJECTS_MODIFIED sont décrits ci-dessous.

Champ

Type de données

Description

columnId

NUMBER

ID de colonne qui est unique dans le compte. Cette valeur est identique à columnID de la vue COLUMNS.

columnName

TEXT

Nom de la colonne à laquelle on accède.

objectId

NUMBER

Un identificateur pour l’objet, qui est unique dans un compte et un domaine donnés. Ce numéro correspondra :

  • Au numéro TABLE_ID pour une table, une vue, et une vue matérialisée.

  • S’il y a eu un accès à la zone de préparation, ce numéro correspondra :

    • À l’identificateur NAME pour un utilisateur (zone de préparation de l’utilisateur).

    • Au numéro TABLE_ID pour une table (zone de préparation de table).

    • Au numéro STAGE_ID pour une zone de préparation (zone de préparation nommée).

objectName

TEXT

Nom entièrement qualifié de l’objet auquel on a accédé.

S’il y a eu un accès à la zone de préparation, cette valeur sera :

  • username (zone de préparation de l’utilisateur).

  • table_name (zone de préparation de table).

  • stage_name (zone de préparation nommée).

objectDomain

TEXT

Un des éléments suivants : Table, View, Materialized view, External table, Stream, ou Stage.

emplacement

TEXT

L’URL de l’emplacement externe lorsque l’accès aux données est un emplacement externe (par exemple, s3://mybucket/a.csv). . Si la requête n’accède pas à une zone de préparation, ce champ est omis.

stageKind

TEXT

Lorsque vous effectuez une opération en écriture vers une zone de préparation, l’un des éléments suivants : Table | User | Internal Named | External Named

Si la requête n’accède pas à une zone de préparation, ce champ est omis.

baseSources

TEXT

Les colonnes qui servent de colonnes sources pour les colonnes spécifiées par directSources. Ces colonnes facilitent la lignée des colonnes.

directSources

TEXT

Les colonnes spécifiquement mentionnées dans la partie write des données de l’instruction SQL qui sert de colonnes sources dans la table cible dans laquelle les données sont écrites. Ces colonnes facilitent la lignée des colonnes.

Notes sur l’utilisation

Notes générales
  • La vue affiche les données à partir de 22 février 2021.

  • Pour améliorer les performances, filtrez les requêtes sur la colonne QUERY_START_TIME et choisissez des périodes plus restreintes. Pour des exemples de requêtes, voir Interrogation de la vue ACCESS_HISTORY Vue.

  • Vues sécurisées. L’enregistrement du journal contient la table de base sous-jacente (c’est-à-dire BASE_OBJECTS_ACCESSED) pour générer la vue. Les exemples incluent des requêtes sur d’autres vues Account Usage et des requêtes sur des tables de base pour des opérations d’extraction, de transformation et de chargement (c’est-à-dire ETL).

Remarques sur les requêtes de lecture

Cette vue prend en charge les requêtes de type lecture suivantes :

  • SELECT dont CREATE TABLE … AS SELECT (c’est-à-dire CTAS).

    • Snowflake enregistre la sous-requête SELECT dans une opération CTAS.

  • CREATE TABLE … CLONE

    • Snowflake enregistre la table source dans une opération CLONE.

  • COPY INTO … TABLE

    • Snowflake enregistre cette requête seulement lorsque la table est spécifiée comme source dans une clause FROM.

  • Opérations DML qui lisent des données (par exemple, contient une sous-requête SELECT, spécifie certaines colonnes dans WHERE ou JOIN) : INSERT … SELECT, UPDATE, DELETE et MERGE.

  • Fonctions définies par l’utilisateur (c’est-à-dire UDFs) et UDFs SQL tabulaires (UDTFs) si les tables sont incluses dans les requêtes à l’intérieur des fonctions. Ceci est enregistré dans le champ BASE_OBJECTS_ACCESSED.

Remarques sur les opérations d’écriture

Cette vue prend en charge les opérations d’écriture du type suivant :

  • GET <zone_de_préparation_interne>

  • PUT <zone_de_préparation_interne>

  • DELETE

  • TRUNCATE

  • INSERT

    • INSERT INTO … FROM SELECT *

    • INSERT INTO TABLE … VALUES ()

  • MERGE INTO … FROM SELECT *

  • UPDATE

    • UPDATE TABLE … FROM SELECT * FROM …

    • UPDATE TABLE … WHERE …

  • Instructions de chargement de données :

    • COPY INTO TABLE FROM internalStage

    • COPY INTO TABLE FROM externalStage

    • COPY INTO TABLE FROM externalLocation

  • Instructions de déchargement des données :

    • 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

  • Pour les opérations d’écriture qui font appel à la fonction CASE pour déterminer les colonnes auxquelles accéder, comme une instruction CTAS avec la fonction CASE dans la requête SELECT, toutes les colonnes référencées dans chaque branche CASE sont enregistrées dans la colonne BASE_OBJECTS_ACCESSED, la colonne DIRECT_OBJECTS_ACCESSED, ou les deux colonnes selon la façon dont l’instruction CTAS est écrite.

Remarques sur le partage des données

Si un compte de fournisseur Data Sharing partage des objets avec des comptes de consommateurs Data Sharing par le biais d’un partage :

  • Comptes de fournisseurs : les requêtes et les journaux sur les objets partagés exécutés dans le compte de fournisseur ne seront pas visibles pour les comptes de consommateurs de partage de données.

  • Comptes de consommateurs : les requêtes sur le partage de données exécutées dans le compte de consommateur sont enregistrées et uniquement visibles par le compte de consommateur, et non par le compte de fournisseur de partage de données.

    Par exemple, si le fournisseur partage une table et une vue construite à partir de la table avec le compte de consommateur, et qu’il y a une requête sur la vue partagée, Snowflake enregistre l’accès à la vue partagée dans la colonne BASE_OBJECTS_ACCESSED. Cet enregistrement, qui comprend les valeurs columnName et objectName , permet au consommateur de savoir à quel objet on a accédé dans son compte et protège également le fournisseur, car la table sous-jacente (via objectId et columnId) n’est pas révélée au consommateur.

  • Pour la lignée de colonnes :

    Si un fournisseur de partage de données met une vue à la disposition du consommateur du partage de données, les colonnes sources de la vue ne sont pas visibles pour le consommateur car les colonnes proviennent du fournisseur du partage de données.

    Si le consommateur de partage de données déplace les données de la vue partagée vers une table, Snowflake n’enregistre pas les colonnes de la vue comme baseSources pour la table qui vient d’être créée.

Non pris en charge
  • Cette vue n’enregistre pas les accès des types suivants :

  • De plus, cette vue ne prend pas en charge :

    • Les séquences, notamment la génération de nouvelles valeurs.

    • Les données qui entrent ou sortent de Snowflake lors de l’utilisation d’une fonction externe.

    • Les vues intermédiaires accessibles entre la table de base et l’objet direct.

      Par exemple, considérons une requête sur la vue_A avec la structure d’objet suivante : Vue_A » Vue_B » Vue_C » Table_base.

      La vue ACCESS_HISTORY enregistre la requête sur la Vue_A et la Table_base, pas sur la Vue_A ni la Vue_B.

    • Les opérations pour alimenter les vues, les vues matérialisées et les flux.

    • Mouvement de données résultant de la réplication.

Notes sur l’utilisation : lignée de colonnes

Ces notes supplémentaires se rapportent à la lignée des colonnes :

Opérations prises en charge

La lignée de colonnes suit les détails des opérations SQL suivantes :

Conditions de la requête
  • Profil/plan de requête

    Le plan de requête que Snowflake écrit détermine si la vue ACCESS_HISTORY enregistre la lignée des colonnes. Si une colonne doit être évaluée dans le cadre du plan de requête, Snowflake enregistre la colonne dans la vue ACCESS_HISTORY, même si le résultat final du plan de requête est que la colonne n’est pas incluse dans le résultat final.

    Par exemple, considérez l’instruction INSERT suivante avec une clause WHERE pour une valeur de colonne particulière :

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

    Même si la clause WHERE est évaluée à FALSE, Snowflake enregistre la colonne c2 comme une colonne source pour la colonne c1. La colonne c3 n’est pas répertoriée comme une colonne source pour baseSources ou directSources.

  • Colonnes masquées :

    • La colonne masquée est toujours répertoriée dans le champ directSources.

    • L’enregistrement dans le champ baseSources dépend de la définition de la politique. Par exemple :

      • Si les conditions de la politique de masquage utilisent une fonction CASE, alors toutes les colonnes référencées dans chacune des branches CASE sont enregistrées dans le champ baseSources.

      • Si les conditions de la politique de masquage ne spécifient qu’une valeur constante (par exemple, *****), le champ baseSources est vide.

  • UDFs :

    • Lorsqu’on valide une colonne en argument dans une UDF et qu’on écrit le résultat dans une autre colonne, la colonne validée en argument est enregistrée dans le champ directSources. Par exemple :

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

      Dans cet exemple, Snowflake enregistre col2 dans le champ directSources parce que la colonne est un argument pour l’UDF nommée f.

    • L’enregistrement dans le champ baseSources dépend de la définition de l’UDF.

Colonnes Vue

Les colonnes Vue ne sont pas considérées comme des colonnes sources et ne sont pas répertoriées dans le champ baseSources lorsque les données d’une colonne de vue sont copiées dans une colonne de table. Dans ce cas, les colonnes de vue sont énumérées dans le champ directSources.

Sous-requête EXISTS

Les colonnes qui sont référencées dans la clause de sous-requête EXISTS ne sont pas considérées comme des colonnes sources.

Revenir au début