將 YouTube 內容擁有者資料載入 BigQuery

您可以使用 YouTube 內容擁有者專用的 BigQuery 資料移轉服務連接器,將資料從 YouTube 內容擁有者載入 BigQuery。您可以使用 BigQuery 資料移轉服務,排定週期性移轉工作,將 YouTube 內容擁有者的最新資料新增至 BigQuery。

支援的報表

YouTube 內容擁有者報表適用的 BigQuery 資料移轉服務支援下列報表選項:

報表選項 支援
支援的 API 版本 2018 年 6 月 18 日
重複頻率

UTC 時間每天 14:45 左右

您可以設定當天的時間

重新整理視窗

過去 1 天

無法設定

補充作業時間長度上限

30 天

自 2018 年 7 月起,包含歷來資料的 YouTube 報表在產生後可保留 30 天 (政策變更後,不含歷來資料的報表可保留 60 天)。詳情請參閱 YouTube Reporting API 說明文件中的歷來資料

如要瞭解 YouTube 內容擁有者報表如何轉換成 BigQuery 表格和視圖,請參閱 YouTube 內容擁有者報告轉換

從 YouTube 內容擁有者轉移作業擷取資料

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

重新整理視窗

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

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

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

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

限制

  • 每個報表支援的檔案大小上限為 1710 GB。
  • 資料移轉作業的最低排程頻率為每 24 小時一次。根據預設,資料移轉會在您建立資料移轉時開始。不過,您可以在設定轉移作業時,設定轉移作業的開始時間。
  • 在 YouTube 內容擁有者移轉作業期間,BigQuery 資料移轉服務不支援增量資料移轉。指定資料移轉日期後,系統會移轉該日期可用的所有資料。

事前準備

建立 YouTube 內容擁有者資料移轉作業前,請先完成下列事項:

所需權限

請確認要建立資料移轉作業的人員具備下列必要權限:

  • BigQuery

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

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

  • YouTube

    • YouTube 內容管理員或 YouTube 內容擁有者。

    內容管理員具有為內容擁有者管理 YouTube 內容的權限。內容擁有者是一種綜合帳戶,這個帳戶擁有一個或多個 YouTube 頻道,以及這些頻道中的影片。

    • YouTube 內容擁有者報表設定中的 Hide revenue data 已取消勾選。

    如要移轉收益相關報表,您必須為建立移轉作業的使用者取消勾選 YouTube 報表權限設定中的 Hide revenue data

    youtube-content-owner-reports-uncheck-hide-revenue

設定 YouTube 內容擁有者轉移作業

如要設定 YouTube 內容擁有者資料移轉作業,您需要下列項目:

  • 內容擁有者 ID:由 YouTube 提供。當您以內容擁有者或管理員身分登入 YouTube 時,您的 ID 會顯示在 URL 的 o= 後方。舉例來說,如果網址為 https://studio.youtube.com/owner/AbCDE_8FghIjK?o=AbCDE_8FghIjK,則內容擁有者 ID 為 AbCDE_8FghIjK。如要選取其他內容管理工具帳戶,請參閱「登入內容管理工具帳戶」或「YouTube 頻道切換器」。如要進一步瞭解如何建立及管理內容管理工具帳戶,請參閱「設定內容管理工具帳戶設定」。
  • 資料表後置字串:您在設定移轉作業時為頻道提供的易記名稱。後置字串會附加在工作 ID 後方,形成資料表名稱,例如 reportTypeId_suffix。後置字串可用於防止不同的資料移轉作業寫入同一個資料表。所有將資料載入同個資料集的移轉工作,其資料表後置字串都不能重複,且後置字串應盡量簡短,避免產生過於冗長的資料表名稱。

如果您使用 YouTube Reporting API,並且已經有一些報表工作,BigQuery 資料移轉服務會載入您的報表資料。如果沒有現有的報表工作,設定資料移轉時,系統會自動啟用 YouTube 報表工作。

如要設定 YouTube 內容擁有者資料轉移作業:

主控台

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。確認你已登入帳戶,且身分是內容擁有者或內容管理員。

    前往 BigQuery 頁面

  2. 按一下 [Transfers] (傳輸作業)

  3. 按一下 [Create Transfer] (建立移轉作業)

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

    • 在「Source type」(來源類型) 區段中,針對「Source」(來源),選擇 [YouTube Content Owner] (YouTube 內容擁有者)

      移轉作業來源

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

      移轉作業名稱

    • 在「Schedule options」(排程選項) 專區:

      • 在「Repeat frequency」(重複執行頻率) 部分,選擇多久執行一次資料移轉作業。如果選取「Days」(天),請按照世界標準時間提供有效的值。
      • 視情況選取「Start now」(立即開始) 或「Start at set time」(在所設時間開始執行),並提供開始日期和執行時間。
    • 在「Destination settings」(目的地設定) 部分,「Destination dataset」(目的地資料集) 請選取您為了儲存資料而建立的資料集。

      移轉資料集

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

      • 於「Content Owner ID」(內容擁有者 ID) 部分輸入您的內容擁有者 ID。
      • 在「Table Suffix」(資料表後置字串) 部分,輸入後置字串,例如 MT

      YouTube 內容擁有者來源詳細資料

    • 在「Service Account」(服務帳戶) 選單,選取與貴組織 Google Cloud 專案相關聯的服務帳戶。您可以將服務帳戶與資料移轉作業建立關聯,這樣就不需要使用者憑證。如要進一步瞭解如何搭配使用服務帳戶與資料移轉作業,請參閱使用服務帳戶的相關說明。

      如果使用聯合身分登入,您必須擁有服務帳戶才能建立資料移轉作業。如果以 Google 帳戶登入,則不一定要透過服務帳戶建立資料移轉作業。服務帳戶必須具備必要權限

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

      • 點選切換按鈕,啟用電子郵件通知。啟用這個選項之後,若資料移轉失敗,移轉作業管理員就會收到電子郵件通知。
      • 在「Select a Pub/Sub topic」(選取 Pub/Sub 主題) 選取主題名稱,或是點選「Create a topic」(建立主題)。這個選項會針對移轉作業設定 Pub/Sub 執行通知
  5. 按一下 [儲存]

  6. 如果您是第一次登入帳戶,請選取帳戶並點選「Allow」(允許)。請選取您是內容擁有者或內容管理員的帳戶。

bq

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

  • --data_source
  • --target_dataset
  • --display_name
  • --params

選用標記:

  • --service_account_name:指定要用於內容擁有者轉移驗證的服務帳戶,而非使用者帳戶。
bq mk \
--transfer_config \
--project_id=project_id \
--target_dataset=dataset \
--display_name=name \
--params='parameters' \
--data_source=data_source \
--service_account_name=service_account_name

其中:

  • project_id 是您的專案 ID。
  • dataset 是移轉設定的目標資料集。
  • name 是移轉設定的顯示名稱。資料移轉作業名稱可以是任意值,日後需要修改移轉作業時,能夠據此識別即可。
  • parameters 含有已建立移轉設定的 JSON 格式參數,例如:--params='{"param":"param_value"}'。進行 YouTube 內容擁有者資料移轉時,您必須提供 content_owner_idtable_suffix 參數。您可以選擇將 configure_jobs 參數設為 true,讓 BigQuery 資料移轉服務為您管理 YouTube 報表工作。如果有些 YouTube 報表不存在您的帳戶中,您必須建立新的報表工作才能啟用移轉功能。
  • data_source 是資料來源:youtube_content_owner
  • service_account_name 是用於驗證資料移轉作業的服務帳戶名稱。服務帳戶應由用於建立轉移作業的 project_id 擁有,且應具備所有必要權限

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

舉例來說,下列指令會使用內容擁有者 ID AbCDE_8FghIjK、資料表後置字串 MT 和目標資料集 mydataset,建立名為 My Transfer 的 YouTube 內容擁有者資料移轉作業。資料移轉作業會在預設專案中建立:

bq mk \
--transfer_config \
--target_dataset=mydataset \
--display_name='My Transfer' \
--params='{"content_owner_id":"abCDE_8FghIjK","table_suffix":"MT","configure_jobs":"true"}' \
--data_source=youtube_content_owner

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 youtube content owner channel transfer config
public class CreateYoutubeContentOwnerTransfer {

  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 contentOwnerId = "MY_CONTENT_OWNER_ID";
    String tableSuffix = "_test";
    Map<String, Value> params = new HashMap<>();
    params.put("content_owner_id", Value.newBuilder().setStringValue(contentOwnerId).build());
    params.put("table_suffix", Value.newBuilder().setStringValue(tableSuffix).build());
    TransferConfig transferConfig =
        TransferConfig.newBuilder()
            .setDestinationDatasetId(datasetId)
            .setDisplayName("Your Youtube Owner Channel Config Name")
            .setDataSourceId("youtube_content_owner")
            .setParams(Struct.newBuilder().putAllFields(params).build())
            .build();
    createYoutubeContentOwnerTransfer(projectId, transferConfig);
  }

  public static void createYoutubeContentOwnerTransfer(
      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(
          "Youtube content owner channel transfer created successfully :" + config.getName());
    } catch (ApiException ex) {
      System.out.print("Youtube content owner channel transfer was not created." + ex.toString());
    }
  }
}

查詢資料

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

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

排解 YouTube 內容擁有者移轉設定問題

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