將 YouTube 頻道資料載入 BigQuery

您可以使用 YouTube 頻道專用的 BigQuery 資料移轉服務連接器,將資料從 YouTube 頻道載入 BigQuery。您可以使用 BigQuery 資料移轉服務,安排週期性移轉工作,將 YouTube 頻道的最新資料新增至 BigQuery。

支援的報表

YouTube 頻道報表適用的 BigQuery 資料移轉服務支援下列報表選項:

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

每天,大約在 14:10 (世界標準時間)

您可以設定時段

重新整理視窗

過去 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 頻道資料移轉作業。你只能使用 Google 帳戶登入時,才能建立 YouTube 頻道轉移作業。

事前準備

建立 YouTube 頻道資料移轉作業前,請先完成下列事項:

所需權限

如要建立 YouTube 頻道資料移轉作業,您需要下列項目:

  • YouTube:YouTube 頻道的擁有權
  • BigQuery:BigQuery 中的下列 Identity and Access Management (IAM) 權限:

    • bigquery.transfers.update 建立轉移作業。
    • 目標資料集的 bigquery.datasets.getbigquery.datasets.update
    • 如果您想要為 Pub/Sub 設定移轉作業執行通知,您必須擁有pubsub.topics.setIamPolicy 權限。如果您只想設定電子郵件通知,則不需要擁有 Pub/Sub 權限。詳情請參閱 BigQuery 資料移轉服務執行通知一文。

bigquery.admin 預先定義的 IAM 角色包含建立 YouTube 頻道資料移轉作業所需的所有 BigQuery 權限。如要進一步瞭解 BigQuery 中的 IAM 角色,請參閱「預先定義的角色與權限」一文。

設定 YouTube 頻道轉移作業

如要設定 YouTube 頻道資料移轉作業,您需要下列項目:

  • 資料表後置字串:您在設定資料移轉作業時為頻道提供的易記名稱。後置字串會附加在工作 ID 後方,形成資料表名稱,例如 reportTypeId_suffix。後置字串可用於防止不同的移轉作業寫入同一個資料表。所有將資料載入同個資料集的移轉工作,其資料表後置字串都不能重複,且後置字串應盡量簡短,避免產生過於冗長的資料表名稱。

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

如要建立 YouTube 頻道資料移轉作業,請按照以下步驟操作:

主控台

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

    前往「資料移轉」

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

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

    • 在「Source type」(來源類型) 區段,針對「Source」(來源) 選取 [YouTube Channel] (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」(資料來源詳細資料) 區段:

      • 在「Table Suffix」(資料表後置字串) 中輸入後置字串,例如 MT
      • 勾選「Configure jobs」(設定工作) 方塊,讓 BigQuery 為您管理 YouTube 報表工作。如果有些 YouTube 報表目前尚不存在於您的帳戶中,則系統會建立新的報表工作來啟用這些報表。

      YouTube 頻道來源詳細資料

    • (選用) 在「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"}'。進行 YouTube 頻道資料移轉作業時,您必須提供 table_suffix 參數。您可以選擇將 configure_jobs 參數設為 true,讓 BigQuery 資料移轉服務為您管理 YouTube 報表工作。如果你的頻道目前沒有任何 YouTube 報表,系統會建立新的報表工作來啟用這些報表。
  • data_source 是資料來源:youtube_channel

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

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

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

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 channel transfer config.
public class CreateYoutubeChannelTransfer {

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

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

查詢資料

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

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

排解 YouTube 頻道轉移設定問題

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