インタラクティブ クエリとバッチクエリのジョブを実行する

このドキュメントでは、BigQuery で 2 種類のクエリジョブを実行する方法を説明します。

  • インタラクティブ クエリジョブ。BigQuery がオンデマンドで実行するジョブです。
  • バッチクエリ ジョブ。アイドル状態のコンピューティング リソースが使用可能になるまで BigQuery が待機するジョブです。

インタラクティブ クエリとバッチクエリ

デフォルトでは、BigQuery はできるだけすぐに実行されるインタラクティブ クエリジョブとしてクエリを実行します。予約で実行されるインタラクティブ クエリは同時実行の上限に対してカウントします。この上限に達すると、追加のクエリはエラーが発生して失敗します。

オンデマンド料金モデルを使用するクエリの実行の場合、BigQuery はリソースの可用性に基づいて同時実行クエリの上限を動的に計算します。この上限に達すると、追加のクエリがキュー内で待機します。詳細については、クエリキューをご覧ください。

バッチクエリ ジョブでは、BigQuery がクエリをキューに入れ、BigQuery 共有リソースプールでアイドル リソースが使用可能になるとクエリを開始します。通常、クエリは数分間のみキューに入れられます。

バッチクエリは同時実行の上限数にカウントされません。プロジェクトで最大 10 個のバッチクエリを同時に実行できます。バッチクエリは、インタラクティブ クエリと同じリソースを使用します。定額料金を使用すると、割り当てられたスロットをバッチクエリとインタラクティブ クエリで分け合います。

BigQuery は、クエリ結果を一時テーブル(デフォルト)または永続テーブルに保存します。結果の宛先テーブルとして永続テーブルを指定する場合は、既存のテーブルを追加または上書きするか、一意の名前で新しいテーブルを作成するかを選択できます。

必要なロール

クエリジョブを実行するために必要な権限を取得するには、管理者に次の IAM ロールを付与するよう依頼してください。

ロールの付与の詳細については、アクセスの管理をご覧ください。

これらの事前定義ロールには、クエリジョブの実行に必要な権限が含まれています。必要な権限を正確に確認するには、[必要な権限] セクションを開いてください。

必要な権限

クエリジョブを実行するには、次の権限が必要です。

  • プロジェクトの bigquery.jobs.create
  • bigquery.tables.getData クエリが参照するすべてのテーブルとビューに対する権限。ビューをクエリするには、基盤となるすべてのテーブルとビューに対してもこの権限が必要です。承認済みビューまたは承認済みデータセットを使用している場合、基礎となるソースデータにアクセスする必要はありません。

カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。

BigQuery の権限の詳細については、IAM でのアクセス制御をご覧ください。

インタラクティブ クエリを実行する

インタラクティブ クエリを実行するには、次のいずれかのオプションを選択します。

Console

  1. BigQuery ページに移動します。

    BigQuery に移動

  2. クエリを新規作成)をクリックします。

  3. クエリエディタで、有効な GoogleSQL のクエリを入力します。

    たとえば、BigQuery 一般公開データセット usa_names に対してクエリを実行し、1910 年から 2013 年の間に米国で最も多くつけられた名前を特定します。

    SELECT
      name, gender,
      SUM(number) AS total
    FROM
      `bigquery-public-data.usa_names.usa_1910_2013`
    GROUP BY
      name, gender
    ORDER BY
      total DESC
    LIMIT
      10;
    
  4. (省略可)クエリ結果の宛先テーブルとロケーションを指定します。

    1. クエリエディタで、 [その他] をクリックしてから、[クエリの設定] をクリックします。
    2. [送信先] セクションで、[クエリ結果の宛先テーブルを設定する] をオンにします。
    3. [Dataset] で、宛先テーブルの既存のデータセットの名前を入力します(例: myProject.myDataset)。
    4. [Table Id] に、宛先テーブルの名前を入力します(例: myTable)。
    5. 宛先テーブルが既存のテーブルの場合、[宛先テーブルの書き込み設定] で、クエリ結果をテーブルに追加または上書きするかどうかを選択します。

      宛先テーブルが新しいテーブルの場合、BigQuery はクエリの実行時にテーブルを作成します。

    6. [追加の設定] セクションで、[データのロケーション] メニューをクリックして、オプションを選択します。

      この例では、usa_names データセットは米国のマルチリージョン ロケーションに保存されています。このクエリの宛先テーブルを指定する場合、宛先テーブルが含まれるデータセットも米国のマルチリージョン内に存在している必要があります。あるロケーションのデータセットに対するクエリを実行して、結果を別のロケーションにあるテーブルに書き込むことはできません。

    7. [保存] をクリックします。

  5. [ 実行] をクリックします。

    宛先テーブルを指定しなかった場合、クエリジョブは一時(キャッシュ)テーブルに出力を書き込みます。

bq

  1. Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。

    Cloud Shell をアクティブにする

    Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。

  2. bq query コマンドを使用します。次の例では、--use_legacy_sql=false フラグにより GoogleSQL の構文を使用できます。

    bq query \
        --use_legacy_sql=false \
        'QUERY'
    

    QUERY は有効な GoogleSQL クエリに置き換えます。たとえば、BigQuery 一般公開データセット usa_names に対してクエリを実行し、1910 年から 2013 年の間に米国で最も多くつけられた名前を特定します。

    bq query \
        --use_legacy_sql=false \
        'SELECT
          name, gender,
          SUM(number) AS total
        FROM
          `bigquery-public-data.usa_names.usa_1910_2013`
        GROUP BY
          name, gender
        ORDER BY
          total DESC
        LIMIT
          10;'
    

    クエリジョブは、一時(キャッシュ)テーブルに出力を書き込みます。

    必要に応じて、クエリ結果の宛先テーブルとロケーションを指定できます。既存のテーブルに結果を書き込むには、適切なフラグを指定してテーブルを追加(--append_table=true)または上書き(--replace=true)します。

    bq query \
        --location=LOCATION \
        --destination_table=TABLE \
        --use_legacy_sql=false \
        'QUERY'
    

    以下を置き換えます。

    • LOCATION: 宛先テーブルのリージョンまたはマルチリージョン(例: US

      この例では、usa_names データセットは米国のマルチリージョン ロケーションに保存されています。このクエリの宛先テーブルを指定する場合、宛先テーブルが含まれるデータセットも米国のマルチリージョン内に存在している必要があります。あるロケーションのデータセットに対するクエリを実行して、結果を別のロケーションにあるテーブルに書き込むことはできません。

      .bigqueryrc ファイルを使用してロケーションのデフォルト値を設定できます。

    • TABLE: 宛先テーブルの名前(例: myDataset.myTable

      宛先テーブルが新しいテーブルの場合、BigQuery はクエリの実行時にテーブルを作成します。ただし、既存のデータセットを指定する必要があります。

      テーブルが現在のプロジェクトにない場合は、PROJECT_ID:DATASET.TABLE の形式(たとえば、myProject:myDataset.myTable)を使用して Google Cloud プロジェクト ID を追加します。--destination_table を指定しない場合、出力を一時テーブルに書き込むクエリジョブが生成されます。

API

API を使用してクエリを実行するには、新しいジョブを挿入して query ジョブ構成プロパティに値を設定します。省略可のジョブリソースjobReference セクションにある location プロパティでロケーションを指定します。

getQueryResults を呼び出して結果を取得します。jobCompletetrue と等しくなるまで取得を続けます。エラーと警告は、errors リストで確認してください。

C#

このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートC# の手順に沿って設定を行ってください。詳細については、BigQuery C# API のリファレンス ドキュメントをご覧ください。

BigQuery への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。


using Google.Cloud.BigQuery.V2;
using System;

public class BigQueryQuery
{
    public void Query(
        string projectId = "your-project-id"
    )
    {
        BigQueryClient client = BigQueryClient.Create(projectId);
        string query = @"
            SELECT name FROM `bigquery-public-data.usa_names.usa_1910_2013`
            WHERE state = 'TX'
            LIMIT 100";
        BigQueryJob job = client.CreateQueryJob(
            sql: query,
            parameters: null,
            options: new QueryOptions { UseQueryCache = false });
        // Wait for the job to complete.
        job = job.PollUntilCompleted().ThrowOnAnyError();
        // Display the results
        foreach (BigQueryRow row in client.GetQueryResults(job.Reference))
        {
            Console.WriteLine($"{row["name"]}");
        }
    }
}

Go

このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートGo の手順に沿って設定を行ってください。詳細については、BigQuery Go API のリファレンス ドキュメントをご覧ください。

BigQuery への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/bigquery"
	"google.golang.org/api/iterator"
)

// queryBasic demonstrates issuing a query and reading results.
func queryBasic(w io.Writer, projectID string) error {
	// projectID := "my-project-id"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	q := client.Query(
		"SELECT name FROM `bigquery-public-data.usa_names.usa_1910_2013` " +
			"WHERE state = \"TX\" " +
			"LIMIT 100")
	// Location must match that of the dataset(s) referenced in the query.
	q.Location = "US"
	// Run the query and print results when the query job is completed.
	job, err := q.Run(ctx)
	if err != nil {
		return err
	}
	status, err := job.Wait(ctx)
	if err != nil {
		return err
	}
	if err := status.Err(); err != nil {
		return err
	}
	it, err := job.Read(ctx)
	for {
		var row []bigquery.Value
		err := it.Next(&row)
		if err == iterator.Done {
			break
		}
		if err != nil {
			return err
		}
		fmt.Fprintln(w, row)
	}
	return nil
}

Java

このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートJava の手順に沿って設定を行ってください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。

BigQuery への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.QueryJobConfiguration;
import com.google.cloud.bigquery.TableResult;

public class SimpleQuery {

  public static void runSimpleQuery() {
    // TODO(developer): Replace this query before running the sample.
    String query = "SELECT corpus FROM `bigquery-public-data.samples.shakespeare` GROUP BY corpus;";
    simpleQuery(query);
  }

  public static void simpleQuery(String query) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      // Create the query job.
      QueryJobConfiguration queryConfig = QueryJobConfiguration.newBuilder(query).build();

      // Execute the query.
      TableResult result = bigquery.query(queryConfig);

      // Print the results.
      result.iterateAll().forEach(rows -> rows.forEach(row -> System.out.println(row.getValue())));

      System.out.println("Query ran successfully");
    } catch (BigQueryException | InterruptedException e) {
      System.out.println("Query did not run \n" + e.toString());
    }
  }
}

プロキシを使用してクエリを実行するには、プロキシの構成をご覧ください。

Node.js

このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートNode.js の手順に沿って設定を行ってください。詳細については、BigQuery Node.js API のリファレンス ドキュメントをご覧ください。

BigQuery への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

// Import the Google Cloud client library using default credentials
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();
async function query() {
  // Queries the U.S. given names dataset for the state of Texas.

  const query = `SELECT name
    FROM \`bigquery-public-data.usa_names.usa_1910_2013\`
    WHERE state = 'TX'
    LIMIT 100`;

  // For all options, see https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs/query
  const options = {
    query: query,
    // Location must match that of the dataset(s) referenced in the query.
    location: 'US',
  };

  // Run the query as a job
  const [job] = await bigquery.createQueryJob(options);
  console.log(`Job ${job.id} started.`);

  // Wait for the query to finish
  const [rows] = await job.getQueryResults();

  // Print the results
  console.log('Rows:');
  rows.forEach(row => console.log(row));
}

PHP

このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートPHP の手順に沿って設定を行ってください。詳細については、BigQuery PHP API のリファレンス ドキュメントをご覧ください。

BigQuery への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

use Google\Cloud\BigQuery\BigQueryClient;
use Google\Cloud\Core\ExponentialBackoff;

/** Uncomment and populate these variables in your code */
// $projectId = 'The Google project ID';
// $query = 'SELECT id, view_count FROM `bigquery-public-data.stackoverflow.posts_questions`';

$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);
$jobConfig = $bigQuery->query($query);
$job = $bigQuery->startQuery($jobConfig);

$backoff = new ExponentialBackoff(10);
$backoff->execute(function () use ($job) {
    print('Waiting for job to complete' . PHP_EOL);
    $job->reload();
    if (!$job->isComplete()) {
        throw new Exception('Job has not yet completed', 500);
    }
});
$queryResults = $job->queryResults();

$i = 0;
foreach ($queryResults as $row) {
    printf('--- Row %s ---' . PHP_EOL, ++$i);
    foreach ($row as $column => $value) {
        printf('%s: %s' . PHP_EOL, $column, json_encode($value));
    }
}
printf('Found %s row(s)' . PHP_EOL, $i);

Python

このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートPython の手順に沿って設定を行ってください。詳細については、BigQuery Python API のリファレンス ドキュメントをご覧ください。

BigQuery への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。


from google.cloud import bigquery

# Construct a BigQuery client object.
client = bigquery.Client()

query = """
    SELECT name, SUM(number) as total_people
    FROM `bigquery-public-data.usa_names.usa_1910_2013`
    WHERE state = 'TX'
    GROUP BY name, state
    ORDER BY total_people DESC
    LIMIT 20
"""
query_job = client.query(query)  # Make an API request.

print("The query data:")
for row in query_job:
    # Row values can be accessed by field name or index.
    print("name={}, count={}".format(row[0], row["total_people"]))

Ruby

このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートRuby の手順に沿って設定を行ってください。詳細については、BigQuery Ruby API のリファレンス ドキュメントをご覧ください。

BigQuery への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

require "google/cloud/bigquery"

def query
  bigquery = Google::Cloud::Bigquery.new
  sql = "SELECT name FROM `bigquery-public-data.usa_names.usa_1910_2013` " \
        "WHERE state = 'TX' " \
        "LIMIT 100"

  # Location must match that of the dataset(s) referenced in the query.
  results = bigquery.query sql do |config|
    config.location = "US"
  end

  results.each do |row|
    puts row.inspect
  end
end

詳細については、インタラクティブ クエリとバッチクエリをご覧ください。

バッチクエリを実行する

バッチクエリを実行するには、次のいずれかのオプションを選択します。

Console

  1. BigQuery ページに移動します。

    BigQuery に移動

  2. クエリを新規作成)をクリックします。

  3. クエリエディタで、有効な GoogleSQL のクエリを入力します。

    たとえば、BigQuery 一般公開データセット usa_names に対してクエリを実行し、1910 年から 2013 年の間に米国で最も多くつけられた名前を特定します。

    SELECT
      name, gender,
      SUM(number) AS total
    FROM
      `bigquery-public-data.usa_names.usa_1910_2013`
    GROUP BY
      name, gender
    ORDER BY
      total DESC
    LIMIT
      10;
    
  4. [その他] をクリックしてから、[クエリの設定] をクリックします。

  5. [リソース管理] セクションで [バッチ] を選択します。

  6. (省略可)クエリ結果の宛先テーブルとロケーションを指定します。

    1. [送信先] セクションで、[クエリ結果の宛先テーブルを設定する] をオンにします。
    2. [Dataset] で、宛先テーブルの既存のデータセットの名前を入力します(例: myProject.myDataset)。
    3. [Table Id] に、宛先テーブルの名前を入力します(例: myTable)。
    4. 宛先テーブルが既存のテーブルの場合、[宛先テーブルの書き込み設定] で、クエリ結果をテーブルに追加または上書きするかどうかを選択します。

      宛先テーブルが新しいテーブルの場合、BigQuery はクエリの実行時にテーブルを作成します。

    5. [追加の設定] セクションで、[データのロケーション] メニューをクリックして、オプションを選択します。

      この例では、usa_names データセットは米国のマルチリージョン ロケーションに保存されています。このクエリの宛先テーブルを指定する場合、宛先テーブルが含まれるデータセットも米国のマルチリージョン内に存在している必要があります。あるロケーションのデータセットに対するクエリを実行して、結果を別のロケーションにあるテーブルに書き込むことはできません。

  7. [保存] をクリックします。

  8. [ 実行] をクリックします。

    宛先テーブルを指定しなかった場合、クエリジョブは一時(キャッシュ)テーブルに出力を書き込みます。

bq

  1. Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。

    Cloud Shell をアクティブにする

    Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。

  2. bq query コマンドを使用して、--batch フラグを指定します。次の例では、--use_legacy_sql=false フラグにより GoogleSQL の構文を使用できます。

    bq query \
        --batch \
        --use_legacy_sql=false \
        'QUERY'
    

    QUERY は有効な GoogleSQL クエリに置き換えます。たとえば、BigQuery 一般公開データセット usa_names に対してクエリを実行し、1910 年から 2013 年の間に米国で最も多くつけられた名前を特定します。

    bq query \
        --batch \
        --use_legacy_sql=false \
        'SELECT
          name, gender,
          SUM(number) AS total
        FROM
          `bigquery-public-data.usa_names.usa_1910_2013`
        GROUP BY
          name, gender
        ORDER BY
          total DESC
        LIMIT
          10;'
    

    クエリジョブは、一時(キャッシュ)テーブルに出力を書き込みます。

    必要に応じて、クエリ結果の宛先テーブルとロケーションを指定できます。既存のテーブルに結果を書き込むには、適切なフラグを指定してテーブルを追加(--append_table=true)または上書き(--replace=true)します。

    bq query \
        --batch \
        --location=LOCATION \
        --destination_table=TABLE \
        --use_legacy_sql=false \
        'QUERY'
    

    以下を置き換えます。

    • LOCATION: 宛先テーブルのリージョンまたはマルチリージョン(例: US

      この例では、usa_names データセットは米国のマルチリージョン ロケーションに保存されています。このクエリの宛先テーブルを指定する場合、宛先テーブルが含まれるデータセットも米国のマルチリージョン内に存在している必要があります。あるロケーションのデータセットに対するクエリを実行して、結果を別のロケーションにあるテーブルに書き込むことはできません。

      .bigqueryrc ファイルを使用してロケーションのデフォルト値を設定できます。

    • TABLE: 宛先テーブルの名前(例: myDataset.myTable

      宛先テーブルが新しいテーブルの場合、BigQuery はクエリの実行時にテーブルを作成します。ただし、既存のデータセットを指定する必要があります。

      テーブルが現在のプロジェクトにない場合は、PROJECT_ID:DATASET.TABLE の形式(たとえば、myProject:myDataset.myTable)を使用して Google Cloud プロジェクト ID を追加します。--destination_table を指定しない場合、出力を一時テーブルに書き込むクエリジョブが生成されます。

API

API を使用してクエリを実行するには、新しいジョブを挿入して query ジョブ構成プロパティに値を設定します。省略可のジョブリソースjobReference セクションにある location プロパティでロケーションを指定します。

クエリジョブのプロパティにデータを入力するときには、configuration.query.priority プロパティを含めて、その値を BATCH に設定します。

getQueryResults を呼び出して結果を取得します。jobCompletetrue と等しくなるまで取得を続けます。エラーと警告は、errors リストで確認してください。

Go

このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートGo の手順に沿って設定を行ってください。詳細については、BigQuery Go API のリファレンス ドキュメントをご覧ください。

BigQuery への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

import (
	"context"
	"fmt"
	"io"
	"time"

	"cloud.google.com/go/bigquery"
)

// queryBatch demonstrates issuing a query job using batch priority.
func queryBatch(w io.Writer, projectID, dstDatasetID, dstTableID string) error {
	// projectID := "my-project-id"
	// dstDatasetID := "mydataset"
	// dstTableID := "mytable"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	// Build an aggregate table.
	q := client.Query(`
		SELECT
  			corpus,
  			SUM(word_count) as total_words,
  			COUNT(1) as unique_words
		FROM ` + "`bigquery-public-data.samples.shakespeare`" + `
		GROUP BY corpus;`)
	q.Priority = bigquery.BatchPriority
	q.QueryConfig.Dst = client.Dataset(dstDatasetID).Table(dstTableID)

	// Start the job.
	job, err := q.Run(ctx)
	if err != nil {
		return err
	}
	// Job is started and will progress without interaction.
	// To simulate other work being done, sleep a few seconds.
	time.Sleep(5 * time.Second)
	status, err := job.Status(ctx)
	if err != nil {
		return err
	}

	state := "Unknown"
	switch status.State {
	case bigquery.Pending:
		state = "Pending"
	case bigquery.Running:
		state = "Running"
	case bigquery.Done:
		state = "Done"
	}
	// You can continue to monitor job progress until it reaches
	// the Done state by polling periodically.  In this example,
	// we print the latest status.
	fmt.Fprintf(w, "Job %s in Location %s currently in state: %s\n", job.ID(), job.Location(), state)

	return nil

}

Java

バッチクエリを実行するには、QueryJobConfiguration の作成時に、クエリの優先度の設定QueryJobConfiguration.Priority.BATCH にします。

このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートJava の手順に沿って設定を行ってください。 詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。

BigQuery への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.QueryJobConfiguration;
import com.google.cloud.bigquery.TableResult;

// Sample to query batch in a table
public class QueryBatch {

  public static void runQueryBatch() {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "MY_PROJECT_ID";
    String datasetName = "MY_DATASET_NAME";
    String tableName = "MY_TABLE_NAME";
    String query =
        "SELECT corpus"
            + " FROM `"
            + projectId
            + "."
            + datasetName
            + "."
            + tableName
            + " GROUP BY corpus;";
    queryBatch(query);
  }

  public static void queryBatch(String query) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      QueryJobConfiguration queryConfig =
          QueryJobConfiguration.newBuilder(query)
              // Run at batch priority, which won't count toward concurrent rate limit.
              .setPriority(QueryJobConfiguration.Priority.BATCH)
              .build();

      TableResult results = bigquery.query(queryConfig);

      results
          .iterateAll()
          .forEach(row -> row.forEach(val -> System.out.printf("%s,", val.toString())));

      System.out.println("Query batch performed successfully.");
    } catch (BigQueryException | InterruptedException e) {
      System.out.println("Query batch not performed \n" + e.toString());
    }
  }
}

Node.js

このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートNode.js の手順に沿って設定を行ってください。詳細については、BigQuery Node.js API のリファレンス ドキュメントをご覧ください。

BigQuery への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

// Import the Google Cloud client library and create a client
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function queryBatch() {
  // Runs a query at batch priority.

  // Create query job configuration. For all options, see
  // https://cloud.google.com/bigquery/docs/reference/rest/v2/Job#jobconfigurationquery
  const queryJobConfig = {
    query: `SELECT corpus
            FROM \`bigquery-public-data.samples.shakespeare\`
            LIMIT 10`,
    useLegacySql: false,
    priority: 'BATCH',
  };

  // Create job configuration. For all options, see
  // https://cloud.google.com/bigquery/docs/reference/rest/v2/Job#jobconfiguration
  const jobConfig = {
    // Specify a job configuration to set optional job resource properties.
    configuration: {
      query: queryJobConfig,
    },
  };

  // Make API request.
  const [job] = await bigquery.createJob(jobConfig);

  const jobId = job.metadata.id;
  const state = job.metadata.status.state;
  console.log(`Job ${jobId} is currently in state ${state}`);
}

Python

このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートPython の手順に沿って設定を行ってください。詳細については、BigQuery Python API のリファレンス ドキュメントをご覧ください。

BigQuery への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

from google.cloud import bigquery

# Construct a BigQuery client object.
client = bigquery.Client()

job_config = bigquery.QueryJobConfig(
    # Run at batch priority, which won't count toward concurrent rate limit.
    priority=bigquery.QueryPriority.BATCH
)

sql = """
    SELECT corpus
    FROM `bigquery-public-data.samples.shakespeare`
    GROUP BY corpus;
"""

# Start the query, passing in the extra configuration.
query_job = client.query(sql, job_config=job_config)  # Make an API request.

# Check on the progress by getting the job's updated state. Once the state
# is `DONE`, the results are ready.
query_job = client.get_job(
    query_job.job_id, location=query_job.location
)  # Make an API request.

print("Job {} is currently in state {}".format(query_job.job_id, query_job.state))

詳細については、インタラクティブ クエリとバッチクエリをご覧ください。

次のステップ