Schema:

ACCOUNT_USAGE

ACCESS_HISTORY-Ansicht

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 benutzerdefinierten Funktionen (d. h. UDFs und UDTFs), gespeicherten Prozeduren, 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.

Weitere Hinweise zu UDFs finden Sie unter Hinweise zu UDFs (unter diesem Thema).

[
  {
    "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

Ein JSON-Array aller Basisdatenobjekte zur Ausführung einer Abfrage, einschließlich Spalten, externe Funktionen, UDFs und gespeicherte Prozeduren.

In diesem Beispiel geben die Felder im ersten Array einen UDF an. Dieselben Felder im ersten Array spezifizieren auch eine gespeicherte Prozedur, falls zutreffend.

Beachten Sie Folgendes:

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

  • Weitere Hinweise zu UDFs finden Sie unter Hinweise zu UDFs (unter diesem Thema).

[
  {
    "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

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

Das Array für die UDF und die gespeicherte Prozedur ist dasselbe wie das zuvor gezeigte und wird in den Arrays für baseSources und directSources angezeigt, je nachdem, wie der Zugriff erfolgte. Der Kürze halber wird in diesem Beispiel das Array der UDF und der gespeicherten Prozedur weggelassen.

Weitere Hinweise zu UDFs finden Sie unter Hinweise zu UDFs (unter diesem Thema).

[
  {
    "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

Diese Spalte ist ein Platzhalter für zukünftige Funktionen.

POLICIES_REFERENCED

ARRAY

Gibt Informationen zu der erzwungenen Maskierungsrichtlinie für die Spalte und der erzwungenen Zeilenzugriffsrichtlinie für die Tabelle an, einschließlich der Richtlinien für Zwischenobjekte oder Zwischenspalten.

[
  {
    "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

Die Felder im JSON-Array für die Spalten DIRECT_OBJECTS_ACCESSED, BASE_OBJECTS_ACCESSED, OBJECTS_MODIFIED und POLICIES_REFERENCED 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. Gibt bei Richtlinien den Namen der Spalte an, für die die Maskierungsrichtlinie festgelegt ist.

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 eine Maskierungsrichtlinie für eine Spalte bzw. ein Zeilenzugriffrichtlinie für eine Tabelle oder Ansicht festgelegt wurde, bezieht sich der Wert auf den vollqualifizierten Namen der Tabelle oder Ansicht, für die die Zeilenzugriffsrichtlinie festgelegt ist, bzw. auf die Tabelle oder Ansicht, die eine Spalte enthält, für die eine Maskierungsrichtlinie festgelegt ist.

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: EXTERNAL TABLE, FUNCTION, MATERIALIZED VIEW, PROCEDURE, STAGE, STREAM oder VIEW.

Beachten Sie, dass mit FUNCTION die UDFs, UDTFs und externen Funktionen angegeben werden.

Gibt bei Richtlinien die Domäne des Objekts an, für das die Zeilenzugriffsrichtlinie festgelegt ist.

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.

policyName

TEXT

Der vollqualifizierte Name der Richtlinie.

policyId

NUMBER

Ein Bezeichner für die Richtlinie, der innerhalb eines gegebenen Kontos und einer gegebenen Domäne eindeutig ist. Dieser Wert entspricht dem Bezeichner für eine Maskierungsrichtlinie in Ansicht MASKING_POLICIES oder dem Bezeichner für eine Zeilenzugriffsrichtlinie in ROW_ACCESS_POLICIES-Ansicht.

policyKind

TEXT

Entweder MASKING_POLICY oder ROW_ACCESS_POLICY

argumentSignature

TEXT

Name und Datentyp jedes Arguments in der UDF oder gespeicherten Prozedur.

dataType

Datentyp des Rückgabewerts einer UDF oder gespeicherten Prozedur.

Mithilfe dieses Werts können zwei oder mehr UDFs unterschieden werden, die denselben Namen, aber unterschiedliche Rückgabetypen haben.

Nutzungshinweise

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

  • Die Latenzzeit der Ansicht kann bis zu 180 Minuten (3 Stunden) betragen.

  • 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).

  • Datensätze in der Account Usage-Ansicht QUERY_HISTORY werden nicht immer in der Ansicht ACCESS_HISTORY erfasst. Die Struktur der SQL-Anweisung bestimmt, ob Snowflake Datensätze in der ACCESS_HISTORY-Ansicht erfasst.

  • Die Angabe der USING-Klausel bei der Abfrage dieser Ansicht kann dazu führen, dass im Feld DIRECT_OBJECTS_ACCESSED nicht referenzierte Spalten erfasst werden. Ersetzten Sie als Problemumgehung die USING-Klausel durch eine JOIN ... ON ...-Klausel. Weitere Informationen dazu finden Sie unter:

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.

  • 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.

  • Bei freigegebenen UDFs und UDTFs:

    • Im Verbraucherkonto erfasst die lokale ACCESS_HISTORY-Ansicht die vom Anbieter freigegebene UDF/UDTF, wenn die freigegebene UDF/UDTF vom Verbraucher aufgerufen werden.

    • Im Anbieterkonto erfasst die lokale ACCESS_HISTORY-Ansicht die Nutzung einer freigegebenen UDF/UDTF durch den Anbieter. Benutzern im Verbraucherkonto wird nicht angezeigt, wie das Anbieterkonto die freigegebene UDF/UDTF verwendet.

  • Für die Verfolgung von Richtlinienreferenzen:

    Die Spalte POLICIES_REFERENCED enthält Richtlinien, die für das Konto, das die Daten abfragt, lokal sind.

    Wenn ein Anbieter eine richtliniengeschützte Tabelle freigibt und ein Verbraucher auf diese Tabelle zugreift, kann der Verbraucher die vom Anbieter für die Tabelle oder deren Spalten festgelegte Richtlinie nicht sehen.

    Wenn ein Verbraucher aus dem freigegebenen Objekt eine Ansicht (v1) erstellt, dann eine Richtlinie für die Ansicht (v1) oder eine ihrer Spalten festlegt und nun ein Benutzer im Verbraucherkonto auf die geschützte Ansicht (v1) oder eine andere Ansicht (v2) zugreift, die aus der geschützten Ansicht (v1) erstellt wurde, enthält die Ansicht ACCESS_HISTORY im Verbraucherkonto die Richtlinie, die die Ansicht (v1) und deren Spalten schützt. Der Anbieter kann den Datensatz, der v1 entspricht, nicht sehen.

Hinweise zur Tag-basierten Maskierung

Wenn ein Benutzer auf eine Tabelle oder Ansicht zugreift, die durch eine Tag-basierte Maskierungsrichtlinie geschützt ist, enthält die Spalte POLICIES_REFERENCED die Maskierungsrichtlinie, die über das Tag angewendet wird, wenn Snowflake die Maskierungsrichtlinie für die geschützte Spalte erzwingt.

In der Ansicht ACCESS_HISTORY werden keine Tag-Informationen erfasst.

Nutzungshinweise zu UDFs und gespeicherten Prozeduren

Diese Hinweise gelten für externe Funktionen, UDFs und UDTFs für alle Sprachen, auch wenn diese Funktionen die Eigenschaft SECURE haben, sowie für gespeicherte Prozeduren mit Eigentümer- und Aufruferrechten:

Spaltendetails:

  • Die Spalte DIRECT_OBJECTS_ACCESSED erfasst die ausdrückliche Nennung dieser Funktionen und Prozeduren in einer Abfrage.

    Snowflake erfasst in dieser Spalte keine verschachtelten UDFs (d. h. UDFs, die in der Definition einer anderen UDF genannt werden).

  • Die Spalte BASE_OBJECTS_ACCESSED erfasst externe Funktionen, freigegebene Funktionen, Nicht-SQL-UDFs und gespeicherte Prozeduren, die in einer Abfrage aufgerufen werden.

  • Die OBJECTS_MODIFIED-Spalte erfasst Folgendes:

    • Die UDF/UDTF, wenn das Ergebnis des Aufrufs der Funktion das Ergebnis in eine andere Spalte kopiert.

    • UDF, UDTF und externe Funktion können in den Arrays für baseSources und directSources erfasst werden, je nachdem wie die Abfrage geschrieben ist.

Nicht unterstützt

Diese Ansicht protokolliert nicht den Zugriff folgender Typen:

  • Von Snowflake bereitgestellte Tabellenfunktionen oder andere Account Usage-Ansichten.

  • RESULT_SCAN zum Ermitteln vorheriger Ergebnisse.

  • Sequenzen, einschließlich der Generierung neuer Werte.

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

    Betrachten Sie zum Beispiel eine Abfrage auf View_A mit der folgenden Objektstruktur: View_A » View_B » View_C » Base_Table.

    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 enthält oder nicht. Wenn eine Spalte als Teil des Abfrageplans ausgewertet werden muss, übernimmt Snowflake die Spalte selbst dann in die 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;
    
    Copy

    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;
      
      Copy

      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.