CKE 文档访问历史记录
为了帮助提供商了解其 Cortex Knowledge Extensions (CKE) 中有哪些文档正被访问,Snowflake 提供了以下功能:
先决条件
由于 主键 为每个文档定义了唯一标识符,因此您必须为 Cortex Search Service 指定一个主键,以获取访问历史记录。
备注
修改现有 Cortex Search Service 的主键列会使之前的 CKE 访问历史记录失效。
若要解读之前的 CKE 访问历史记录,请保存从旧主键列到新主键列的映射。
了解文档 IDs
文档 IDs 由 Cortex Search Service 主键 组成。为了保护客户数据,Snowflake 在跟踪访问历史记录时会对主键列进行编码和哈希处理。您可以使用以下函数将主键映射到提供的已哈希处理的文档 ID:
LISTING_ACCESS_HISTORY 视图中的 CKE 访问历史记录示例
此示例执行以下操作:
第 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;