Histórico de acesso a documento em CKE

Para ajudar os provedores a saber quais documentos são acessados em suas Cortex Knowledge Extensions (CKE), o Snowflake oferece os seguintes recursos:

Pré-requisitos

Como as chaves primárias definem um identificador exclusivo para cada documento, é necessário especificar uma chave primária para o Cortex Search Service obter o histórico de acesso.

Nota

Modificar as colunas de chave primária de um Cortex Search Service existente invalida o histórico de acesso de CKE anterior.

Para interpretar o histórico de acesso de CKE anterior, salve um mapeamento das colunas de chave primária antigas para as novas colunas de chave primária.

Entender os IDs de documentos

Os IDs de documentos são compostos de chaves primárias do Cortex Search Service. Para proteger os dados dos clientes, o Snowflake codifica e usa hash nas colunas de chave primária ao rastrear o histórico de acesso. Você pode mapear as chaves primárias para o ID do documento com hash fornecido usando as seguintes funções:

Exemplo de histórico de acesso de CKE na exibição LISTING_ACCESS_HISTORY

Este exemplo executa as seguintes ações:

  • Recupera apenas as informações de acesso de CKE da exibição Exibição LISTING_ACCESS_HISTORY e exclui todos os outros eventos

  • Usa a função SYSTEM$ENCODE_CKE_PRIMARY_KEY para criar uma representação codificada das colunas de chave primária do documento CKE

  • Recupera a versão do hash e usa SYSTEM$CKE_HASH_FUNCTION para computar um ID de documento com hash para cada chave primária

  • Une os IDs com hash computados e as versões à exibição para recuperar as colunas de chave primária originais

Etapa 1. Crie uma tabela de resumo de acesso diário que recupere apenas as informações de acesso de 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
);

Etapa 2. Crie uma tabela para armazenar as chaves primárias codificadas.

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
  )

Etapa 3. Com base na tabela que você criou na etapa anterior, prepare as versões de hash e compute os IDs com hash das chaves primárias. Em seguida, una a tabela cke_document_daily_access à exibição da chave primária com hash para recuperar as colunas de chave primária originais.

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;