テーブルデータの管理
このドキュメントでは、BigQuery でテーブルデータを管理する方法について説明します。BigQuery テーブルデータは、次の方法で操作できます。
- テーブルにデータを読み込む
- テーブルデータを追加または上書きする
- テーブルデータを参照(またはプレビュー)する
- テーブルデータをクエリする
- データ操作言語(DML)を使用してテーブルデータを変更する
- テーブルデータをコピーする
- テーブルデータをエクスポートする
テーブル スキーマの管理については、テーブル スキーマの変更をご覧ください。
始める前に
このドキュメントの各タスクを実行する必要があるユーザーに必要な権限を付与するロールを付与します。タスクの実行に必要な権限(存在する場合)は、タスクの [必要な権限] セクションに表示されます。
テーブルへのデータの読み込み
テーブルを作成するときにデータを読み込むことも、空のテーブルを作成して、後でデータを読み込むこともできます。データを読み込む際は、サポートされているデータ形式であればスキーマの自動検出を使用できますが、スキーマを指定することもできます。
データの読み込みの詳細については、ソースデータの形式とロケーションに関するドキュメントをご覧ください。
Cloud Storage からのデータの読み込みの詳細については、以下を参照してください。
ローカルソースからのデータの読み込みの詳細については、ローカル ファイルからのデータの読み込みをご覧ください。
テーブルデータの追加と上書き
読み込みまたはクエリ オペレーションを使用してテーブルデータを上書きできます。既存のテーブルにデータを追加するには、読み込み追加オペレーションを実行するか、クエリ結果をテーブルに追加します。
データの読み込み時にテーブルに追加するか、上書きする方法の詳細については、ソースデータ形式のドキュメントを参照してください。
- Avro データでテーブルに追加または上書きする
- CSV データをテーブルに追加、または CSV データでテーブルを上書きする
- JSON データをテーブルに追加または上書きする
- Parquet データでテーブルに追加または上書きする
- ORC データをテーブルに追加または上書きする
- Datastore データをテーブルに追加または上書きする
クエリ結果を使用して、テーブルに追加または上書きするには、宛先のテーブルを指定し、次のいずれかに書込み処理を設定します。
- Append to table - クエリ結果を既存のテーブルに追加します。
- Overwrite table - クエリ結果を既存のテーブルに同じ名前で上書きします。
次のクエリを使用して、1 つのテーブルから別のテーブルにレコードを追加できます。
INSERT INTO <projectID>.<datasetID>.<table1> ( <column2>, <column3>) (SELECT * FROM <projectID>.<datasetID>.<table2>)
クエリ結果を使用してデータを追加または上書きする方法の詳細については、クエリ結果の書き込みをご覧ください。
テーブルデータの閲覧
次の方法でテーブルデータを閲覧できます。
- Google Cloud コンソールを使用する
- bq コマンドライン ツールの
bq head
コマンドの使用 tabledata.list
API メソッドを呼び出す- クライアント ライブラリを使用する
必要な権限
テーブルとパーティションのデータを閲覧するには、Identity and Access Management(IAM)権限 bigquery.tables.getData
が必要です。
次の IAM 事前定義ロールには、テーブルを参照してデータをパーティション分割するために必要な権限が含まれています。
roles/bigquery.dataViewer
roles/bigquery.dataEditor
roles/bigquery.dataOwner
roles/bigquery.admin
bigquery.datasets.create
権限がある場合、作成したデータセットのテーブルとパーティション内のデータを参照できます。
BigQuery での IAM のロールと権限については、事前定義ロールと権限をご覧ください。
テーブルデータの閲覧
テーブルデータを閲覧するには:
Console
Google Cloud コンソールで、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 のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Go
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Go の設定手順を完了してください。詳細については、BigQuery Go API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Go 用の Cloud クライアント ライブラリでは、デフォルトで自動的にページ分けされるため、ページ分けを自分で実装する必要はありません。次に例を示します。
Java
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Java の設定手順を完了してください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Node.js
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Node.js の設定手順を完了してください。詳細については、BigQuery Node.js API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Node.js 用の Cloud クライアント ライブラリでは、デフォルトで自動的にページ分けされるため、ページ分けを自分で実装する必要はありません。次に例を示します
PHP
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある PHP の設定手順を完了してください。詳細については、BigQuery PHP API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
PHP 用の Cloud クライアント ライブラリでジェネレータ関数 rows
を使用すると、ページ分割が自動的に行われます。この関数はイテレーション中に結果の次のページをフェッチします。
Python
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Python の設定手順を完了してください。詳細については、BigQuery Python API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Ruby
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Ruby の設定手順を完了してください。詳細については、BigQuery Ruby API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Ruby 用 Cloud クライアント ライブラリで Table#data
と Data#next
を使用すると、ページ分けが自動的に行われます。
テーブルデータのクエリ
次のいずれかの種類のクエリジョブを使用して、BigQuery データをクエリできます。
- インタラクティブなクエリジョブ。デフォルトでは、BigQuery はインタラクティブ(オンデマンド)クエリジョブをできるだけ早く実行します。
継続的クエリジョブ(プレビュー)。これらのジョブでは、クエリが継続的に実行されるため、BigQuery で受信データをリアルタイムで分析し、結果を BigQuery テーブルに書き込むか、Bigtable または Pub/Sub にエクスポートできます。この機能を使用すると、分析情報の作成と即時対応、リアルタイムの ML 推論の適用、イベント ドリブン データ パイプラインの構築など、時間に敏感なタスクを実行できます。
バッチ クエリ ジョブ。これらのジョブでは、BigQuery がユーザーに代わって各バッチクエリをキューに入れ、アイドル状態のリソースが使用可能になると(通常は数分以内)直ちにクエリを開始します。
クエリジョブは、次の方法で実行できます。
- Google Cloud コンソールでクエリを作成して実行します。
- bq コマンドライン ツールの
bq query
コマンドを実行します。 - プログラムで BigQuery REST API の
jobs.query
またはjobs.insert
メソッドを呼び出す。 - BigQuery クライアント ライブラリを使用する。
BigQuery テーブルのクエリの詳細については、BigQuery データのクエリの概要をご覧ください。
BigQuery テーブルに格納されたデータをクエリするだけでなく、外部に保存されたデータをクエリすることもできます。詳細については、外部データソースへのクエリの実行をご覧ください。
テーブルデータの変更
SQL のデータ操作言語(DML)ステートメントを使用して、テーブルのデータを変更できます。DML ステートメントによって、テーブルの行を更新、マージ、挿入、削除できます。それぞれの種類の DML ステートメントの構文リファレンスと例については、GoogleSQL のデータ操作言語ステートメントをご覧ください。
従来の SQL 言語は DML ステートメントをサポートしていません。レガシー SQL を使用してデータを更新または削除するには、テーブルを削除してから、新しいデータでテーブルを再作成する必要があります。または、データを変更し、クエリ結果を新しい宛先テーブルに書き込むクエリを記述することもできます。
テーブルデータのコピー
次の方法でテーブルをコピーできます。
- Google Cloud コンソールを使用する
- bq コマンドライン ツールの
bq cp
コマンドを使用する jobs.insert
API メソッドを呼び出してコピー ジョブを構成する- クライアント ライブラリを使用する
テーブルのコピーの詳細については、テーブルのコピーをご覧ください。
テーブルデータのエクスポート
Cloud Storage バケットに CSV、JSON、Avro、Parquet(プレビュー)形式でテーブルデータをエクスポートできます。ローカルマシンへのエクスポートはサポートされていません。ただし、Google Cloud コンソールを使用してクエリ結果をダウンロードして保存できます。
詳細については、テーブルデータのエクスポートをご覧ください。
テーブルのセキュリティ
BigQuery でテーブルへのアクセスを制御するには、テーブルのアクセス制御の概要をご覧ください。
次のステップ
- データの読み込みの詳細については、データの読み込みの概要をご覧ください。
- データのクエリの詳細については、BigQuery データのクエリの概要をご覧ください。
- テーブル スキーマの変更の詳細については、テーブル スキーマの変更をご覧ください。
- テーブルの作成と使用の詳細については、テーブルの作成と使用をご覧ください。
- テーブルの管理の詳細については、テーブルの管理をご覧ください。