Schema:

ACCOUNT_USAGE

Ansicht ACCESS_HISTORY

Diese Account Usage-Ansicht kann verwendet werden, um den Zugriffsverlauf von Snowflake-Objekten (z. B. Tabellen, Ansichten, Spalten) innerhalb der letzten 365 Tage (1 Jahr) abzufragen.

Spalten

In diesem Abschnitt gibt es zwei Tabellen:

  • Die erste Tabelle definiert die Spalten in der ACCESS_HISTORY-Ansicht.

  • Die zweite Tabelle definiert die Felder im JSON-Array für die Spalten BASE_OBJECTS_ACCESSED, DIRECT_OBJECTS_ACCESSED und OBJECTS_MODIFIED.

Spaltenname

Datentyp

Beschreibung

Beispiel

QUERY_ID

TEXT

Interner, vom System generierter Bezeichner für die SQL-Anweisung. Dieser Wert wird auch im QUERY_HISTORY-Ansicht erwähnt.

a0fda135-d678-4184-942b-c3411ae8d1ce

QUERY_START_TIME

TIMESTAMP_LTZ

Startzeit der Anweisung (UTC-Zeitzone).

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

USER_NAME

TEXT

Benutzer, der die Abfrage ausgegeben hat.

JSMITH

DIRECT_OBJECTS_ACCESSED

ARRAY

Ein JSON-Array mit Datenobjekten wie Tabellen, Ansichten und Spalten, die direkt in der Abfrage explizit oder durch Verwendung von Shortcuts wie dem Sternchen (d. h. *) benannt werden. In diesem Feld können virtuelle Spalten zurückgegeben werden.

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

BASE_OBJECTS_ACCESSED

ARRAY

Ein JSON-Array mit allen Basisdatenobjekten, insbesondere Spalten von Tabellen, für die Abfrageausführung.

Hinweis: In diesem Feld werden Ansichtsnamen oder Ansichtsspalten, einschließlich virtueller Spalten, angegeben, wenn in einem Data Sharing-Verbraucherkonto auf eine freigegebene Ansicht zugegriffen wird.

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

OBJECTS_MODIFIED

ARRAY

Ein JSON-Array, das die Objekte angibt, die mit einer Schreiboperation in der Abfrage verknüpft waren.

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

Die Felder im JSON-Array für die Spalten DIRECT_OBJECTS_ACCESSED, BASE_OBJECTS_ACCESSED und OBJECTS_MODIFIED werden im Folgenden beschrieben.

Feld

Datentyp

Beschreibung

columnId

NUMBER

Eine Spalte-ID, die innerhalb des Kontos eindeutig ist. Dieser Wert ist identisch mit der columnID in der Ansicht COLUMNS.

columnName

TEXT

Der Name der Spalte, auf die zugegriffen wurde.

objectId

NUMBER

Ein Bezeichner für das Objekt, der innerhalb eines gegebenen Kontos und einer gegebenen Domäne eindeutig ist. Diese Nummer stimmt überein mit:

  • TABLE_ID-Nummer für eine Tabelle, Ansicht und materialisierte Ansicht.

  • Wenn auf einen Stagingbereich zugegriffen wurde, stimmt diese Nummer überein mit:

    • NAME – Bezeichner für einen Benutzer (Benutzer-Stagingbereich).

    • TABLE_ID – Nummer für eine Tabelle (Tabellen-Stagingbereich).

    • STAGE_ID – Nummer für einen Stagingbereich (Benannter Stagingbereich).

objectName

TEXT

Der vollqualifizierte Name des Objekts, auf das zugegriffen wurde.

Wenn auf einen Stagingbereich zugegriffen wurde, gibt dieser Wert Folgendes an:

  • username (Benutzer-Stagingbereich)

  • table_name (Tabellen-Stagingbereich)

  • stage_name (Benannter Stagingbereich)

objectDomain

TEXT

Eine der folgenden Optionen: Table, View, Materialized view, External table, Stream oder Stage.

location

TEXT

Die URL des externen Standorts, wenn der Datenzugriff auf einen externen Standort erfolgt (z. B. s3://mybucket/a.csv). . Wenn die Abfrage nicht auf einen Stagingbereich zugreift, wird dieses Feld weggelassen.

stageKind

TEXT

Wenn Sie in einen Stagingbereich schreiben, wählen Sie eine der folgenden Optionen: Table | User | Internal Named | External Named

Wenn die Abfrage nicht auf einen Stagingbereich zugreift, wird dieses Feld weggelassen.

baseSources

TEXT

Spalten, die als Quellspalten für die durch directSources angegebenen Spalten dienen. Diese Spalten erleichtern die Ermittlung der Spaltenherkunft.

directSources

TEXT

Spalten, die speziell in dem Teil der SQL-Anweisung genannt werden, in dem es um das Schreiben der Daten geht, und die als Quellspalten in der Zieltabelle dienen, in die Daten geschrieben werden. Diese Spalten erleichtern die Ermittlung der Spaltenherkunft.

Nutzungshinweise

Allgemeine Hinweise
  • Die Ansicht enthält Daten ab dem 22. Februar 2021 an.

  • Um die Leistung zu erhöhen, können Sie die Abfragen nach der Spalte QUERY_START_TIME filtern und engere Zeitbereiche auswählen. Beispielabfragen finden Sie unter Abfragen der ACCESS_HISTORY-Ansicht.

  • Sichere Ansichten. Der Protokollsatz enthält die zugrunde liegende Basistabelle (d. h. BASE_OBJECTS_ACCESSED) zum Generieren der Ansicht. Beispiele hierfür sind Abfragen auf andere Account Usage-Ansichten sowie Abfragen auf Basistabellen für Extraktions-, Transformations- und Ladeoperationen (d. h. ETL).

Hinweise zu Leseabfragen

Diese Ansicht unterstützt Lese-Abfragen des folgenden Typs:

  • SELECT, einschließlich CREATE TABLE … AS SELECT (d. h. CTAS).

    • Snowflake erfasst SELECT-Unterabfragen von CTAS-Operationen.

  • CREATE TABLE … CLONE

    • Snowflake erfasst die Quelltabelle in einer CLONE-Operation.

  • COPY INTO … TABLE

    • Snowflake protokolliert diese Abfrage nur dann, wenn die Tabelle in einer FROM-Klausel als Quelle angegeben wird.

  • DML-Operationen, die Daten lesen (z. B. enthalten eine SELECT-Unterabfrage, geben bestimmte Spalten in WHERE oder JOIN an): INSERT … SELECT, UPDATE, DELETE und MERGE.

  • Benutzerdefinierte Funktionen (d. h. UDFs) und Tabellarische SQL-UDFs (UDTFs), wenn Tabellen innerhalb der Funktionen in Abfragen enthalten sind. Dies wird im Feld BASE_OBJECTS_ACCESSED protokolliert.

    Weitere Informationen zu UDFs finden Sie in den Nutzungshinweise zu UDFs (unter diesem Thema).

Hinweise zu Schreiboperationen

Diese Ansicht unterstützt Schreiboperationen des folgenden Typs:

  • GET <interner_Stagingbereich>

  • PUT <interner_Stagingbereich>

  • DELETE

  • TRUNCATE

  • INSERT

    • INSERT INTO … FROM SELECT *

    • INSERT INTO TABLE … VALUES ()

  • MERGE INTO … FROM SELECT *

  • UPDATE

    • UPDATE TABLE … FROM SELECT * FROM …

    • UPDATE TABLE … WHERE …

  • Anweisungen zum Laden von Daten:

    • COPY INTO TABLE FROM internalStage

    • COPY INTO TABLE FROM externalStage

    • COPY INTO TABLE FROM externalLocation

  • Anweisungen zum Entladen von Daten:

    • 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

  • Bei Schreiboperationen, die die Funktion CASE aufrufen, um die Spalten zu bestimmen, auf die zugegriffen werden soll (z. B. eine CTAS-Anweisung mit der Funktion CASE in der SELECT-Abfrage), werden alle Spalten, auf die in jedem CASE-Zweig verwiesen wird, in der Spalte BASE_OBJECTS_ACCESSED, der Spalte DIRECT_OBJECTS_ACCESSED oder in beiden Spalten erfasst, je nachdem, wie die CTAS-Anweisung geschrieben ist.

Hinweise zu Datenfreigaben (Data Sharing)

Wenn ein Data Sharing-Anbieterkonto Objekte für Data Sharing-Verbraucherkonten über eine Freigabe freigibt, gilt Folgendes:

  • Anbieterkonten: Die Abfragen und Protokolle zu den freigegebenen Objekten, die im Anbieterkonto ausgeführt werden, sind für Data Sharing-Verbraucherkonten nicht sichtbar.

  • Verbraucherkonten: Die im Verbraucherkonto ausgeführten Abfragen auf der Datenfreigabe werden protokolliert und sind nur für das Verbraucherkonto sichtbar, nicht aber für das Data Sharing-Anbieterkonto.

    Wenn der Anbieter beispielsweise eine Tabelle und eine aus der Tabelle erstellte Ansicht für das Verbraucherkonto freigibt und eine Abfrage auf der freigegebenen Ansicht ausführt, erfasst Snowflake den Zugriff auf die freigegebene Ansicht in der Spalte BASE_OBJECTS_ACCESSED. Anhand dieses Datensatzes, der die Werte columnName und objectName enthält, kann der Verbraucher erkennen, auf welches Objekt in seinem Konto zugegriffen wurde. Der Anbieter ist nun geschützt, da die zugrunde liegende Tabelle (über die Werte objectId und columnId) dem Verbraucher nicht offengelegt wird.

  • Spaltenherkunft:

    Wenn ein Data-Sharing-Anbieter dem Data-Sharing-Verbraucher eine Ansicht zur Verfügung stellt, sind die Quellspalten der Ansicht für den Verbraucher nicht sichtbar, da die Spalten vom Data-Sharing-Anbieter stammen.

    Wenn der Data Sharing-Verbraucher Daten aus der freigegebenen Ansicht in eine Tabelle verschiebt, erfasst Snowflake die Ansichtsspalten nicht als baseSources der neu erstellten Tabelle.

Nutzungshinweise zu UDFs und gespeicherten Prozeduren

Dieses Update wurde verschoben und wird in einem zukünftigen Release bereitgestellt.

Snowflake bewahrt Zeilen auf, die bereits Verweise auf UDFs und gespeicherte Prozeduren in Ihrer lokalen ACCESS_HISTORY-Ansicht enthalten.

Nicht unterstützt
  • Diese Ansicht protokolliert nicht den Zugriff folgender Typen:

  • Außerdem unterstützt diese Ansicht Folgendes nicht:

    • Sequenzen, einschließlich der Generierung neuer Werte.

    • Daten, die bei Verwendung einer externen Funktion in Snowflake eingehen oder Snowflake verlassen.

    • Zwischensichten, auf die zwischen der Basistabelle und dem direkten Objekt zugegriffen wird.

      Betrachten Sie zum Beispiel eine Abfrage auf Ansicht_A mit der folgenden Objektstruktur: Ansicht_A » Ansicht_B » Ansicht_C » Basistabelle.

      Die ACCESS_HISTORY-Ansicht erfasst die Abfrage auf Ansicht_A und auf die Basistabelle, aber nicht Ansicht_B und Ansicht_C.

    • Operationen zum Befüllen von Ansichten, materialisierten Ansichten und Streams

    • Verschieben von Daten für Replikation

Nutzungshinweise: Spaltenherkunft

Diese zusätzlichen Hinweise beziehen sich auf die Spaltenherkunft:

Unterstützte Operationen

Die Spaltenherkunft verfolgt Details zu den folgenden SQL-Operationen:

Abfragebedingungen
  • Abfrageprofil/Abfrageplan

    Der von Snowflake geschriebene Abfrageplan bestimmt, ob die Ansicht ACCESS_HISTORY die Spaltenherkunft erfasst oder nicht. Wenn eine Spalte als Teil des Abfrageplans ausgewertet werden muss, erfasst Snowflake die Spalte selbst dann in der Ansicht ACCESS_HISTORY, wenn das Endergebnis des Abfrageplans darin besteht, dass die Spalte nicht im Endergebnis enthalten ist.

    Betrachten Sie beispielsweise die folgende INSERT-Anweisung mit einer WHERE-Klausel für einen bestimmten Spaltenwert:

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

    Auch wenn die WHERE-Klausel den Wert FALSE ergibt, erfasst Snowflake die Spalte c2 als Quellspalte der Spalte c1. Die Spalte c3 ist weder für baseSources noch für directSources als Quellspalte aufgeführt.

  • Maskierte Spalten:

    • Eine maskierte Spalte wird immer im Feld directSources aufgeführt.

    • Der Datensatz im Feld baseSources hängt von der Definition der Richtlinie ab. Beispiel:

      • Wenn in den Bedingungen der Maskierungsrichtlinie eine CASE-Funktion verwendet wird, werden im Feld baseSources alle Spalten erfasst, auf die in den CASE-Zweigen verwiesen wird.

      • Wenn in den Bedingungen der Maskierungsrichtlinie nur ein konstanter Wert angeben ist (z. B. *****), bleibt das Feld baseSources leer.

  • UDFs:

    • Wenn eine Spalte als Argument an einen UDF übergeben und das Ergebnis in eine andere Spalte geschrieben wird, wird die als Argument übergebene Spalte im Feld directSources erfasst. Beispiel:

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

      In diesem Beispiel erfasst Snowflake col2 im Feld directSources, weil die Spalte ein Argument der UDF mit dem Namen f ist.

    • Der Datensatz im Feld baseSources hängt von der UDF-Definition ab.

Ansichtsspalten

Ansichtspalten gelten nicht als Quellspalten, sodass sie beim Kopieren von Daten aus einer Ansichtsspalte in eine Tabellenspalte nicht im Feld baseSources erfasst. Ansichtsspalten werden in diesem Fall im Feld directSources erfasst.

EXISTS-Unterabfrage

Spalten, auf die in der Klausel der EXISTS-Unterabfrage verwiesen wird, gelten nicht als Quellspalten.

Zurück zum Anfang