Historique d’accès aux documents CKE

Pour aider les fournisseurs à savoir quels documents sont consultés dans leurs extensions de connaissances Cortex (CKE), Snowflake offre les fonctionnalités suivantes :

Conditions préalables

Étant donné que les clés primaires définissent un identificateur unique pour chaque document, vous devez spécifier une clé primaire pour le Cortex Search Service pour obtenir l’historique des accès.

Note

La modification des colonnes de clé primaire d’un Cortex Search Service existant invalide l’ancien historique des accès CKE.

Pour interpréter l’ancien historique des accès CKE, enregistrez un mappage des anciennes colonnes de clé primaire vers les nouvelles colonnes de clé primaire.

Comprendre les IDs de document

Les IDs de document sont composés des clés primaires du Cortex Search Service. Pour protéger les données des clients, Snowflake code et hache les colonnes de clés primaires lors du suivi de l’historique des accès. Vous pouvez mapper les clés primaires à l’ID de document haché fourni en utilisant les fonctions suivantes :

Exemple d’historique des accès CKE dans la vue LISTING_ACCESS_HISTORY

Cet exemple effectue les actions suivantes :

  • Récupère uniquement les informations d’accès CKE de la vue Vue LISTING_ACCESS_HISTORY et exclut tous les autres événements.

  • Utilise la fonction SYSTEM$ENCODE_CKE_PRIMARY_KEY pour construire une représentation codée des colonnes de la clé primaire du document CKE.

  • Récupère la version de hachage et utilise la fonction SYSTEM$CKE_HASH_FUNCTION pour calculer un ID de document haché pour chaque clé primaire.

  • Joint les IDs hachés calculés et les versions à la vue pour récupérer les colonnes de clé primaire d’origine.

Étape 1. Créez une table de synthèse des accès quotidiens qui récupère uniquement les informations d’accès CKE.

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

Étape 2. Créez une table pour stocker les clés primaires codées.

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
  )

Étape 3. À partir de la table que vous avez créée à l’étape précédente, préparez les versions de hachage et calculez les IDs hachés pour vos clés primaires. Joignez ensuite la table cke_document_daily_access à la vue de la clé primaire hachée pour récupérer les colonnes de clé primaire d’origine.

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;