Campaign Manager 移轉

透過 Campaign Manager 專用的 BigQuery 資料移轉服務連接器,您可以自動排定及管理 Campaign Manager 報表資料的週期性載入工作。

支援的報表

Campaign Manager 專用的 BigQuery 資料移轉服務 (過去稱為 DoubleClick Campaign Manager) 支援下列報表選項:

如需瞭解 Campaign Manager 報表如何轉換成 BigQuery 表格及資料檢視,請參閱 Campaign Manager 報表轉換

報表選項 支援
重複頻率

每 8 小時 (根據建立時間)。

無法設定

重新整理視窗

過去 2 天

無法設定

補充作業時間上限

過去 60 天

Campaign Manager 最多會保留資料移轉檔案 60 天。超過 60 天後,Campaign Manager 就會刪除這些檔案。

從 Campaign Manager 移轉作業擷取資料

從 Campaign Manager 將資料移轉至 BigQuery 時,系統會將資料載入以日期為分區的 BigQuery 資料表。資料載入的資料表分區會對應至資料來源的日期。如果為同一天排定多項移轉作業,BigQuery 資料移轉服務會以最新資料覆寫該特定日期的資料分割。同一天內多次轉移資料或執行回填作業,不會導致資料重複,其他日期的分區也不會受到影響。

重新整理視窗

更新期是指資料移轉作業在執行時,擷取資料的天數。舉例來說,如果重新整理時間範圍為三天,且每天都會進行移轉,BigQuery 資料移轉服務就會從來源資料表擷取過去三天的所有資料。在這個範例中,每天進行移轉時,BigQuery 資料移轉服務會建立新的 BigQuery 目的地資料表分割區,並複製當天的來源資料表資料,然後自動觸發回填執行作業,以更新過去兩天的來源資料表資料。系統自動觸發的回填作業會覆寫或增量更新 BigQuery 目的地資料表,具體做法取決於 BigQuery 資料移轉服務連接器是否支援增量更新。

首次執行資料移轉時,資料移轉作業會擷取重新整理視窗內的所有可用來源資料。舉例來說,如果重新整理時間範圍為三天,且您是第一次執行資料移轉作業,BigQuery 資料移轉服務會擷取三天內的所有來源資料。

重新整理視窗會對應至 TransferConfig.data_refresh_window_days API 欄位

如要擷取重新整理時間範圍外的資料 (例如歷來資料),或從任何轉移中斷或缺漏中復原資料,您可以啟動或排定補充作業

事前準備

建立 Campaign Manager 資料移轉作業前的準備事項如下:

  • 確認您已完成啟用 BigQuery 資料移轉服務的一切必要動作。
  • 建立 BigQuery 資料集來儲存 Campaign Manager 資料。
  • 確認貴機構可存取 Campaign Manager 資料移轉第 2 版 (Campaign Manager DTv2) 檔案。這些檔案會由 Campaign Manager 團隊傳送至 Cloud Storage bucket。如要取得 Campaign Manager DTv2 檔案的存取權,請視您是否與 Campaign Manager 簽訂直接合約,採取後續步驟。這兩種情況都可能需要額外付費。

    • 如果您與 Campaign Manager 簽訂合約,請與 Campaign Manager 支援團隊聯絡,設定 Campaign Manager DTv2 檔案。
    • 如果您沒有 Campaign Manager 合約,您的代理商或 Campaign Manager 經銷商可能可以存取 Campaign Manager DTv2 檔案。請與您的代理商或經銷商聯絡,以便取得這些檔案的存取權。

    完成上述步驟後,您會獲得類似下列字串的 Cloud Storage bucket 名稱:

    dcdt_-dcm_account123456

  • 如果您想要為 Pub/Sub 設定移轉作業執行通知,您必須擁有pubsub.topics.setIamPolicy 權限。詳情請參閱 BigQuery 資料移轉服務執行通知

所需權限

  • BigQuery:確認建立資料移轉作業的人員在 BigQuery 中具有下列權限:

    • 建立資料移轉作業的 bigquery.transfers.update 權限
    • 目標資料集的 bigquery.datasets.getbigquery.datasets.update 權限

    bigquery.admin 這個預先定義的 IAM 角色具備 bigquery.transfers.updatebigquery.datasets.updatebigquery.datasets.get 權限。如要進一步瞭解 BigQuery 資料移轉服務中的身分與存取權管理角色,請參閱存取權控管

  • Campaign Manager:儲存在 Cloud Storage 中 Campaign Manager DTv2 檔案的讀取權限。存取權由提供 Cloud Storage 值區的實體管理。

設定 Campaign Manager 轉移作業

如要設定 Campaign Manager 資料移轉作業,您必須擁有:

  • Cloud Storage 值區:存放 Campaign Manager DTv2 檔案的 Cloud Storage 值區 URI,如事前準備一節所述。值區名稱應如下所示:

    dcdt_-dcm_account123456

  • Campaign Manager ID:您的 Campaign Manager Network、廣告客戶或 Floodlight ID。Network ID 在階層中是父項。

尋找 Campaign Manager ID

如要擷取 Campaign Manager ID,您可以使用 Cloud Storage 主控台檢查 Campaign Manager 資料移轉 Cloud Storage bucket 中的檔案。Campaign Manager ID 可用來在您提供的 Cloud Storage 值區中比對檔案,這個 ID 會嵌入檔案名稱,而非 Cloud Storage bucket 名稱。

例如:

  • 在名為 dcm_account123456_activity_* 的檔案中,ID 為 123456
  • 在名為 dcm_floodlight7890_activity_* 的檔案中,ID 為 7890
  • 在名為 dcm_advertiser567_activity_* 的檔案中,ID 為 567

尋找檔案名稱前置字串

在極少數的情況下,在您 Cloud Storage bucket 中的檔案可能包含由 Google Marketing Platform 服務團隊為您設定的非標準自訂檔案名稱。

例如:

  • 在名為 dcm_account123456custom_activity_* 的檔案中,前置字元為 dcm_account123456custom,也就是 _activity 之前的所有內容。

如果您需要協助,請聯絡 Campaign Manager 支援小組

為 Campaign Manager 建立資料移轉作業

主控台

  1. 前往 Google Cloud 控制台的「資料移轉」頁面。

    前往「資料移轉」

  2. 按一下 「建立移轉作業」

  3. 在「Create Transfer」(建立轉移作業) 頁面:

    • 請在「Source type」(來源類型) 區段的「Source」(來源),選取「Campaign Manager」

      移轉作業來源

    • 在「Transfer config name」(轉移設定名稱) 專區,針對「Display name」(顯示名稱) 輸入資料移轉作業的名稱,例如 My Transfer。移轉作業名稱可以是任何能讓您辨識移轉作業的值,方便您日後在必要時進行修改。

      移轉作業名稱

    • 在「Schedule options」(排程選項) 區段中,針對「Schedule」(排程) 保留預設值 ([Start now] (立即開始)),或按一下 [Start at a set time] (於設定的時間開始)

      • 在「Repeats」(重複時間間隔) 部分,選擇多久執行一次移轉作業的選項。 如果選擇「Daily」(每天) 外的選項,還可進一步選擇其他選項。舉例來說,如果選擇「Weekly」(每週),會看到一個可選擇星期幾的選項。
      • 請在「Start date and run time」(開始日期和執行時間),輸入開始移轉作業的日期和時間。如果選取「Start now」(立即開始),這個選項便會停用。
    • 在「Destination settings」(目的地設定) 區段中,針對「Destination dataset」(目的地資料集),選擇您建立來儲存資料的資料集。

      移轉資料集

    • 在「Data source details」(資料來源詳細資料) 區段:

      • 在「Cloud Storage bucket」(Cloud Storage 值區),輸入或瀏覽用於儲存 Data Transfer 2.0 版檔案的 Cloud Storage bucket 名稱。輸入 bucket 名稱時,請不要加入 gs://
      • 在「DoubleClick ID」,輸入適當的 Campaign Manager ID。
      • (選用) 如果檔案內含類似這些範例的標準名稱,請將「File name prefix」(檔案名稱前置字串) 欄位留空。如果 Cloud Storage bucket 中的檔案有自訂檔案名稱,請指定檔案名稱前置字串

      Campaign Manager 來源詳細資料

    • (選用) 在「Notification options」(通知選項) 區段中:

      • 按一下啟用電子郵件通知的切換開關。啟用此選項後,移轉作業管理員會在移轉作業失敗時,收到電子郵件通知。
      • 在「Select a Pub/Sub topic」(選取 Pub/Sub 主題),選擇您的主題名稱,或點按「Create a topic」(建立主題)。這個選項會設定移轉作業的 Pub/Sub 執行通知
  4. 按一下 [儲存]

bq

輸入 bq mk 指令並提供移轉建立標記 - --transfer_config。還需加上以下旗標:

  • --data_source
  • --target_dataset
  • --display_name
  • --params
bq mk --transfer_config \
--project_id=project_id \
--target_dataset=dataset \
--display_name=name \
--params='parameters' \
--data_source=data_source

其中:

  • project_id 是您的專案 ID。
  • dataset 是資料移轉設定的目標資料集。
  • name 是資料移轉設定的顯示名稱。移轉作業名稱可以是任意值,日後需要修改移轉作業時,能夠據此識別即可。
  • parameters 含有已建立資料移轉設定的 JSON 格式參數。例如:--params='{"param":"param_value"}'。針對 Campaign Manager,您必須提供 bucketnetwork_id 參數。bucket 是包含 Campaign Manager DTv2 檔案的 Cloud Storage bucket。network_id 是您的聯播網、Floodlight 或廣告主 ID。
  • data_source 是資料來源:dcm_dt (Campaign Manager)。

您還可以提供 --project_id 標記來指定特定專案。如果未指定 --project_id,系統會採用預設專案。

舉例來說,下列指令會使用 Campaign Manager ID 123456、Cloud Storage 值區 dcdt_-dcm_account123456 和目標資料集 mydataset,建立名為 My Transfer 的 Campaign Manager 資料移轉作業。參數 file_name_prefix 為選填,僅適用於罕見的自訂檔案名稱。

資料移轉作業會在預設專案中建立:

bq mk --transfer_config \
--target_dataset=mydataset \
--display_name='My Transfer' \
--params='{"bucket": "dcdt_-dcm_account123456","network_id": "123456","file_name_prefix":"YYY"}' \
--data_source=dcm_dt

執行指令後,您會收到如下的訊息:

[URL omitted] Please copy and paste the above URL into your web browser and follow the instructions to retrieve an authentication code.

請按照指示進行操作,並在指令列中貼上驗證碼。

API

請使用 projects.locations.transferConfigs.create 方法,並提供 TransferConfig 資源的執行個體。

Java

在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Java 設定說明進行操作。詳情請參閱 BigQuery Java API 參考說明文件

如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。

import com.google.api.gax.rpc.ApiException;
import com.google.cloud.bigquery.datatransfer.v1.CreateTransferConfigRequest;
import com.google.cloud.bigquery.datatransfer.v1.DataTransferServiceClient;
import com.google.cloud.bigquery.datatransfer.v1.ProjectName;
import com.google.cloud.bigquery.datatransfer.v1.TransferConfig;
import com.google.protobuf.Struct;
import com.google.protobuf.Value;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

// Sample to create campaign manager transfer config
public class CreateCampaignmanagerTransfer {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    final String projectId = "MY_PROJECT_ID";
    String datasetId = "MY_DATASET_ID";
    String bucket = "gs://cloud-sample-data";
    // the network_id only allows digits
    String networkId = "7878";
    String fileNamePrefix = "test_";
    Map<String, Value> params = new HashMap<>();
    params.put("bucket", Value.newBuilder().setStringValue(bucket).build());
    params.put("network_id", Value.newBuilder().setStringValue(networkId).build());
    params.put("file_name_prefix", Value.newBuilder().setStringValue(fileNamePrefix).build());
    TransferConfig transferConfig =
        TransferConfig.newBuilder()
            .setDestinationDatasetId(datasetId)
            .setDisplayName("Your Campaignmanager Config Name")
            .setDataSourceId("dcm_dt")
            .setParams(Struct.newBuilder().putAllFields(params).build())
            .build();
    createCampaignmanagerTransfer(projectId, transferConfig);
  }

  public static void createCampaignmanagerTransfer(String projectId, TransferConfig transferConfig)
      throws IOException {
    try (DataTransferServiceClient client = DataTransferServiceClient.create()) {
      ProjectName parent = ProjectName.of(projectId);
      CreateTransferConfigRequest request =
          CreateTransferConfigRequest.newBuilder()
              .setParent(parent.toString())
              .setTransferConfig(transferConfig)
              .build();
      TransferConfig config = client.createTransferConfig(request);
      System.out.println("Campaignmanager transfer created successfully :" + config.getName());
    } catch (ApiException ex) {
      System.out.print("Campaignmanager transfer was not created." + ex.toString());
    }
  }
}

排解 Campaign Manager 移轉設定問題

如果無法順利設定資料移轉,請參閱排解移轉設定問題中的「Campaign Manager 移轉問題」一節。

查詢資料

資料移轉至 BigQuery 時,系統會將資料寫入擷取時間分區資料表。詳情請參閱分區資料表簡介一文。

如果您要直接查詢資料表,而不要使用自動產生的檢視表,您必須在查詢中使用 _PARTITIONTIME 虛擬資料欄。詳情請參閱查詢分區資料表一文。

Campaign Manager 範例查詢

您可以使用下列 Campaign Manager 查詢範例來分析已移轉的資料。您還可以在 Looker Studio 等視覺化工具中使用查詢。這些查詢可協助您開始透過 BigQuery 查詢 Campaign Manager 資料。如果您對於這些報表的功能有其他問題,請洽詢您的 Campaign Manager 技術代表。

在下列各項查詢中,請將「dataset」等變數替換為您的值。

近期廣告活動

下列 SQL 範例查詢會擷取最近的廣告活動。

SELECT
  Campaign,
  Campaign_ID
FROM
  `dataset.match_table_campaigns_campaign_manager_id`
WHERE
  _DATA_DATE = _LATEST_DATE

各個廣告活動的曝光次數和不重複使用者人數

以下 SQL 查詢範例會分析過去 30 天內各個廣告活動的曝光次數和不重複使用者人數。

# START_DATE = DATE_ADD(CURRENT_DATE(), INTERVAL -31 DAY)
# END_DATE = DATE_ADD(CURRENT_DATE(), INTERVAL -1 DAY)
  SELECT
    Campaign_ID,
    _DATA_DATE AS Date,
    COUNT(*) AS count,
    COUNT(DISTINCT User_ID) AS du
  FROM
    `dataset.impression_campaign_manager_id`
  WHERE
    _DATA_DATE BETWEEN start_date
    AND end_date
  GROUP BY
    Campaign_ID,
    Date

將近期廣告活動依廣告活動和日期排序

以下 SQL 查詢範例會分析過去 30 天內的廣告活動,並依廣告活動和日期排序。

# START_DATE = DATE_ADD(CURRENT_DATE(), INTERVAL -31 DAY)
# END_DATE = DATE_ADD(CURRENT_DATE(), INTERVAL -1 DAY)
SELECT
  Campaign,
  Campaign_ID,
  Date
FROM (
  SELECT
    Campaign,
    Campaign_ID
  FROM
    `dataset.match_table_campaigns_campaign_manager_id`
  WHERE
    _DATA_DATE = _LATEST_DATE ),
  (
  SELECT
    date AS Date
  FROM
    `bigquery-public-data.utility_us.date_greg`
  WHERE
    Date BETWEEN start_date
    AND end_date )
ORDER BY
  Campaign_ID,
  Date

特定日期範圍內各個廣告活動的曝光次數和不重複使用者人數

以下 SQL 查詢範例會分析 start_dateend_date 之間各個廣告活動的曝光次數和不重複使用者人數。

# START_DATE = DATE_ADD(CURRENT_DATE(), INTERVAL -31 DAY)
# END_DATE = DATE_ADD(CURRENT_DATE(), INTERVAL -1 DAY)
SELECT
  base.*,
  imp.count AS imp_count,
  imp.du AS imp_du
FROM (
  SELECT
    *
  FROM (
    SELECT
      Campaign,
      Campaign_ID
    FROM
      `dataset.match_table_campaigns_campaign_manager_id`
    WHERE
      _DATA_DATE = _LATEST_DATE ),
    (
    SELECT
      date AS Date
    FROM
      `bigquery-public-data.utility_us.date_greg`
    WHERE
      Date BETWEEN start_date
      AND end_date ) ) AS base
LEFT JOIN (
  SELECT
    Campaign_ID,
    _DATA_DATE AS Date,
    COUNT(*) AS count,
    COUNT(DISTINCT User_ID) AS du
  FROM
    `dataset.impression_campaign_manager_id`
  WHERE
    _DATA_DATE BETWEEN start_date
    AND end_date
  GROUP BY
    Campaign_ID,
    Date ) AS imp
ON
  base.Campaign_ID = imp.Campaign_ID
  AND base.Date = imp.Date
WHERE
  base.Campaign_ID = imp.Campaign_ID
  AND base.Date = imp.Date
ORDER BY
  base.Campaign_ID,
  base.Date

各個廣告活動的曝光次數、點擊次數、活動數和不重複使用者人數

以下 SQL 查詢範例會分析過去 30 天內,各個廣告活動的曝光次數、點擊次數、活動數和不重複使用者人數。在這項查詢中,請將 campaign_list 等變數替換為您的值,舉例來說,請將 campaign_list 改為逗號分隔的清單,其中包含查詢範圍內所有相關的 Campaign Manager 廣告活動。

# START_DATE = DATE_ADD(CURRENT_DATE(), INTERVAL -31 DAY)
# END_DATE = DATE_ADD(CURRENT_DATE(), INTERVAL -1 DAY)
SELECT
  base.*,
  imp.count AS imp_count,
  imp.du AS imp_du,
  click.count AS click_count,
  click.du AS click_du,
  activity.count AS activity_count,
  activity.du AS activity_du
FROM (
  SELECT
    *
  FROM (
    SELECT
      Campaign,
      Campaign_ID
    FROM
      `dataset.match_table_campaigns_campaign_manager_id`
    WHERE
      _DATA_DATE = _LATEST_DATE ),
    (
    SELECT
      date AS Date
    FROM
      `bigquery-public-data.utility_us.date_greg`
    WHERE
      Date BETWEEN DATE_ADD(CURRENT_DATE(), INTERVAL -31 DAY)
      AND DATE_ADD(CURRENT_DATE(), INTERVAL -1 DAY) ) ) AS base
LEFT JOIN (
  SELECT
    Campaign_ID,
    _DATA_DATE AS Date,
    COUNT(*) AS count,
    COUNT(DISTINCT User_ID) AS du
  FROM
    `dataset.impression_campaign_manager_id`
  WHERE
    _DATA_DATE BETWEEN DATE_ADD(CURRENT_DATE(), INTERVAL -31 DAY)
    AND DATE_ADD(CURRENT_DATE(), INTERVAL -1 DAY)
  GROUP BY
    Campaign_ID,
    Date ) AS imp
ON
  base.Campaign_ID = imp.Campaign_ID
  AND base.Date = imp.Date
LEFT JOIN (
  SELECT
    Campaign_ID,
    _DATA_DATE AS Date,
    COUNT(*) AS count,
    COUNT(DISTINCT User_ID) AS du
  FROM
    `dataset.click_campaign_manager_id`
  WHERE
    _DATA_DATE BETWEEN DATE_ADD(CURRENT_DATE(), INTERVAL -31 DAY)
    AND DATE_ADD(CURRENT_DATE(), INTERVAL -1 DAY)
  GROUP BY
    Campaign_ID,
    Date ) AS click
ON
  base.Campaign_ID = click.Campaign_ID
  AND base.Date = click.Date
LEFT JOIN (
  SELECT
    Campaign_ID,
    _DATA_DATE AS Date,
    COUNT(*) AS count,
    COUNT(DISTINCT User_ID) AS du
  FROM
    `dataset.activity_campaign_manager_id`
  WHERE
    _DATA_DATE BETWEEN DATE_ADD(CURRENT_DATE(), INTERVAL -31 DAY)
    AND DATE_ADD(CURRENT_DATE(), INTERVAL -1 DAY)
  GROUP BY
    Campaign_ID,
    Date ) AS activity
ON
  base.Campaign_ID = activity.Campaign_ID
  AND base.Date = activity.Date
WHERE
  base.Campaign_ID IN campaign_list
  AND (base.Date = imp.Date
    OR base.Date = click.Date
    OR base.Date = activity.Date)
ORDER BY
  base.Campaign_ID,
  base.Date

廣告活動

下列 SQL 查詢範例會分析過去 30 天的廣告活動活動。在這項查詢中,請將 campaign_list 等變數替換為您的值,舉例來說,請將 campaign_list 改為逗號分隔的清單,其中包含查詢範圍內所有相關的 Campaign Manager 廣告活動。

# START_DATE = DATE_ADD(CURRENT_DATE(), INTERVAL -31 DAY)
# END_DATE = DATE_ADD(CURRENT_DATE(), INTERVAL -1 DAY)
SELECT
  base.*,
  activity.count AS activity_count,
  activity.du AS activity_du
FROM (
  SELECT
    *
  FROM (
    SELECT
      Campaign,
      Campaign_ID
    FROM
      `dataset.match_table_campaigns_campaign_manager_id`
    WHERE
      _DATA_DATE = _LATEST_DATE ),
    (
    SELECT
      mt_at.Activity_Group,
      mt_ac.Activity,
      mt_ac.Activity_Type,
      mt_ac.Activity_Sub_Type,
      mt_ac.Activity_ID,
      mt_ac.Activity_Group_ID
    FROM
      `dataset.match_table_activity_cats_campaign_manager_id` AS mt_ac
    JOIN (
      SELECT
        Activity_Group,
        Activity_Group_ID
      FROM
        `dataset.match_table_activity_types_campaign_manager_id`
      WHERE
        _DATA_DATE = _LATEST_DATE ) AS mt_at
    ON
      mt_at.Activity_Group_ID = mt_ac.Activity_Group_ID
    WHERE
      _DATA_DATE = _LATEST_DATE ),
    (
    SELECT
      date AS Date
    FROM
      `bigquery-public-data.utility_us.date_greg`
    WHERE
      Date BETWEEN start_date
      AND end_date ) ) AS base
LEFT JOIN (
  SELECT
    Campaign_ID,
    Activity_ID,
    _DATA_DATE AS Date,
    COUNT(*) AS count,
    COUNT(DISTINCT User_ID) AS du
  FROM
    `dataset.activity_campaign_manager_id`
  WHERE
    _DATA_DATE BETWEEN DATE_ADD(CURRENT_DATE(), INTERVAL -31 DAY)
    AND DATE_ADD(CURRENT_DATE(), INTERVAL -1 DAY)
  GROUP BY
    Campaign_ID,
    Activity_ID,
    Date ) AS activity
ON
  base.Campaign_ID = activity.Campaign_ID
  AND base.Activity_ID = activity.Activity_ID
  AND base.Date = activity.Date
WHERE
  base.Campaign_ID IN campaign_list
  AND base.Activity_ID = activity.Activity_ID
ORDER BY
  base.Campaign_ID,
  base.Activity_Group_ID,
  base.Activity_ID,
  base.Date