このドキュメントでは、BigQuery でテーブルデータを管理する方法について説明します。BigQuery テーブルデータは、次の方法で操作できます。
- テーブルにデータを読み込む
- テーブルデータを参照(またはプレビュー)する
- テーブルデータをクエリする
- テーブルデータを追加または上書きする
- データ操作言語を使用してテーブルデータを変更する
- テーブルデータをコピーする
- テーブルデータをエクスポートする
テーブル スキーマの管理については、テーブル スキーマの変更をご覧ください。
テーブルへのデータの読み込み
テーブルを作成するときにデータを読み込むことも、空のテーブルを作成して、後でデータを読み込むこともできます。データを読み込む際は、サポートされているデータ形式であればスキーマの自動検出を使用できますが、スキーマを指定することもできます。
データの読み込みの詳細については、ソースデータの形式とロケーションに関するドキュメントをご覧ください。
Cloud Storage からのデータの読み込みの詳細については、以下を参照してください。
ローカルソースからのデータの読み込みの詳細については、ローカル ファイルからのデータの読み込みをご覧ください。
テーブルデータの閲覧
次の方法でテーブルデータを閲覧できます。
- Cloud Console を使用する
bq
コマンドライン ツールのbq head
コマンドを使用するtabledata.list
API メソッドを呼び出す- クライアント ライブラリを使用する
必要な権限
テーブルとパーティションのデータを閲覧するには、少なくとも bigquery.tables.getData
権限が付与されている必要があります。次の事前定義済みの IAM ロールには bigquery.tables.getData
権限が含まれています。
bigquery.dataViewer
bigquery.dataEditor
bigquery.dataOwner
bigquery.admin
また、bigquery.datasets.create
権限を持つユーザーがデータセットを作成すると、そのデータセットに対する bigquery.dataOwner
アクセス権がユーザーに付与されます。bigquery.dataOwner
アクセス権により、ユーザーはデータセットに含まれるテーブルとパーティションのデータを閲覧できます。
BigQuery での IAM のロールと権限について詳しくは、事前定義ロールと権限をご覧ください。
テーブルデータの閲覧
テーブルデータを閲覧するには:
Console
Cloud Console で [BigQuery] ページを開きます。
ナビゲーション パネルの [リソース] セクションでプロジェクトを展開し、データセットを選択します。これにより、データセット内のテーブルとビューが表示されます。
リスト内のテーブルを 1 つクリックします。
[詳細] をクリックし、[行数] の値を書き留めます。
bq
コマンドライン ツールまたは API を使用して結果の開始点を制御するために、この値が必要になる場合があります。[Preview] をクリックします。データのサンプルセットが表示されます。
コマンドライン
--max_rows
フラグを指定して bq head
コマンドを発行すると、特定の数のテーブル行のすべての列が一覧表示されます。--max_rows
が指定されていない場合、デフォルトは 100 です。
テーブル内の列のサブセット(ネストした列と繰り返し列を含む)を閲覧するには、--selected_fields
フラグを使用して、列の値をカンマ区切りのリストとして入力します。
テーブルデータを表示する前にスキップする行数を指定するには、--start_row=integer
フラグ(または -s
ショートカット)を使用します。デフォルト値は 0
です。テーブルの行数を取得するには、bq show
コマンドを使用してテーブル情報を取得します。
閲覧しているテーブルがデフォルトのプロジェクト以外のプロジェクトにある場合は、project_id:dataset.table
の形式でプロジェクト ID をコマンドに追加します。
bq head \ --max_rows integer1 \ --start_row integer2 \ --selected_fields "columns" \ project_id:dataset.table
ここで
- integer1 は、表示する行数です。
- integer2 は、データを表示する前にスキップする行数です。
- columns は、列のカンマ区切りのリストです。
- project_id は、プロジェクト ID です。
- dataset は、テーブルを含むデータセットの名前です。
- table は、閲覧するテーブルの名前です。
例:
mydataset.mytable
の最初の 10 行の列をすべて表示するには、次のコマンドを入力します。mydataset
はデフォルト プロジェクトにあります。
bq head --max_rows=10 mydataset.mytable
mydataset.mytable
の最初の 100 行の列をすべて表示するには、次のコマンドを入力します。mydataset
はデフォルト プロジェクトではなく myotherproject
にあります。
bq head myotherproject:mydataset.mytable
mydataset.mytable
内の field1
と field2
のみを表示するには、次のコマンドを入力します。このコマンドでは --start_row
フラグを使用して 100 行目にスキップしています。mydataset.mytable
はデフォルト プロジェクトにあります。
bq head --start_row 100 --selected_fields "field1,field2" mydataset.mytable
bq head
コマンドはクエリジョブを作成しないため、クエリ履歴には bq head
コマンドは示されません。また、このコマンドに対して料金は発生しません。
API
tabledata.list
を呼び出して、テーブルのデータを閲覧します。tableId
パラメータでテーブルの名前を指定します。
次のオプション パラメータを構成して出力を制御します。
maxResults
- 返される結果の最大数。selectedFields
- 返される列のカンマ区切りのリスト(指定しなかった場合、すべての列が返されます)startIndex
- 読み取りを開始する行を指し示す、ゼロから始まるインデックス。
値は 1 つの JSON オブジェクトにラップされて返されます。このオブジェクトは、tabledata.list
リファレンス ドキュメントに記載されている手順に従って解析する必要があります。
C#
このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の C# の設定手順を実施してください。詳細については、BigQuery C# API のリファレンス ドキュメントをご覧ください。
Go
このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の Go の手順に従って設定を行ってください。詳細については、BigQuery Go API のリファレンス ドキュメントをご覧ください。
Go 用の Cloud クライアント ライブラリでは、デフォルトで自動的にページ分けされるため、ページ分けを自分で実装する必要はありません。次に例を示します。
Java
このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の Java の設定手順を実施してください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。
Node.js
このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の Node.js の設定手順を実施してください。詳細については、BigQuery Node.js API のリファレンス ドキュメントをご覧ください。
Node.js 用の Cloud クライアント ライブラリでは、デフォルトで自動的にページ分けされるため、ページ分けを自分で実装する必要はありません。次に例を示します。
PHP
このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用にある PHP 向けの手順に従って設定を行ってください。詳細については、BigQuery PHP API のリファレンス ドキュメントをご覧ください。
PHP 用の Cloud クライアント ライブラリでジェネレータ関数 rows
を使用すると、ページ分割が自動的に行われます。この関数はイテレーション中に結果の次のページをフェッチします。
Python
このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の Python の手順に従って設定を行ってください。詳細については、BigQuery Python API のリファレンス ドキュメントをご覧ください。
Ruby
このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用で説明している Ruby 向けの手順に沿って設定を行ってください。詳細については、BigQuery Ruby API のリファレンス ドキュメントをご覧ください。
Ruby 用 Cloud クライアント ライブラリで Table#data
と Data#next
を使用すると、ページ分割が自動的に行われます。
テーブルデータのクエリ
BigQuery にデータを読み込んだ後に、テーブル内のデータをクエリできます。BigQuery は次の 2 種類のクエリをサポートします。
デフォルトで、BigQuery はインタラクティブ クエリを実行します。つまり、クエリはすぐに実行されます。
BigQuery ではバッチクエリも提供されています。BigQuery はユーザーに代わって各バッチクエリをキューに格納し、アイドル状態のリソースが使用可能になると直ちに(通常は数分以内に)クエリを開始します。
以下を使用して、インタラクティブ クエリとバッチクエリを実行できます。
- Cloud Console の [クエリを新規作成] オプション
bq
コマンドライン ツールのbq query
コマンド- プログラムによって jobs.query メソッドまたはクエリ形式の jobs.insert メソッドを呼び出す BigQuery REST API
- BigQuery クライアント ライブラリ
BigQuery テーブルのクエリの詳細については、BigQuery データのクエリの概要をご覧ください。
BigQuery テーブルに格納されたデータをクエリするだけでなく、外部に保存されたデータをクエリすることもできます。詳細については、外部データソースへのクエリの実行をご覧ください。
テーブルデータの追加と上書き
読み込みまたはクエリ オペレーションを使用してテーブルデータを上書きできます。既存のテーブルにデータを追加するには、読み込み追加オペレーションを実行するか、クエリ結果をテーブルに追加します。
データの読み込み時にテーブルに追加するか、上書きする方法の詳細については、ソースデータ形式のドキュメントを参照してください。
- Avro データでテーブルに追加または上書きする
- CSV データをテーブルに追加、または CSV データでテーブルを上書きする
- JSON データをテーブルに追加または上書きする
- Parquet データでテーブルに追加または上書きする
- ORC データをテーブルに追加または上書きする
- Datastore データをテーブルに追加または上書きする
クエリ結果を使用して、テーブルに追加または上書きするには、宛先のテーブルを指定し、次のいずれかに書込み処理を設定します。
- Append to table - クエリ結果を既存のテーブルに追加します。
- Overwrite table - クエリ結果を既存のテーブルに同じ名前で上書きします。
クエリ結果を使用してデータを追加または上書きする方法の詳細については、クエリ結果の書き込みをご覧ください。
テーブルデータの変更
標準 SQL 言語を使用すると、DML ステートメントを使用してテーブル内のデータを変更できます。DML ステートメントを使用すると、行の一括更新、挿入、削除を実行できます。DML の使用例については、データ操作言語を使用したテーブルデータの更新をご覧ください。
レガシー SQL は DML ステートメントをサポートしていません。レガシー SQL を使用してデータを更新または削除するには、テーブルを削除してから、新しいデータでテーブルを再作成する必要があります。または、データを変更し、クエリ結果を新しい宛先テーブルに書き込むクエリを記述することもできます。
テーブルデータのコピー
次の方法でテーブルをコピーできます。
- Cloud Console を使用する
bq
コマンドライン ツールのbq cp
コマンドを使用する- jobs.insert API メソッドを呼び出して copy ジョブを構成する
- クライアント ライブラリを使用する
テーブルのコピーの詳細については、テーブルのコピーをご覧ください。
テーブルデータのエクスポート
テーブルデータは、CSV、JSON、Avro 形式でエクスポートできます。現在、データを Cloud Storage バケットにエクスポートする必要があります。ローカルマシンへのエクスポートはサポートされていません。ただし、Cloud Console を使用してクエリ結果をダウンロードして保存できます。
詳細については、テーブルデータのエクスポートをご覧ください。
次のステップ
- データの読み込みの詳細については、データの読み込みの概要をご覧ください。
- データのクエリの詳細については、BigQuery データのクエリの概要をご覧ください。
- テーブル スキーマの変更の詳細については、テーブル スキーマの変更をご覧ください。
- テーブルの作成と使用の詳細については、テーブルの作成と使用をご覧ください。
- テーブルの管理の詳細については、テーブルの管理をご覧ください。