查詢服務(資料Distiller)和匯出資料集

本文概述如何使用Experience Platform查詢服務(資料Distiller)和資料集匯出的組合,來實作下列個資料匯出使用案例

  • 資料驗證
  • Data Lake,BI工具Data Warehouse
  • 人工智慧和機器學習的整備。

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還支援:

資料摘要欄

您可以在查詢中使用的XDM欄位取決於資料集所依據的結構描述定義。 請確定您瞭解資料集所根據的結構描述。 請參閱資料集使用者介面指南以取得詳細資訊。

若要協助您定義資料摘要欄位與XDM欄位之間的對應,請參閱分析欄位對應。 另請參閱結構描述UI總覽,以取得有關如何管理XDM資源(包括結構描述、類別、欄位群組和資料型別)的詳細資訊。

例如,如果您想使用​ 頁面名稱 ​作為資料摘要的一部分:

  • 在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,且使用巢狀資料結構

請參閱在UI中定義身分欄位,以取得如何在Experience Platform中定義身分欄位的詳細資訊。

請參考Analytics資料中的主要識別碼,瞭解使用Analytics來源聯結器時,Adobe Analytics身分如何對應到Experience Platform身分識別。 此對應可作為設定身分識別的指引,即使未使用Analytics來源聯結器亦然。

點選層級資料和識別

根據實作,傳統上在Adobe Analytics中收集的點選層級資料現在會儲存為Experience Platform中的時間戳記事件資料。 下表擷取自Analytics欄位對應,並示範如何將點選層級特定的Adobe Analytics資料摘要欄與查詢中的對應XDM欄位進行對應。 此表格也顯示如何使用XDM欄位識別點選、造訪和訪客的範例。

資料摘要欄
XDM欄位
類型
說明
hitid_high + hitid_low
_id
字串
用於識別點選的唯一識別碼。
hitid_low
_id
字串
hitid_high搭配使用以唯一識別點選。
hitid_high
_id
字串
hitid_high搭配使用以唯一識別點選。
hit_time_gmt
receivedTimestamp
字串
點選的時間戳記,根據UNIX®時間。
cust_hit_time_gmt
timestamp
字串
此時間戳記只會用於啟用時間戳記的資料集。 根據UNIX®時間,此時間戳記會隨點選傳送。
visid_high + visid_low
identityMap
物件
造訪的唯一識別碼。
visid_high + visid_low
endUserIDs._experience.aaid.id
字串
造訪的唯一識別碼。
visid_high
endUserIDs._experience.aaid.primary
布林值
visid_low搭配使用以唯一識別造訪。
visid_high
endUserIDs._experience.aaid.namespace.code
字串
visid_low搭配使用以唯一識別造訪。
visid_low
identityMap
物件
visid_high搭配使用以唯一識別造訪。
cust_visid
identityMap
物件
客戶訪客ID。
cust_visid
endUserIDs._experience.aacustomid.id
物件
客戶訪客ID。
cust_visid
endUserIDs._experience.aacustomid.primary
布林值
客戶訪客ID名稱空間程式碼。
cust_visid
endUserIDs._experience.aacustomid.namespace.code
字串
visid_low搭配使用以唯一識別客戶訪客ID。
geo\_*
placeContext.geo.*
字串,數字
地理位置資料,例如國家、地區、城市等
event_list
commerce.purchasescommerce.productViewscommerce.productListOpenscommerce.checkoutscommerce.productListAddscommerce.productListRemovalscommerce.productListViews_experience.analytics.event101to200.*、…、_experience.analytics.event901_1000.*
字串
標準商務和點選時觸發的自訂事件。
page_event
web.webInteraction.type
字串
影像要求中傳送的點選型別(標準點選、下載連結、退出連結或自訂連結已點按)。
page_event
web.webInteraction.linkClicks.value
數字
影像要求中傳送的點選型別(標準點選、下載連結、退出連結或自訂連結已點按)。
page_event_var_1
web.webInteraction.URL
字串
僅用於連結追蹤影像要求中的變數。 此變數包含下載連結、退出連結或自訂連結點選的URL。
page_event_var_2
web.webInteraction.name
字串
僅用於連結追蹤影像要求中的變數。 這會列出連結的自訂名稱(如果已指定)。
paid_search
search.isPaid
布林值
如果點選符合付費搜尋偵測,則會設定此旗標。
ref_type
web.webReferrertype
字串
此數值 ID 表示點擊的反向連結類型。

張貼欄

Adobe Analytics資料摘要使用具有post_首碼的欄的概念,這些欄是包含處理後的資料之欄。 如需詳細資訊,請參閱資料摘要常見問題

透過Experience PlatformEdge Network(Web SDK、Mobile SDK、伺服器API)在資料集中收集的資料沒有post_欄位的概念。 因此,post_首碼和​ -post_首碼資料摘要資料行對應到相同的XDM欄位。 例如,page_urlpost_page_url資料摘要欄位都對應到相同的web.webPageDetails.URL XDM欄位。

請參閱比較Adobe Analytics與Customer Journey Analytics的資料處理,以取得資料處理差異的概觀。

但在Experience Platform資料湖中收集資料時,post_首碼資料行型別的資料確實需要進階轉換,才能成功用於資料摘要使用案例。 在您的查詢中執行這些進階轉換,涉及使用Adobe定義的函式進行工作階段化、歸因及重複資料刪除。 請參閱範例以瞭解如何使用這些函式。

查詢

若要從其他資料集中查詢資料,請使用標準SQL功能(WHERE子句、INNER JOINOUTER 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限制輸出。

+++
詳細資料

若要這麼做,您必須……

  • 使用處理狀態表checkpoint_log來追蹤目前與上次擷取時間。 如需詳細資訊,請參閱本指南
  • 停用卸除系統資料行,以便使用_acp_system_metadata.ingestTime
  • 使用最內部的SELECT來抓取您要使用的欄位,並將事件限制在您的回溯期間,以進行工作階段化和/或歸因計算。 例如90天。
  • 使用下一個層級SELECT來套用工作階段化和/或歸因視窗函式及其他計算。
  • 在輸出表格中使用INSERT INTO,將回顧限制在自上次處理時間後到達的事件。 若要這麼做,請篩選_acp_system_metadata.ingestTime 與上次儲存於處理狀態表格中的時間。

工作階段化視窗功能範例

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

歸因視窗功能範例

$$ 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 PLATFORMUI

您可以透過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 /targetConection API驗證並安全地儲存認證至您的雲端儲存空間目的地。

提供匯出引數

接下來,您必須🔗建立其他目標連線,再次使用POST /targetConection 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資料摘要功能隱含著使用查詢服務設定排程查詢,以及在排程資料集匯出中使用這些查詢的結果。

IMPORTANT
此使用案例涉及兩個排程器。 為確保模擬資料摘要功能可正常運作,請確定在查詢服務和資料匯出中設定的排程不會干預。
recommendation-more-help
080e5213-7aa2-40d6-9dba-18945e892f79