查詢服務(資料Distiller)和匯出資料集
本文概述如何使用Experience Platform查詢服務(資料Distiller)和資料集匯出的組合,實作下列個資料匯出使用案例:
- 資料驗證
- Data Lake, Data Warehouse for BI tools
- 人工智慧和機器學習的整備。
Adobe Analytics可使用其資料摘要功能來實作這些使用案例。 資料摘要是從Adobe Analytics匯出原始資料的有效方式。 本文會介紹如何從Experience Platform匯出類似的原始資料,以便您實作上述使用案例。 在適用情況下,本文所述的功能會與Adobe Analytics資料摘要進行比較,以釐清資料與程式的差異。
簡介
使用查詢服務(Data Distiller)匯出資料時,資料集匯出包含以下專案:
- 正在定義排程的查詢,該查詢會使用查詢服務,為您的資料摘要產生資料,作為輸出資料集
。 - 定義使用 資料集匯出 將輸出資料集匯出至雲端儲存空間目的地的排程資料集匯出。
先決條件
使用此使用案例所述的功能之前,請確定您符合下列所有需求:
- 將資料收集至Experience Platform資料湖的有效實作。
- 存取資料Distiller附加元件,以確保您有權執行批次查詢。 查詢列限制和執行逾時取決於您的權益。 如需詳細資訊,請參閱查詢服務封裝。
- 存取匯出資料集功能,此功能在您購買Real-Time CDP Prime或Ultimate套件、Adobe Journey Optimizer或Customer Journey Analytics時可用。 若要深入瞭解,請參閱將資料集匯出至雲端儲存空間目的地。
- 一或多個已設定目的地(例如:Amazon S3、Google Cloud Storage)可匯出資料摘要的原始資料。
查詢服務
Experience Platform查詢服務可讓您查詢及聯結Experience Platform資料湖中的任何資料集,就像它是資料庫表格一樣。 然後,您可以將結果擷取為新資料集,以供進一步用於報告或匯出。
您可以使用Query Service 使用者介面、透過PostgresQL通訊協定🔗連線的使用者端或RESTful API,建立並排程收集資料摘要資料的查詢。
建立查詢
您可以使用標準ANSI SQL for SELECT敘述句和其他有限命令的所有功能,來建立和執行產生資料摘要資料的查詢。 如需詳細資訊,請參閱SQL語法。 除了此SQL語法以外,Adobe還支援:
- 預先建立的Adobe定義函式(ADF),可協助對儲存在Experience Platform資料湖中的事件資料執行常見的業務相關工作,包括Sessionization和Attribution的函式,
- 數個內建Spark SQL函式,
- 中繼資料PostgreSQL命令,
- 準備的陳述式。
資料摘要欄
查詢中可用的XDM欄位取決於資料集結構。 請確定您瞭解資料集的基礎結構。 如需詳細資訊,請參閱資料集使用者介面指南。
若要協助您定義資料摘要欄位與XDM欄位之間的對應,請參閱分析欄位對應。 如需管理XDM資源的資訊,另請參閱結構描述UI總覽。
例如,如果您想使用 頁面名稱 作為資料摘要的一部分:
- 在Adobe Analytics資料摘要UI中,選取 pagename 作為要新增至資料摘要定義的欄。
- 在查詢服務中,您在查詢中包含來自
sample_event_dataset_for_website_global_v1_1資料集的web.webPageDetails.name(根據網站的 範例事件結構描述(全域v1.1) 體驗事件結構描述)。 如需詳細資訊,請參閱網頁詳細資料結構描述欄位群組。
身分識別
在Experience Platform中,有各種身分識別可供使用。 建立查詢時,請確定您正在正確查詢身分。
您通常會在個別的欄位群組中找到身分。 在實作中,ECID (ecid)可以定義為具有core物件的欄位群組的一部分,其本身是identification物件的一部分(例如: _sampleorg.identification.core.ecid)。 ECID在結構中的組織方式不同。
或者,您可以使用identityMap來查詢身分。 identityMap的型別為Map,且使用巢狀資料結構。
如需如何在Experience Platform中定義身分欄位的詳細資訊,請參閱在UI中定義身分欄位。
請參考Analytics資料中的主要識別碼,瞭解使用Analytics來源聯結器時,Adobe Analytics識別碼如何對應到Experience Platform識別碼。 此對應可作為設定身分識別的指引,即使未使用Analytics來源聯結器亦然。
點選層級資料和識別
根據實作,傳統上在Adobe Analytics中收集的點選層級資料現在會儲存為Experience Platform中的時間戳記事件資料。 下表擷取自Analytics欄位對應,並示範如何將點選層級特定的Adobe Analytics資料摘要欄與查詢中的對應XDM欄位進行對應。 此表格也顯示如何使用XDM欄位識別點選、造訪和訪客的範例。
hitid_high + hitid_low_idhitid_low_idhitid_high搭配使用以唯一識別點選。hitid_high_idhitid_high搭配使用以唯一識別點選。hit_time_gmtreceivedTimestampcust_hit_time_gmttimestampvisid_high + visid_lowidentityMapvisid_high + visid_lowendUserIDs._experience.aaid.idvisid_highendUserIDs._experience.aaid.primaryvisid_low搭配使用以唯一識別造訪。visid_highendUserIDs._experience.aaid.namespace.codevisid_low搭配使用以唯一識別造訪。visid_lowidentityMapvisid_high搭配使用以唯一識別造訪。cust_visididentityMapcust_visidendUserIDs._experience.aacustomid.idcust_visidendUserIDs._experience.aacustomid.primarycust_visidendUserIDs._experience.aacustomid.namespace.codevisid_low搭配使用以唯一識別客戶訪客ID。geo\_*placeContext.geo.*event_listcommerce.purchases, commerce.productViews, commerce.productListOpens, commerce.checkouts, commerce.productListAdds, commerce.productListRemovals, commerce.productListViews, _experience.analytics.event101to200.*, …, _experience.analytics.event901_1000.*page_eventweb.webInteraction.typepage_eventweb.webInteraction.linkClicks.valuepage_event_var_1web.webInteraction.URLpage_event_var_2web.webInteraction.namepaid_searchsearch.isPaidref_typeweb.webReferrertype張貼欄
Adobe Analytics資料摘要使用具有post_首碼的欄的概念,這些欄是包含處理後的資料之欄。 如需詳細資訊,請參閱資料摘要常見問題。
透過Experience Platform Edge Network (Web SDK、Mobile SDK、伺服器API)在資料集中收集的資料不含post_欄位的概念。 因此,post_首碼和非-post_首碼資料摘要資料行對應到相同的XDM欄位。 例如,page_url和post_page_url資料摘要欄位都對應到相同的web.webPageDetails.URL XDM欄位。
請參閱比較Adobe Analytics與Customer Journey Analytics的資料處理,以取得資料處理差異的概觀。
但在Experience Platform資料湖中收集資料時,post_首碼資料行型別的資料確實需要進階轉換,才能成功用於資料摘要使用案例。 在您的查詢中執行這些進階轉換,涉及使用Adobe定義的函式進行工作階段化、歸因及重複資料刪除。 請參閱範例以瞭解如何使用這些函式。
查詢
若要從其他資料集中查詢資料,請使用標準SQL功能(WHERE子句、INNER JOIN、OUTER JOIN及其他)。
計算
若要在欄位(欄)上執行計算,請使用標準SQL函式(例如COUNT(*)),或Spark SQL的數學和統計運運算元和函式部分。 此外,視窗函式支援更新彙總,並為排序子集中的每一列傳回單一專案。 請參閱範例以瞭解如何使用這些函式。
巢狀資料結構
資料集所根據的結構描述通常包含複雜的資料型別,包括巢狀資料結構。 先前提到的identityMap是巢狀資料結構的範例。 請參閱下方的identityMap資料範例。
{
"identityMap":{
"FPID":[
{
"id":"55613368189701342632255821452918751312",
"authenticatedState":"ambiguous"
}
],
"CRM":[
{
"id":"2394509340-30453470347",
"authenticatedState":"authenticated"
}
]
}
}
您可以使用Spark SQL中的explode()或其他陣列函式來取得巢狀資料結構內的資料,例如:
select explode(identityMap) from demosys_cja_ee_v1_website_global_v1_1 limit 15;
或者,您可以使用點標籤法來參照個別元素。 例如:
select identityMap.ecid from demosys_cja_ee_v1_website_global_v1_1 limit 15;
請參閱「在 Query Service 中使用巢狀資料結構」以了解更多資訊。
範例
對於查詢:
- 使用Experience Platform資料湖中資料集的資料,
- 使用Adobe定義函式和/或Spark SQL的其他功能,以及
- 會將類似的結果提供給同等的Adobe Analytics資料摘要,
請參閱:
以下範例說明如何跨工作階段正確套用歸因。
-
使用過去90天作為回顧,
-
套用工作階段化和/或歸因之類的視窗函式,以及
-
根據
ingest_time限制輸出。accordion 詳細資料 若要這麼做,您必須……
- 使用處理狀態表
checkpoint_log來追蹤目前與上次擷取時間。 如需詳細資訊,請參閱本指南。 - 停用卸除系統資料行,以便使用
_acp_system_metadata.ingestTime。 - 使用最內層
SELECT來抓取您要使用的欄位,並將事件限制在您的回溯期間,以進行工作階段化和/或歸因計算。 例如90天。 - 使用下一個層級
SELECT來套用您的工作階段化和/或歸因視窗函式和其他計算。 - 若要將回顧限制在您上次處理時間後到達的事件,請在輸出表格中使用
INSERT INTO。 若要這麼做,請篩選_acp_system_metadata.ingestTime與上次儲存於處理狀態表格中的時間。
工作階段化視窗功能範例
code language-sql $$ BEGIN -- Disable dropping system columns set drop_system_columns=false; -- Initialize variables SET @last_updated_timestamp = SELECT CURRENT_TIMESTAMP; -- Get the last processed batch ingestion time SET @from_batch_ingestion_time = SELECT coalesce(last_batch_ingestion_time, 'HEAD') FROM checkpoint_log a JOIN ( SELECT MAX(process_timestamp) AS process_timestamp FROM checkpoint_log WHERE process_name = 'data_feed' AND process_status = 'SUCCESSFUL' ) b ON a.process_timestamp = b.process_timestamp; -- Get the last batch ingestion time SET @to_batch_ingestion_time = SELECT MAX(_acp_system_metadata.ingestTime) FROM events_dataset; -- Sessionize the data and insert into data_feed. INSERT INTO data_feed SELECT * FROM ( SELECT userIdentity, timestamp, SESS_TIMEOUT(timestamp, 60 * 30) OVER ( PARTITION BY userIdentity ORDER BY timestamp ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) AS session_data, page_name, ingest_time FROM ( SELECT userIdentity, timestamp, web.webPageDetails.name AS page_name, _acp_system_metadata.ingestTime AS ingest_time FROM events_dataset WHERE timestamp >= current_date - 90 ) AS a ORDER BY userIdentity, timestamp ASC ) AS b WHERE b.ingest_time >= @from_batch_ingestion_time; -- Update the checkpoint_log table INSERT INTO checkpoint_log SELECT 'data_feed' process_name, 'SUCCESSFUL' process_status, cast(@to_batch_ingestion_time AS string) last_batch_ingestion_time, cast(@last_updated_timestamp AS TIMESTAMP) process_timestamp END $$;歸因視窗功能範例
code language-sql $$ BEGIN SET drop_system_columns=false; -- Initialize variables SET @last_updated_timestamp = SELECT CURRENT_TIMESTAMP; -- Get the last processed batch ingestion time 1718755872325 SET @from_batch_ingestion_time = SELECT coalesce(last_snapshot_id, 'HEAD') FROM checkpoint_log a JOIN ( SELECT MAX(process_timestamp) AS process_timestamp FROM checkpoint_log WHERE process_name = 'data_feed' AND process_status = 'SUCCESSFUL' ) b ON a.process_timestamp = b.process_timestamp; -- Get the last batch ingestion time 1718758687865 SET @to_batch_ingestion_time = SELECT MAX(_acp_system_metadata.ingestTime) FROM demo_data_trey_mcintyre_midvalues; -- Sessionize the data and insert into new_sessionized_data INSERT INTO new_sessionized_data SELECT * FROM ( SELECT _id, timestamp, struct(User_Identity, cast(SESS_TIMEOUT(timestamp, 60 * 30) OVER ( PARTITION BY User_Identity ORDER BY timestamp ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) as string) AS SessionData, to_timestamp(from_unixtime(ingest_time/1000, 'yyyy-MM-dd HH:mm:ss')) AS IngestTime, PageName, first_url, first_channel_type ) as _demosystem5 FROM ( SELECT _id, ENDUSERIDS._EXPERIENCE.MCID.ID as User_Identity, timestamp, web.webPageDetails.name AS PageName, attribution_first_touch(timestamp, '', web.webReferrer.url) OVER (PARTITION BY ENDUSERIDS._EXPERIENCE.MCID.ID ORDER BY timestamp ASC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING).value AS first_url, attribution_first_touch(timestamp, '',channel.typeAtSource) OVER (PARTITION BY ENDUSERIDS._EXPERIENCE.MCID.ID ORDER BY timestamp ASC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING).value AS first_channel_type, _acp_system_metadata.ingestTime AS ingest_time FROM demo_data_trey_mcintyre_midvalues WHERE timestamp >= current_date - 90 ) ORDER BY User_Identity, timestamp ASC ) WHERE _demosystem5.IngestTime >= to_timestamp(from_unixtime(@from_batch_ingestion_time/1000, 'yyyy-MM-dd HH:mm:ss')); -- Update the checkpoint_log table INSERT INTO checkpoint_log SELECT 'data_feed' as process_name, 'SUCCESSFUL' as process_status, cast(@to_batch_ingestion_time AS string) as last_snapshot_id, cast(@last_updated_timestamp AS timestamp) as process_timestamp; END $$; - 使用處理狀態表
排程查詢
若要確保查詢已執行且結果是以您偏好的間隔產生,請排程查詢。
使用查詢編輯器
您可以使用查詢編輯器排程查詢。 排程查詢時,您可以定義輸出資料集。 如需詳細資訊,請參閱查詢排程。
使用查詢服務API
或者,您可以使用RESTful API來定義查詢和排程查詢。 如需詳細資訊,請參閱查詢服務API指南。
在建立查詢(建立查詢)或建立查詢的排程時建立排程查詢,請確定您已將輸出資料集定義為選用的ctasParameters屬性的一部分。
匯出資料集
建立並排程查詢,然後驗證結果以將原始資料集匯出到雲端儲存空間目的地。 在Experience Platform目的地術語中,此匯出稱為「資料集匯出目的地」。 如需概觀,請參閱將資料集匯出至雲端儲存空間目的地。
支援以下雲端儲存空間目標:
EXPERIENCE PLATFORM UI
您可以透過Experience Platform UI匯出及排程匯出輸出資料集。 本節將說明相關步驟。
選取目的地
決定您要將輸出資料集匯出到的雲端儲存空間目的地。 然後,選取目的地。 當您尚未設定慣用雲端儲存空間的目的地時,您必須建立新的目的地連線。
在設定目的地時,您可以
- 定義檔案型別(JSON或Parquet),
- 產生的檔案是否應該壓縮,以及
- 是否應該包含資訊清單檔案。
選取資料集
當您選取目的地時,在下一個 選取資料集 步驟中,您必須從資料集清單中選取您的輸出資料集。 如果您已建立多個排程查詢,且希望將輸出資料集傳送至相同的雲端儲存空間目的地,則可選取對應的輸出資料集。 如需詳細資訊,請參閱選取您的資料集。
排程資料集匯出
最後,您想要排程資料集匯出,作為 排程 步驟的一部分。 在該步驟中,定義排程以及輸出資料集匯出是否為累加式。 如需詳細資訊,請參閱排程資料集匯出。
最後步驟
檢閱您的選取專案,並在正確後,開始將輸出資料集匯出至雲端儲存空間目的地。
驗證資料匯出成功。 匯出資料集時,Experience Platform會在您目的地的儲存位置中建立一或多個.json或.parquet檔案。 預期會根據您設定的匯出排程,將新檔案儲存在您的儲存位置。 Experience Platform會在您指定為所選目的地一部分的儲存位置中建立檔案夾結構,並存放匯出的檔案。 每次匯出時都會建立一個新資料夾,其模式如下: folder-name-you-provided/datasetID/exportTime=YYYYMMDDHHMM。 預設檔案名稱是隨機產生的,並確保匯出的檔案名稱是唯一的。
流程服務API
或者,您可以使用API匯出和排程匯出輸出資料集。 有關步驟已記錄在使用流程服務API匯出資料集內。
開始使用
若要匯出資料集,請確定您具有必要的許可權。 同時確認您要傳送輸出資料集的目的地支援匯出資料集。 然後,您必須收集您在API呼叫中使用的必要和選用標頭的值。 您也需要識別您要將資料集匯出至的目的地的連線規格和流量規格ID。
擷取合格的資料集
您可以擷取符合匯出條件的資料集清單,並使用GET /connectionSpecs/{id}/configs API來驗證您的輸出資料集是否屬於該清單。
建立來源連線
接下來,您必須使用唯一識別碼,為要匯出至雲端儲存空間目的地的輸出資料集建立來源連線。 您使用POST /sourceConnections API。
驗證到目的地(建立基礎連線)
若要驗證並安全地儲存雲端儲存目的地的認證,請使用POST /targetConnection API 建立基礎連線。
提供匯出引數
接下來,您必須🔗建立其他目標連線,再次使用POST /targetConnection API為您的輸出資料集儲存匯出引數。 這些匯出引數包括位置、檔案格式、壓縮等等。
設定資料流
為確保您的輸出資料集已匯出至雲端儲存空間目的地,🔗請使用POST /flows API設定資料流。 在此步驟中,您可以使用scheduleParams引數定義匯出排程。
驗證資料流
若要檢查資料流的成功執行,請使用GET /runs API,將資料流ID指定為查詢引數。 此資料流ID是您設定資料流時傳回的識別碼。
驗證資料匯出成功。 匯出資料集時,Experience Platform會在您目的地的儲存位置中建立一或多個.json或.parquet檔案。 預期會根據您設定的匯出排程,將新檔案儲存在您的儲存位置。 Experience Platform會在您指定為所選目的地一部分的儲存位置中建立檔案夾結構,並存放匯出的檔案。 每次匯出時都會建立一個新資料夾,其模式如下: folder-name-you-provided/datasetID/exportTime=YYYYMMDDHHMM。 預設檔案名稱是隨機產生的,並確保匯出的檔案名稱是唯一的。
摘要
模擬Adobe Analytics資料摘要功能代表使用查詢服務設定排程查詢,並在排程的資料集匯出中使用這些查詢的結果。