データの読み込みの概要

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

概要

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

BigQuery にデータを読み込むには、次の方法があります。

  • Cloud Storage またはローカル ファイルからデータレコードのセットを一括で読み込む。レコードは、Avro、CSV、JSON(改行区切りのみ)、ORC、または Parquet 形式にすることができます。
  • Datastore または Firestore からデータをエクスポートし、エクスポートしたデータを BigQuery に読み込む。
  • Google アド マネージャーや Google 広告などの他の Google サービスからデータを読み込む。
  • ストリーミング挿入を使用して、一度に 1 レコードずつデータをストリーミングする。
  • Dataflow パイプラインから BigQuery にデータを書き込む。
  • DML ステートメントを使用して一括挿入を行う。BigQuery では DML クエリに対して課金されます。データ操作言語の料金をご覧ください。

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

新しいテーブルまたはパーティションへのデータの読み込み、既存のテーブルまたはパーティションへのデータの追加、テーブルまたはパーティションの上書きを行うことができます。パーティションの操作の詳細については、パーティション分割テーブルの管理をご覧ください。BigQuery に読み込まれたデータは Capacitor の列型(BigQuery のストレージ形式)に変換されます。

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

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

  • スキーマのサポート

    Avro、ORC、Parquet、Datastore エクスポート、Firestore エクスポートは自己記述型です。BigQuery は、ソースデータに基づいてテーブル スキーマを自動的に作成します。JSON データと CSV データには、明示的なスキーマを指定するか、スキーマ自動検出を使用できます。

  • フラットデータ、またはネストされた繰り返しフィールド。

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

  • 埋め込みの改行

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

  • エンコード。

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

  • 外部制限

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

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

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

BigQuery は非正規化データに最適です。スタースキーマやスノーフレーク スキーマなどのリレーショナル スキーマを維持するのではなく、データを非正規化して、ネストされたフィールドや繰り返しフィールドを利用すると、パフォーマンスが向上します。ネスト フィールドと繰り返しフィールドは、リレーショナル(正規化)スキーマの維持る影響をパフォーマンスに及ぼすことなく、リレーションシップを維持できます。

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

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

たとえば、ネスト フィールドや反復フィールドを使用せずにオーダー スキーマを非正規化する際、order_id などのフィールドでデータをグループ化しなければならない場合があります(1 対多の関係がある場合)。シャッフルが必要になると、ネスト フィールドと繰り返しフィールドを使ってデータを非正規化した場合と比較して、データのグループ化はパフォーマンスが低くなります。

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

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

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

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

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

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

BigQuery Data Transfer Service

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

Google Software as a Service(SaaS)アプリケーション 外部クラウド ストレージ プロバイダ データ ウェアハウス また、Google Cloud Marketplace では、いくつかのサードパーティ転送を利用できます。

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

Google アナリティクス 360

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

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

Dataflow

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

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

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

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

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

次のステップ