CKE 문서 액세스 기록

공급자가 :doc:`Cortex Knowledge Extensions(CKE) </user-guide/snowflake-cortex/cortex-knowledge-extensions/cke-overview>`에서 액세스 중인 문서를 알 수 있도록, Snowflake는 다음과 같은 기능을 제공합니다.

전제 조건

:ref:`기본 키 <label-cortex_search_primary_keys>`는 각 문서에 대한 고유 식별자를 정의하므로 액세스 키를 가져오려면 :doc:`Cortex Search Service </user-guide/snowflake-cortex/cortex-search/cortex-search-overview>`에 대한 기본 키를 지정해야 합니다.

참고

기존 Cortex Search Service의 기본 키 열을 수정하면 이전 CKE 액세스 기록이 무효화됩니다.

이전 CKE 액세스 기록을 확인하려면 이전 기본 키 열에서 새 기본 키 열로의 매핑을 저장합니다.

문서 IDs 이해

문서 IDs는 Cortex Search Service :ref:`기본 키 <label-cortex_search_primary_keys>`로 구성됩니다. 고객 데이터를 보호하기 위해 Snowflake는 액세스 기록을 추적할 때 기본 키 열을 인코딩하고 해시합니다. 다음 함수를 사용하여 기본 키를 제공된 해시된 문서 ID에 매핑할 수 있습니다.

LISTING_ACCESS_HISTORY 뷰의 CKE 액세스 기록 예제

이 예제에서는 다음 작업을 수행합니다.

  • LISTING_ACCESS_HISTORY 뷰 뷰의 CKE 액세스 정보만 검색하고 다른 모든 이벤트는 제외

  • SYSTEM$ENCODE_CKE_PRIMARY_KEY 함수를 사용하여 CKE 문서의 기본 키 열의 인코딩된 표현 빌드

  • 해시 버전을 검색하고 :doc:`/sql-reference/functions/system_cke_hash_function`을 사용하여 모든 기본 키에 대한 해시된 문서 ID 계산

  • 계산된 해시된 IDs를 조인하고 버전을 뷰에 추가하여 원래 기본 키 열 복구

1단계. 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
);

2단계. 인코딩된 기본 키를 저장할 테이블을 생성합니다.

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
  )

3단계. 이전 단계에서 생성한 테이블에서 해시 버전을 준비하고 기본 키에 대한 해시된 IDs를 계산합니다. 그런 다음 cke_document_daily_access 테이블을 해시된 기본 키 뷰와 조인하여 원래 기본 키 열을 복구합니다.

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;