YouTube コンテンツ所有者の転送

BigQuery Data Transfer Service for YouTube を使用すると、YouTube コンテンツ所有者レポートを定期的に読み込むジョブのスケジュール設定と管理を自動化できます。

サポートされるレポート

BigQuery Data Transfer Service for YouTube のコンテンツ所有者レポートでは、次のレポート オプションがサポートされています。

レポート オプション サポート
サポート対象の 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 Data Transfer Service により、対象の日付のパーティションが最新のデータで上書きされます。同じ日に複数回の転送を行っても、データは重複せず、他の日付のパーティションに対する影響はありません。

制限事項

  • 各レポートでサポートされている最大ファイルサイズは 1,710 GB です。
  • データ移転をスケジュールできる最短の頻度は 24 時間に 1 回です。デフォルトでは、転送を作成したときに転送が開始されます。ただし、転送を設定するときに、転送の開始時間を構成できます。
  • BigQuery Data Transfer Service は、YouTube コンテンツ所有者の転送中の増分転送をサポートしていません。データ移転の日付を指定すると、その日付で使用できるすべてのデータが転送されます。

準備

YouTube コンテンツ所有者の転送を作成する前に、以下を行います。

  • BigQuery Data Transfer Service を有効にするために必要なすべての操作が完了していることを確認します。
  • YouTube データを格納する BigQuery データセットを作成します。
  • YouTube コンテンツ所有者アカウントを持っていることを確認します。YouTube コンテンツ所有者と YouTube チャンネルとは同じではありません。通常、さまざまなチャンネルを管理する場合は、YouTube コンテンツ所有者アカウントのみが必要です。
  • Pub/Sub の転送実行通知を設定する場合は、pubsub.topics.setIamPolicy 権限が必要です。メール通知を設定するだけの場合、Pub/Sub の権限は必要ありません。詳細については、BigQuery Data Transfer Service の実行通知をご覧ください。

必要な権限

転送を作成するユーザーに、次の必要な権限が付与されていることを確認します。

  • BigQuery:

    • bigquery.transfers.update(転送を作成する権限)
    • bigquery.datasets.getbigquery.datasets.updateの両方(対象データセットに対する権限)

    bigquery.transfers.update 権限、bigquery.datasets.update 権限、bigquery.datasets.get 権限は、IAM 事前定義ロール bigquery.admin に含まれています。BigQuery Data Transfer Service での IAM ロールについて、詳しくはアクセス制御をご覧ください。

  • YouTube:

    • YouTube コンテンツ マネージャまたは YouTube コンテンツ所有者。

    コンテンツ マネージャには、コンテンツ所有者の YouTube コンテンツを管理する権限が付与されます。コンテンツ所有者とは、1 つ以上の YouTube チャンネルとそのチャンネルの動画を所有するアカウントのことです。

    • YouTube コンテンツ所有者レポートの設定で、Hide revenue data がオフになっていること。

    収益に関連するレポートを転送するには、転送を作成するユーザーの YouTube レポート権限の設定で Hide revenue data をオフにする必要があります。

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

YouTube コンテンツ所有者の転送を設定する

YouTube コンテンツ所有者の転送を設定するには、以下が必要です。

  • コンテンツ所有者 ID: YouTube から提供されます。YouTube にコンテンツ所有者またはコンテンツ マネージャとしてログインすると、URL の o= の後に ID が表示されます。たとえば、URL が https://youtube.com/dashboard?0=AbCDE_8FghIjK の場合、コンテンツ所有者 ID は AbCDE_8FghIjK です。コンテンツ マネージャ アカウントの詳細については、コンテンツ マネージャのアカウント設定をご覧ください。
  • テーブル サフィックス: 転送を設定するときにユーザーが指定するわかりやすいチャンネル名です。サフィックスがジョブ ID に追加され、テーブル名が作成されます(例: reportTypeId_suffix)。このサフィックスは、別の転送によって同じテーブルへの書き込みが行われないようにするために使用されます。テーブル サフィックスは、同じデータセットにデータを読み込むすべての転送で一意にする必要があり、また、生成されるテーブル名の長さを抑えるために短くする必要があります。

現在 YouTube Reporting API を使用していて、既存のレポート作成ジョブが存在する場合は、BigQuery Data Transfer Service によってユーザーのレポートデータが読み込まれます。既存のレポート作成ジョブがない場合は、転送を設定すると、YouTube レポート作成ジョブが自動的に有効になります。

YouTube コンテンツ所有者の転送を設定するには:

コンソール

  1. Google Cloud コンソールの [BigQuery] ページに移動します。コンテンツ所有者またはコンテンツ マネージャとしてアカウントにログインしていることを確認します。

    [BigQuery] ページに移動

  2. [転送] をクリックします。

  3. [転送を作成] をクリックします。

  4. [転送の作成] ページで、次の操作を行います。

    • [ソースタイプ] セクションの [ソース] で、YouTube コンテンツ管理者を選択します。

      転送のソース

    • [転送構成名] セクションの [表示名] に、転送名(例: My Transfer)を入力します。転送名には、後で修正が必要になった場合に簡単に識別できる任意の名前を使用できます。

      転送名

    • [スケジュール オプション] セクションで:

      • [繰り返しの頻度] で、転送を実行する頻度のオプションを選択します。[日数] を選択した場合は、有効な時刻を UTC で入力します。

        • 時間
        • 日数
        • オンデマンド
      • 必要に応じて、[すぐに開始可能] を選択するか、[設定した時刻に開始] を選択して開始日と実行時間を指定します。

    • [転送先の設定] セクションの [宛先データセット] で、データを保存するために作成したデータセットを選択します。

      転送データセット

    • [データソースの詳細] セクションで、次の操作を行います。

      • [コンテンツ所有者 ID] に、コンテンツ所有者 ID を入力します。
      • [テーブル サフィックス] に、サフィックス(例: MT)を入力します。

        YouTube コンテンツ所有者のソースの詳細

    • (省略可)[通知オプション] セクションで、次の操作を行います。

      • 切り替えボタンをクリックしてメール通知を有効にします。このオプションを有効にすると、転送の実行が失敗した場合、転送管理者にメール通知が送信されます。
      • [Pub/Sub トピックを選択してください] で、トピック名を選択するか、[トピックを作成する] をクリックします。このオプションで、Pub/Sub の転送実行通知を構成します。
  5. [保存] をクリックします。

  6. 初めてアカウントにログインする場合は、アカウントを選択して [許可] をクリックします。コンテンツ所有者またはコンテンツ マネージャと同じアカウントを選択します。

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_id パラメータと table_suffix パラメータを指定する必要があります。必要に応じて、configure_jobs パラメータを true に設定して、BigQuery Data Transfer Service で 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 の転送に関する問題をご覧ください。