BigQuery へのデータの読み込みの概要

このページでは、BigQuery へのデータの読み込みの概要を説明します。

概要

データを読み込まずにクエリを実行できる場合も多くあります。それ以外の場合は、クエリを実行する前に、まずデータを BigQuery に読み込む必要があります。

データは次の方法で読み込むことができます。

現時点では、Google ドライブから BigQuery へのデータの読み込みはサポートされていませんが、外部テーブルを使用して Google ドライブ内のデータをクエリすることはできます。

新しいテーブルやパーティションへのデータの読み込み、既存のテーブルやパーティションへのデータの追加、また、テーブルやパーティションの上書きをすることができます。パーティションの操作の詳細については、分割テーブルの管理をご覧ください。

BigQuery にデータを読み込むとき、テーブルまたはパーティションのスキーマを指定できます。また、サポートされているデータ形式であれば、スキーマの自動検出を使用できます。

制限事項

BigQuery へのデータの読み込みには以下の制限が適用されます。

  • 現在 BigQuery には、ご使用のローカルマシンなどの読み取り可能なデータソースか Cloud Storage からのデータのみを読み込むことができます。

ソースデータの場所と形式によっては、追加の制限が適用される場合があります。詳細については、次をご覧ください。

サポートされているデータ形式

BigQuery では、Cloud Storage と読み取り可能なデータソースからデータを次の形式で読み込むことができます。

データを読み込む場合のデフォルトのソース形式は CSV です。サポートされているその他のデータ形式で保存されているデータを読み込む場合は、その形式を明示的に指定します。BigQuery に読み込まれたデータは Capacitor の列型(BigQuery のストレージ形式)に変換されます。

データ取り込み形式の選択

データは、さまざまな形式で BigQuery に読み込むことができます。BigQuery に読み込まれたデータは Capacitor の列型(BigQuery のストレージ形式)に変換されます。

データを読み込むときは、次の要因に基づいてデータ取り込み形式を選択します。

  • データのスキーマ

    Avro、CSV、JSON、ORC、Parquet ではフラットデータがサポートされています。Avro、JSON、ORC、Parquet、Cloud Datastore エクスポート、Cloud Firestore エクスポートでは、ネストされたフィールドや繰り返しフィールドを使用したデータもサポートされています。ネストされたデータと繰り返しデータは、階層データを表現する際に役立ちます。ネストされたフィールドと繰り返しフィールドを使用すると、データを非正規化する際の重複も削減されます。

  • 埋め込みの改行

    JSON ファイルからデータを読み込むときは、行を改行で区切る必要があります。BigQuery は、改行で区切られた JSON ファイルには 1 行に 1 つのレコードが含まれているものと想定します。

  • 外部制限

    JSON 形式でデータをネイティブに格納するドキュメント ストア データベースや、CSV 形式でのみエクスポートするソースからデータが取得されることがあります。

エンコードされたデータを読み込む

BigQuery は、ネストされたデータまたは繰り返しデータとフラットデータの両方について UTF-8 エンコーディングをサポートします。CSV ファイルの場合のみ、フラットデータについて ISO-8859-1 エンコーディングもサポートします。

文字エンコード

デフォルトでは、BigQuery サービスはすべてのソースデータが UTF-8 でエンコードされることを想定しています。CSV ファイルに ISO-8859-1 形式でエンコードされたデータが含まれる場合は、BigQuery がインポート処理中にデータを UTF-8 に正しく変換できるよう、データをインポートするときに明示的にエンコーディングを指定する必要があります。現時点では、ISO-8859-1 または UTF-8 でエンコードされたデータのみをインポートできます。データの文字エンコーディングを指定する際は、以下の点に留意してください。

  • エンコーディングを指定しない場合、またはデータが UTF-8 であることを明示的に指定した後で UTF-8 でエンコードされていない CSV ファイルを提供した場合、BigQuery は CSV ファイルを UTF-8 に変換しようとします。

    通常、データは正常にインポートされますが、バイト単位では期待どおりの結果が得られない場合があります。これを回避するには、正しいエンコーディングを指定して、再度インポートしてみてください。

  • 区切り文字は、ISO-8859-1 でエンコードする必要があります。

    通常は、タブ、パイプ、カンマなどの標準的な区切り文字を使用することをおすすめします。

  • BigQuery が文字を変換できない場合、その文字は標準の Unicode 置換文字 � に変換されます。
  • JSON ファイルは、常に UTF-8 でエンコードする必要があります。

ISO-8859-1 でエンコードされたフラットデータを API で読み込む場合は、load ジョブ構成で encoding プロパティを指定します。

圧縮データと非圧縮データを読み込む

Avro バイナリ形式は、圧縮データと非圧縮データの両方の読み込みに適しています。データブロックが圧縮されていても、Avro データは並行して読み取ることができるため、より高速に読み込みが行われます。圧縮 Avro ファイルはサポート対象外ですが、圧縮データブロックはサポートされています。BigQuery では、Avro ファイル内の圧縮データブロックに対して DEFLATE コーデックと Snappy コーデックがサポートされています。

Parquet の効率的な列単位のエンコーディングでは通常、圧縮率が高くなり、ファイルサイズが小さくなるため、Parquet バイナリ形式も適しています。Parquet ファイルは、ファイルの並列読み込みが可能な圧縮手法も使用します。圧縮 Parquet ファイルはサポート対象外ですが、圧縮データブロックはサポートされています。BigQuery では、Parquet ファイルの圧縮データブロックに対して Snappy コーデック、GZip コーデック、LZO_1X コーデックがサポートされています。

ORC バイナリ形式には、Parquet 形式に似た利点があります。データ ストライプを並列で読み取ることができるため、ORC ファイルのデータは高速で読み取ることができます。各データ ストライプの行が順番に読み込まれます。読み込み時間を短縮するには、データ ストライプのサイズを 256 MB 以下にします。圧縮 ORC ファイルはサポート対象外ですが、圧縮ファイルのフッターとストライプはサポートされています。BigQuery では、ORC ファイルのフッターとストライプに対して Zlib 圧縮、Snappy 圧縮、LZO 圧縮、LZ4 圧縮がサポートされています。

CSV や JSON などのデータ形式の場合、BigQuery では非圧縮ファイルを並列読み取りできるため、非圧縮ファイルを圧縮ファイルよりかなり速く読み込むことができます。ただし、非圧縮ファイルはサイズが大きいため、使用すると帯域幅の制限に達し、BigQuery に読み込まれる前に Cloud Storage にステージングされるデータのために Cloud Storage のコストが高くなる可能性があります。圧縮ファイルや非圧縮ファイルの場合、行の順序が保証されないことにもご注意ください。使用状況に応じて、どちらを重視するかを決定する必要があります。

一般に、帯域幅が限られている場合は、CSV ファイルや JSON ファイルを gzip で圧縮してから Cloud Storage にアップロードします。現在のところ、BigQuery にデータを読み込む CSV ファイルと JSON ファイルに対してサポートされているファイル圧縮形式は gzip のみです。読み込み速度が重要なアプリを使用していて、データの読み込みにかなりの帯域幅を使用できる場合は、ファイルを圧縮しないでおきます。

非正規化されたデータ、ネストされたデータ、繰り返しデータの読み込み

デベロッパーの多くは、リレーショナル データベースと正規化されたデータスキーマでの作業に慣れています。正規化では重複データの保存が排除され、データが定期的に更新される場合に一貫性が保たれます。

BigQuery のパフォーマンスは、データが非正規化されていると最も高くなります。スタースキーマやスノーフレーク スキーマなどのリレーショナル スキーマを維持するのではなく、データを非正規化して、ネストされたフィールドや繰り返しフィールドを利用すると、パフォーマンスが改善されます。ネストされたフィールドと繰り返しフィールドでリレーションシップを維持すれば、リレーショナル(正規化)スキーマを維持する場合のパフォーマンスへの影響を回避できます。

最新のシステムでは、正規化データによるストレージ節約はあまり問題とはなりません。ストレージ コストが増加しても、データ非正規化によるパフォーマンス向上には価値があります。結合にはデータ調整(通信帯域幅)が必要です。非正規化するとデータがローカライズされて個々のスロットに入れられるため、並行実行が可能です。

データを非正規化しながらリレーションシップを維持する必要がある場合は、データを完全に平坦化するのではなく、ネスト フィールドと繰り返しフィールドを使用します。リレーショナル データが完全に平坦化されると、ネットワーク通信(シャッフル)がクエリのパフォーマンスを下げる可能性があります。

たとえば、ネスト フィールドと繰り返しフィールドを使用せずに orders スキーマを非正規化するには、order_id などのフィールドによるグループ化が必要になる場合があります(1 対多の関係がある場合)。シャッフルが行われるため、ネスト フィールドと繰り返しフィールドを使ってデータを非正規化するよりも、データをグループ化する方がパフォーマンスが低くなります。

場合によっては、データを非正規化し、ネスト フィールドと繰り返しフィールドを使用してもパフォーマンスが向上するとは限りません。以下のような場合は、非正規化を避けてください。

  • 頻繁にディメンションが変化するスタースキーマがある場合。
  • BigQuery は行レベルでの変更があるオンライン トランザクション処理(OLTP)システムを補完しますが、それに置き換わることはできません。

ネストされたフィールドと繰り返しフィールドは、次のデータ形式でサポートされています。

  • Avro
  • JSON(改行区切り)
  • ORC
  • Parquet
  • Cloud Datastore エクスポート
  • Cloud Firestore エクスポート

データを読み込むとき、ネストされたフィールドと繰り返しフィールドをスキーマに指定する方法については、ネストされたフィールドと繰り返しフィールドの指定をご覧ください。

スキーマの自動検出

BigQuery にデータを読み込む場合や、外部データソースに対してクエリを実行する場合は、スキーマの自動検出を利用できます。

自動検出を有効にすると、BigQuery はデータソース内でランダムにファイルを選択します。ファイルの最大 100 行をスキャンして代表的なサンプルとして使用し、推定プロセスを開始します。BigQuery は、各フィールドを検証し、そのサンプル内の値に基づいてそのフィールドにデータ型を割り当てようとします。

スキーマの自動検出は、JSON ファイルや CSV ファイルを読み込むときに使用できます。Avro ファイル、ORC ファイル、Parquet ファイル、Cloud Datastore エクスポート、Cloud Firestore エクスポートには、スキーマの自動検出を利用できません。これらの形式では、スキーマ情報が自己記述されるためです。

他の Google サービスからのデータの読み込み

BigQuery Data Transfer Service

BigQuery Data Transfer Service は、次のサービスから自動的に BigQuery にデータを読み込みます。

データ転送を構成すると、BigQuery Data Transfer Service がソース アプリケーションから BigQuery への定期的なデータ読み込みを自動的にスケジュールして管理します。

Google アナリティクス 360

Google アナリティクス 360 のレポートビューから BigQuery にセッション データとヒットデータをエクスポートする方法については、Google アナリティクス ヘルプセンターで BigQuery エクスポートをご覧ください。

BigQuery で Google アナリティクスのデータをクエリする例は、Google アナリティクス ヘルプの BigQuery クックブックをご覧ください。

Cloud Storage

BigQuery は、Cloud Storage からのデータの読み込みをサポートしています。詳細については、Cloud Storage からのデータの読み込みをご覧ください。

Cloud Datastore

BigQuery は、Cloud Datastore エクスポートからのデータの読み込みをサポートしています。詳細については、Cloud Datastore エクスポートからのデータの読み込みをご覧ください。

Cloud Firestore

BigQuery は、Cloud Firestore エクスポートからのデータの読み込みをサポートしています。詳細については、Cloud Firestore エクスポートからのデータの読み込みをご覧ください。

Google Cloud Dataflow

Cloud Dataflow から BigQuery に直接データを読み込むことができます。Cloud Dataflow を使用して BigQuery に対してデータの読み取りと書き込みを行う方法の詳細については、Apache Beam ドキュメントの BigQuery I/O をご覧ください。

データ読み込みに代わる方法

次のような状況でクエリを実行する場合は、データを読み込む必要はありません。

一般公開データセット
一般公開データセットとは、BigQuery に保存されて、一般公開されるデータセットです。詳細については、一般公開データセットをご覧ください。
共有データセット
BigQuery に格納したデータセットは共有できます。別のユーザーのデータセットを共有している場合は、そのデータを読み込まなくても、データセットに対してクエリを実行できます。
外部データソース
外部データソースに基づいてテーブルを作成することによって、データ読み込み処理をスキップすることができます。この方式の利点と制限については、外部データソースをご覧ください。
Stackdriver ログファイル
Stackdriver Logging には、ログファイルを BigQuery にエクスポートするオプションがあります。詳細については、ログビューアによるエクスポートをご覧ください。

データ読み込みに代わるその他の方法として、1 レコードずつデータをストリーミングする方法があります。通常、データをすぐ利用可能にしたい場合にストリーミングを使用します。ストリーミングの詳細については、BigQuery へのデータのストリーミングをご覧ください。

割り当てポリシー

データ読み込みの割り当てポリシーについては、割り当てと制限のページの読み込みジョブをご覧ください。

料金

現在、BigQuery にデータを読み込むための料金はかかりません。詳細については、料金のページをご覧ください。

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。