Zugriffsverlauf für das CKE-Dokument

Damit Anbietende wissen, auf welche Dokumente in ihren Cortex Knowledge Erweiterungen (CKE) zugegriffen wird, bietet Snowflake die folgenden Features:

Voraussetzungen

Weil Primärschlüssel einen eindeutigen Bezeichner für jedes Dokument definieren, müssen Sie einen Primärschlüssel für den Cortex Search Service angeben, um den Zugriffsverlauf zu erhalten.

Bemerkung

Durch das Ändern der Primärschlüsselspalten eines bestehenden Cortex Search Service wird der bisherige CKE-Zugriffsverlauf ungültig.

Zur Interpretation des bisherigen CKE-Zugriffsverlaufs speichern Sie eine Zuordnung der alten Primärschlüsselspalten für die neuen Primärschlüsselspalten.

Erläuterungen zu Dokumenten-IDs

Dokumenten-IDs bestehen aus Primärschlüsseln von Cortex Search Service. Zum Schutz der Kundendaten verschlüsselt und „hasht“ Snowflake die Primärschlüsselspalten bei der Verfolgung des Zugriffsverlaufs. Sie können die Primärschlüssel der bereitgestellten gehashten Dokumenten-ID mithilfe der folgenden Funktionen zuordnen:

CKE-Beispielzugriffsverlauf in derLISTING_ACCESS_HISTORY-Ansicht

In diesem Beispiel werden die folgenden Aktionen ausgeführt:

  • Ruft nur CKE-Zugriffsinformationen aus der Ansicht LISTING_ACCESS_HISTORY-Ansicht ab und schließt alle anderen Ereignisse aus

  • Verwendet die SYSTEM$ENCODE_CKE_PRIMARY_KEY-Funktion, um eine kodierte Darstellung der Primärschlüsselspalten des CKE-Dokuments zu erstellen

  • Ruft die Hash-Version ab und verwendet die SYSTEM$CKE_HASH_FUNCTION, um eine gehashte Dokumenten-ID für jeden Primärschlüssel zu berechnen.

  • Verknüpft die berechneten gehashten IDs und Versionen für die Ansicht, um die ursprünglichen Primärschlüsselspalten wiederherzustellen

Schritt 1: Erstellen Sie eine Zusammenfassungstabelle für den täglichen Zugriff, die nur CKE-Zugriffsinformationen abruft.

CREATE TABLE IF NOT EXISTS cke_document_daily_access AS
SELECT query_date,
       consumer_account_name,
       consumer_name,
       hashed_doc_id,
       hash_version,
       total_access_count
  FROM (
    SELECT query_date,
           consumer_account_name,
           consumer_name,
           flattened.value::string AS hashed_doc_id,
           lah.share_objects_accessed[0]:"hashVersion"::string AS hash_version,
      COUNT(*) AS total_access_count
      FROM snowflake.data_sharing_usage.listing_access_history AS lah,
        LATERAL FLATTEN(
          input => lah.share_objects_accessed[0]:"hashedDocumentIds"
        ) AS flattened
      WHERE lah.share_objects_accessed[0]:"objectDomain" = 'Cortex Search Service'
        AND lah.share_objects_accessed[0]:"hashVersion" IS NOT NULL
      GROUP BY query_date,
               consumer_account_name,
               consumer_name,
               hashed_doc_id,
               hash_version
);

Schritt 2: Erstellen Sie eine Tabelle, um die verschlüsselten Primärschlüssel zu speichern.

CREATE TABLE IF NOT EXISTS encoded_primary_keys AS
  (
    SELECT pkCol1,
           pkCol2,
           SYSTEM$ENCODE_CKE_PRIMARY_KEY(pkCol1, pkCol2) AS encoded_primary_key
      FROM your_cortex_search_table
  )

Schritt 3: Bereiten Sie anhand der Tabelle, die Sie im vorherigen Schritt erstellt haben, die Hash-Versionen vor und berechnen Sie die gehashten IDs für Ihre Primärschlüssel. Verbinden Sie dann die:code:cke_document_daily_access-Tabelle mit der Ansicht der gehashten Primärschlüssel, um die ursprünglichen Primärschlüsselspalten wiederherzustellen.

WITH hash_versions AS
  (
    SELECT DISTINCT hash_version AS hash_version
      FROM cke_document_daily_access
  ),
  hashed_primary_key AS
  (
    SELECT pkCol1,
           pkCol2,
           hash_version,
           SYSTEM$CKE_HASH_FUNCTION(hash_version, encoded_primary_key) AS hashed_doc_id
      FROM encoded_primary_keys
      CROSS JOIN hash_versions
  )
SELECT pk.pkCol1,
       pk.pkCol2,
       a.query_date,
       a.consumer_account_name,
       a.consumer_name,
       a.total_access_count
  FROM cke_document_daily_access AS a
  JOIN hashed_primary_key AS pk
    ON a.hashed_doc_id = pk.hashed_doc_id
    AND a.hash_version = pk.hash_version;