YouTube チャンネルのデータを BigQuery に読み込む

YouTube チャンネル用 BigQuery Data Transfer Service コネクタを使用して、YouTube チャンネルから BigQuery にデータを読み込むことができます。BigQuery Data Transfer Service を使用すると、YouTube チャンネルから BigQuery に最新のデータを追加する定期的な転送ジョブのスケジュールを設定できます。

対応しているレポート

BigQuery Data Transfer Service for YouTube チャンネル レポートでは現在、次のレポート オプションがサポートされています。

レポート オプション サポート
サポート対象の API バージョン 2018 年 6 月 18 日
繰り返しの頻度

毎日、14:10 頃(UTC)

時刻を設定できます。

更新ウィンドウ

過去 1 日

構成不可

最大バックフィル期間

30 日

2018 年 7 月現在、履歴データを含む YouTube レポートは、生成後 30 日間利用できます(履歴データ以外のデータを含むレポートは、60 日間利用できます)。詳細については、YouTube Reporting API ドキュメントの履歴データをご覧ください。

YouTube チャンネル レポートがどのように BigQuery テーブルとビューに変換されるかの詳細については、YouTube チャンネル レポートの変換をご覧ください。

YouTube チャンネル転送によるデータ取り込み

YouTube チャンネルから BigQuery にデータを転送すると、データは日付でパーティション分割された BigQuery テーブルに読み込まれます。データが読み込まれるテーブル パーティションは、データソースの日付に対応します。同じ日付の複数の転送をスケジュールすると、BigQuery Data Transfer Service により、対象の日付のパーティションが最新のデータで上書きされます。同じ日に複数回の転送やバックフィルを実行しても、データは重複せず、他の日付のパーティションに対する影響はありません。

更新ウィンドウ

更新ウィンドウとは、データ転送が行われたときにデータ転送でデータが取得される日数です。たとえば、更新ウィンドウが 3 日であり、毎日転送が行われる場合、BigQuery Data Transfer Service は過去 3 日間のソーステーブルからすべてのデータを取得します。この例では、毎日転送が発生すると、BigQuery Data Transfer Service は、当日のソーステーブルのデータのコピーを含む新しい BigQuery 宛先テーブル パーティションを作成し、バックフィル実行を自動的にトリガーして、過去 2 日間のソーステーブルのデータで BigQuery 宛先テーブル パーティションを更新します。自動トリガーされたバックフィル実行は、BigQuery Data Transfer Service コネクタで増分更新がサポートされているかどうかに応じて、BigQuery の宛先テーブルを上書きするか、増分更新します。

データ転送を初めて実行する際に、更新ウィンドウ内で利用可能なすべてのソースデータを取得します。たとえば、更新ウィンドウが 3 日で、データ転送を初めて実行する際は、BigQuery Data Transfer Service によって 3 日以内のすべてのソースデータが取得されます。

更新ウィンドウは TransferConfig.data_refresh_window_days API フィールドにマッピングされます。

更新ウィンドウの期間外のデータ(過去のデータなど)を取得する場合や、転送の停止やギャップからデータを復元する場合は、バックフィル実行を開始またはスケジュールできます。

制限事項

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

始める前に

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 Data Transfer Service の実行通知をご覧ください。

IAM 事前定義ロール bigquery.admin には、YouTube チャンネル データ転送を作成するために必要なすべての BigQuery の権限が含まれています。BigQuery での IAM のロールの詳細については、事前定義ロールと権限をご覧ください。

YouTube チャンネル転送を設定する

YouTube チャンネル データ転送を設定するには以下が必要です。

  • テーブル サフィックス: データ転送を設定するときにユーザーが指定するユーザー フレンドリーなチャンネル名です。サフィックスがジョブ ID に追加され、テーブル名が作成されます(例: reportTypeId_suffix)。このサフィックスは、別の転送によって同じテーブルへの書き込みが行われないようにするために使用されます。テーブル サフィックスは、同じデータセットにデータを読み込むすべての転送で一意にする必要があり、また、生成されるテーブル名の長さを抑えるために短くする必要があります。

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

YouTube チャンネル データ転送を作成するには:

コンソール

  1. Trusted Cloud コンソールの [データ転送] ページに移動します。

    [データ転送] に移動

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

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

    • [ソースタイプ] セクションの [ソース] で、[YouTube チャンネル] を選択します。

      転送のソース

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

      転送名

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

      • [繰り返しの頻度] で、データ転送を実行する頻度のオプションを選択します。[日数] を選択した場合は、有効な時刻を UTC で入力します。
      • 必要に応じて、[すぐに開始] を選択するか、[設定した時刻に開始] を選択して開始日と実行時間を指定します。
    • [転送先の設定] セクションの [宛先データセット] で、データを保存するために作成したデータセットを選択します。

      転送データセット

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

      • [テーブル サフィックス] に、サフィックス(例: MT)を入力します。
      • BigQuery に YouTube レポート作成ジョブの管理を許可するには、[ジョブを構成する] チェックボックスをオンにします。まだアカウントに存在しない YouTube レポートがある場合は、新しいレポート作成ジョブが作成されて対象のレポートが有効になります。

      YouTube チャンネル ソースの詳細

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

      • 切り替えボタンをクリックしてメール通知を有効にします。このオプションを有効にすると、転送の実行が失敗した場合、転送管理者にメール通知が送信されます。
      • [Pub/Sub トピックを選択] で、トピック名を選択するか、[トピックを作成する] をクリックします。このオプションで、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 Data Transfer Service に 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 に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。

コードサンプルを実行する前に、GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境変数を s3nsapis.fr に設定します。

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 の転送に関する問題をご覧ください。