データの読み込みの概要
本ドキュメントでは、BigQuery へのデータの読み込みの概要を説明します。
概要
BigQuery にデータを取り込むには以下のいくつかの方法があります。
- データレコードのセットを一括で読み込む。
- 個別のレコードまたはレコードのバッチをストリーミングする。
- クエリを使用して新しいデータを生成し、結果をテーブルに追加または上書きする。
- サードパーティのアプリケーションやサービスを使用する。
バッチ読み込み
バッチ読み込みでは、単一のバッチ オペレーションでソースデータを BigQuery テーブルに読み込みます。たとえば、データソースとして CSV ファイル、外部データベース、ログファイルのセットなどを使用できます。従来の抽出、変換、読み込み(ETL)ジョブはこのカテゴリに分類されます。
BigQuery の一括読み込みのオプションは次のとおりです。
- 読み込みジョブ。読み込みジョブを作成して、Cloud Storage またはローカル ファイルからデータを読み込みます。レコードは、Avro、CSV、JSON、ORC、Parquet 形式のいずれかになります。
- SQL。
LOAD DATA
SQL ステートメントは、1 つ以上のファイルからデータを新規または既存のテーブルに読み込みます。LOAD DATA
ステートメントを使用して、Avro、CSV、JSON、ORC、Parquet ファイルを読み込むことができます。 - BigQuery Data Transfer Service。BigQuery Data Transfer Service を使用して、Google の Software as a Service(SaaS)アプリまたはサードパーティのアプリケーションやサービスからのデータの読み込みを自動化します。
- BigQuery Storage Write API。Storage Write API を使用すると、多数のレコードをバッチ処理して、1 回のアトミック操作で commit できます。commit オペレーションが失敗した場合、オペレーションを安全に再試行できます。BigQuery の読み込みジョブとは異なり、Storage Write API では、Cloud Storage などの中間ストレージにデータをステージングする必要はありません。
- その他のマネージド サービス。他のマネージド サービスを使用して、外部データストアからデータをエクスポートし、BigQuery にインポートします。たとえば、Firestore エクスポートなどからデータを読み込めます。
バッチ読み込みの方法を選択する場合、ほとんどのファイルベースのパターンでは、データの読み込みジョブまたは LOAD DATA
SQL ステートメントを使用してデータを一括読み込む必要があります。他のサービスでは通常、BigQuery Data Transfer Service を使用するか、Google サービスからデータをエクスポートします。
一括読み込みは、一回限りまたは定期的なスケジュールで行えます。たとえば、次の操作が可能です。
- BigQuery Data Transfer Service の転送はスケジュールに基づいて実行できます。
- Cloud Composer などのオーケストレーション サービスを使用して、読み込みジョブをスケジュールできます。
- cron ジョブを使用して、スケジュールに従ってデータを読み込めます。
ストリーミング
ストリーミングでは、より小さいバッチデータがリアルタイムで継続的に送信されるため、データの到着時にそのデータに対するクエリを実行できます。BigQuery のストリーミングには次のオプションがあります。
- Storage Write API。Storage Write API では、1 回限りの配信セマンティクスを持つ、高スループットのストリーミング取り込みがサポートされています。
- Dataflow。Dataflow を Apache Beam SDK で使用して、BigQuery に書き込むストリーミング パイプラインを設定します。詳細については、Apache Beam ドキュメントの BigQuery I/O コネクタ と Pub/Sub から BigQuery へのストリーム チュートリアルをご覧ください。
- DatastreamDatastream は、BigQuery の変更データ キャプチャ機能と Storage Write API を使用して、オペレーショナル データベースからデータとスキーマの更新を BigQuery に直接複製します。このクイックスタートでは、Cloud SQL for PostgreSQL データベースから BigQuery へのレプリケーションの例を示します。
- SAP 向け BigQuery コネクタ。 SAP 向け BigQuery コネクタを使用すると、SAP データを BigQuery にほぼリアルタイムで直接複製できます。詳しくは、SAP 向け BigQuery コネクタの プランニング ガイドをご覧ください。
- Pub/SubPub/Sub は、ストリーミング分析とデータ統合パイプラインの調整に使用できるメッセージング サービスです。BigQuery サブスクリプションを使用して、既存の BigQuery テーブルに直接メッセージを書き込むことができます。
生成されたデータ
SQL を使用してデータを生成し、結果を BigQuery に保存できます。データの生成には次のオプションがあります。
データ操作言語(DML)ステートメントを使用する。既存のテーブルへの一括挿入や、新しいテーブルへのクエリ結果の保存を行うことができます。
CREATE TABLE ... AS
ステートメントを使用して、クエリ結果から新しいテーブルを作成する。クエリを実行し、結果をテーブルに保存する。既存のテーブルへの結果の追加や、新しいテーブルへの書き込みを行うことができます。詳細については、クエリ結果の書き込みをご覧ください。
サードパーティ アプリケーション
一部のサードパーティ アプリケーションやサービスでは、データを BigQuery に取り込むためのコネクタが提供されています。取り込みパイプラインを構成および管理する方法の詳細は、アプリケーションによって異なります。 たとえば、外部ソースから BigQuery のストレージにデータを読み込むには、Informatica Data Loader または Fivetran Data Pipelines を使用します。詳細については、サードパーティ アプリケーションを使用してデータを読み込むをご覧ください。
データの取り込み方法の選択
データの取り込み方法を選択する際は、次の点を考慮してください。
データソース。データのソースやデータ形式から、一括読み込みとストリーミングのどちらが簡単に実装、維持できるかを判断できます。以下の点について検討してください。
BigQuery Data Transfer Service がデータソースをサポートしている場合は、BigQuery に直接データを転送することが最も簡単に実装できるソリューションである場合があります。
データが Spark または Hadoop にある場合は、BigQuery コネクタを使用してデータの取り込みを簡易化することを検討してください。
ローカル ファイルの場合、特に BigQuery が変換やデータ クレンジングを必要としないファイル形式をサポートしている場合は、一括読み込みを検討してください。
アプリケーション イベントやログストリームなどのアプリケーション データの場合、一括読み込みを実装するよりも、データをリアルタイムでストリーミングする方が簡単な場合があります。
変化の少ないデータか、多いデータか。ほぼリアルタイムでデータを取り込んで分析する必要がある場合は、データのストリーミングを検討してください。ストリーミングでは、レコードが受信された後すぐにデータをクエリできます。個別の行の更新や挿入を大量に送信するために DML ステートメントを使用しないでください。頻繁に更新されるデータの場合は、変更ログをストリーミングして、ビューを使用して最新の結果を取得するほうが良い場合があります。また、オンライン トランザクション処理(OLTP)データベースとして Cloud SQL を使用し、連携クエリを使用して BigQuery のデータを結合することもできます。
ソースデータの変更が少ない場合や、継続的に更新される結果を必要としない場合は、読み込みジョブの使用を検討してください。たとえば、データを使用して日単位または時間単位のレポートを実行する場合、読み込みジョブを使用することで、費用や消費されるシステム リソースを抑えることができる可能性があります。
また、受信頻度が低いデータやイベントに応じたデータもあります。その場合、Dataflow を使用してデータをストリーミングするか、Cloud Functions を使用してトリガーに応じてストリーミング API を呼び出すことを検討してください。
ソリューションの信頼性。BigQuery にはサービスレベル契約(SLA)がありますが、実装する特定のソリューションの信頼性も考慮する必要があります。以下の点について検討してください。
- JSON や CSV などの大まかな型のフォーマットを使用すると、不良なデータによって読み込みジョブ全体が失敗する可能性があります。読み込み前にデータのクレンジングが必要かどうかを検討し、エラーの応答方法を検討します。また、Avro、ORC、Parquet などの厳密な型のフォーマットの使用を検討してください。
- 定期的な読み込みジョブを行うには、Cloud Composer や cron など、別のツールを使用してスケジュールを設定する必要があります。スケジューリング コンポーネントは、ソリューションにおける失敗点になる可能性があります。
- ストリーミングの場合、各レコードの成功を確認し、エラーをすばやく報告できます。後で分析と処理を行うために、処理されなかったメッセージを未処理のメッセージ キューに書き込むことを検討してください。BigQuery ストリーミング エラーの詳細については、ストリーミング挿入に関するトラブルシューティングをご覧ください。
- ストリーミング ジョブと読み込みジョブは割り当ての対象です。割り当てエラーを処理する方法については、BigQuery 割り当てエラーのトラブルシューティングをご覧ください。
- サードパーティ ソリューションは構成の柔軟性、信頼性、順序付けの保証などの要因によって異なる場合があるため、ソリューションを採用する前に以下を検討してください。
レイテンシ。読み込むデータの量と、データが利用可能になるまでの時間について検討してください。ストリーミングの場合、データを分析に利用できるようになるまでのレイテンシを最も低く抑えられます。定期的な読み込みジョブの場合、それぞれの読み込みジョブが完了してから新しいデータを利用できるようになるため、レイテンシが高くなります。
読み込みジョブではデフォルトでスロットの共有プールが使用されます。読み込みジョブでは、スロットが利用可能な状態になるまで保留状態で待機することがあります。特に大量のデータを読み込む場合は、保留状態になる可能性があります。この保留時間が許容できない場合は、共有スロットプールではなく専用のスロットを購入してください。詳細については、予約の概要をご覧ください。
外部データソースに対するクエリ パフォーマンスは、BigQuery に格納されているデータに対するクエリ パフォーマンスよりも低くなる場合があります。クエリのレイテンシを最小限に抑えることが重要な場合は、データを BigQuery に読み込むことをおすすめします。
データの取り込み形式。データの取り込み形式を以下の要素に基づいて選択します。
スキーマのサポート。Avro、ORC、Parquet、Firestore エクスポートは自己記述型です。BigQuery は、ソースデータに基づいてテーブル スキーマを自動的に作成します。JSON データと CSV データには、明示的なスキーマを指定するか、スキーマ自動検出を使用できます。
フラットデータ、またはネストされた繰り返しフィールド。 Avro、CSV、JSON、ORC、Parquet ではフラットデータがサポートされています。Avro、JSON、ORC、Parquet、Firestore エクスポートでは、ネストされたフィールドや繰り返しフィールドを使用したデータもサポートされます。ネストされたデータや繰り返しデータは、階層データの表現に役立ちます。ネストされたフィールドと繰り返しフィールドを使用すると、データの読み込み時にデータの重複も削減されます。
埋め込みの改行。JSON ファイルからデータを読み込むときは、行を改行で区切る必要があります。BigQuery は、改行で区切られた JSON ファイルには 1 行に 1 つのレコードが含まれているものと想定します。
エンコード。BigQuery は、ネストされたデータまたは繰り返しデータとフラットデータの両方について UTF-8 エンコードをサポートします。CSV ファイルの場合のみ、フラットデータについて ISO-8859-1 エンコードもサポートします。
ネストされたデータと繰り返しデータの読み込み
ネストされたデータ フィールドと繰り返しフィールドに、次のデータ形式でデータを読み込むことができます。
- Avro
- JSON(改行区切り)
- ORC
- Parquet
- Datastore エクスポート
- Firestore エクスポート
データを読み込むとき、ネストされたフィールドと繰り返しフィールドをスキーマに指定する方法については、ネストされたフィールドと繰り返しフィールドの指定をご覧ください。
他の Google サービスからのデータの読み込み
一部の Google サービスは、スケジュールされたクエリ、エクスポート、転送を使用して BigQuery にデータをエクスポートします。BigQuery へのエクスポートをサポートするサービスの詳細については、Google サービスからのデータの読み込みをご覧ください。
その他の Google サービスでは、BigQuery Data Transfer Service から開始されるデータ エクスポートがサポートされています。BigQuery Data Transfer Service が開始するエクスポートをサポートするサービスの詳細については、BigQuery Data Transfer Service をご覧ください。
データ読み込みに代わる方法
次のような状況でクエリを実行する場合は、データを読み込む必要はありません。
- 公開データセット
- 一般公開データセットとは、BigQuery に保存されて、一般公開されるデータセットです。詳細については、BigQuery 一般公開データセットをご覧ください。
- 共有データセット
- BigQuery に格納したデータセットは共有できます。別のユーザーのデータセットを共有している場合は、そのデータを読み込まなくても、データセットに対してクエリを実行できます。
- 外部データソース
- BigQuery では、データを BigQuery ストレージに読み込むことなく、特定の形式の外部データに対してクエリを実行できます。このアプローチでは、別の場所に保存されているデータを移動することなく、BigQuery の分析機能を活用できます。この方式の利点と制限については、外部データソースをご覧ください。
- ファイルのロギング
- Cloud Logging には、ログファイルを BigQuery にエクスポートするオプションがあります。詳しくは、シンクを構成、管理するをご覧ください。
次のステップ
Cloud Storage から BigQuery にデータを読み込む方法については、以下のデータ形式のドキュメントをご覧ください。
ローカル ファイルからデータを読み込む方法について詳しくは、ローカル ファイルからのデータの読み込みをご覧ください。
データのストリーミングの詳細については、BigQuery へのデータのストリーミングをご覧ください。
BigQuery を Databricks に接続する方法については、Databricks と BigQuery の接続をご覧ください。