Python クライアント ライブラリ v0.27 からの移行

Python v0.28 用の BigQuery クライアント ライブラリでは、v0.27 以前に設計された旧バージョンと比較して、クライアント ライブラリの設計にいくつかの大きな変更が加えられています。変更点をまとめると、次のようになります。

  • クエリと表示のオペレーションのデフォルト言語が標準 SQL になりました。
  • ジョブに関連するクライアント関数(クエリの実行など)で、ジョブが直ちに開始されるようになりました。
  • データセットとテーブルを作成、取得、更新、削除する関数がクライアント クラスに移動しました。

このトピックでは、最新バージョンの Python クライアント ライブラリを使用するために BigQuery クライアント ライブラリ用 Python コードのどこを変更しなければならないかについて詳しく説明します。

旧バージョンのクライアント ライブラリの実行

現在使用中の Python クライアント ライブラリを最新バージョンにアップグレードすることは必須ではありません。ただし、BigQuery API の新しい機能は v0.28 以降のバージョンでのみサポートされています。

現在のコードを移行せず、旧バージョンの Python クライアント ライブラリを引き続き使用する場合は、アプリで使用する Python クライアント ライブラリのバージョンを指定します。特定のバージョンのライブラリを指定するには、requirements.txt ファイルを次の例のよう編集します。

google-cloud-bigquery==0.27

最新バージョンのクライアント ライブラリの実行

最新バージョンの Python クライアント ライブラリをインストールするには、pip コマンドを使用します。

pip install --upgrade google-cloud-bigquery

詳細な手順については、BigQuery クライアント ライブラリをご覧ください。

ライブラリのインポートとクライアントの作成

Python クライアント ライブラリのインポートとクライアント オブジェクトの作成は、旧バージョンと同じです。

from google.cloud import bigquery

client = bigquery.Client()

クエリに関するコードの変更

標準 SQL 言語によるデータのクエリ

v0.28 以降の変更点は以下のとおりです。

  • デフォルトの SQL 言語は標準 SQL です。
  • QueryJobConfig クラスを使用してクエリジョブを構成します。
  • client.query() は、API リクエストを発行してクエリを直ちに開始します。
  • ジョブ ID は省略可能です。指定されていない場合はクライアント ライブラリによって自動的に生成されます。

次のサンプルは、クエリを実行する方法を示します。

旧バージョンのクライアント ライブラリ:

client = bigquery.Client()
query_job = client.run_async_query(str(uuid.uuid4()), query)

# Use standard SQL syntax.
query_job.use_legacy_sql = False

# Set a destination table.
dest_dataset = client.dataset(dest_dataset_id)
dest_table = dest_dataset.table(dest_table_id)
query_job.destination = dest_table

# Allow the results table to be overwritten.
query_job.write_disposition = 'WRITE_TRUNCATE'

query_job.begin()
query_job.result()  # Wait for query to finish.

rows = query_job.query_results().fetch_data()
for row in rows:
    print(row)

バージョン 0.25.0 以前の google-cloud-bigquery ライブラリでは、job.result() の代わりに次のコードを使用してジョブ オブジェクトの終了を待つ必要がありました。

while True:
    job.reload()  # Refreshes the state via a GET request.
    if job.state == 'DONE':
        if job.error_result:
            raise RuntimeError(job.errors)
        return
    time.sleep(1)

バージョン 0.25.0 以前の google-cloud-bigquery ライブラリでは、job.query_results().fetch_data() の代わりに次のコードを使用して結果の行を取得していました。

rows = query_job.results().fetch_data()

最新バージョンのクライアント ライブラリ:

Python クライアント ライブラリは、デフォルトで標準 SQL を使用するようになりました。

Python

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

# TODO(developer): Import the client library.
# from google.cloud import bigquery

# TODO(developer): 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"]))

最新バージョンの Python クライアント ライブラリを使用してクエリを実行するその他のサンプルについては、以下をご覧ください。

pandas データフレームとしてクエリ結果をダウンロードする

次のサンプルは、クエリを実行し、結果を pandas データフレームとしてダウンロードする方法を示しています。

旧バージョンのクライアント ライブラリ:

旧バージョンのクライアント ライブラリでは、pandas データフレームへの結果のダウンロードがサポートされていませんでした。

最新バージョンのクライアント ライブラリ:

Python

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

# from google.cloud import bigquery
# client = bigquery.Client()

sql = """
    SELECT name, SUM(number) as count
    FROM `bigquery-public-data.usa_names.usa_1910_current`
    GROUP BY name
    ORDER BY count DESC
    LIMIT 10
"""

df = client.query(sql).to_dataframe()

レガシー SQL 言語によるデータのクエリ

次のサンプルは、レガシー SQL 言語を使用してクエリを実行する方法を示しています。

旧バージョンのクライアント ライブラリ:

旧バージョンのクライアント ライブラリは、レガシー SQL 構文がデフォルトに設定されていました。クエリを構成して実行する方法については、クエリのサンプルをご覧ください。

最新バージョンのクライアント ライブラリ:

最新バージョンでは、標準 SQL 構文がデフォルトに設定されています。レガシー SQL を使用するには、use_legacy_sql を true に設定します。クエリを構成して実行する方法については、クエリのサンプルをご覧ください。

データの同期クエリ

v0.28 以降では Client.query() メソッドから QueryJob 内のクエリの統計やその他のプロパティにアクセスできるため、このメソッドを使用することが推奨されます。

旧バージョンのクライアント ライブラリ:

query_results = client.run_sync_query(query)
query_results.use_legacy_sql = False

query_results.run()

# The query might not complete in a single request. To account for a
# long-running query, force the query results to reload until the query
# is complete.
while not query_results.complete:
  query_iterator = query_results.fetch_data()
  try:
     six.next(iter(query_iterator))
  except StopIteration:
      pass

rows = query_results.fetch_data()
for row in rows:
    print(row)

最新バージョンのクライアント ライブラリ:

Python

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

# TODO(developer): Import the client library.
# from google.cloud import bigquery

# TODO(developer): 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"]))

テーブルに関するコードの変更

テーブル参照

追加のプロパティなしでテーブルを参照するには TableReference オブジェクトを使用し、テーブル リソース全体を参照するには Table を使用します。これまで Table クラスを使用していたいくつかのプロパティが、v0.28 以降では TableReference クラスを使用するようになりました。例:

  • QueryJob.destinationTableReference になりました。
  • client.dataset('mydataset').table('mytable')TableReference を返すようになりました。

TableReference クラスと Table クラスの両方を使用する例については、テーブルの作成方法をご覧ください。

ローカル ファイルからのデータの読み込み

次のサンプルは、ローカル ファイルを BigQuery テーブルに読み込む方法を示します。

旧バージョンのクライアント ライブラリ:

dataset = client.dataset(dataset_name)
table = dataset.table(table_name)

# Reload the table to get the schema.
table.reload()

with open(source_file_name, 'rb') as source_file:
    # This example uses CSV, but you can use other formats.
    # See https://cloud.google.com/bigquery/loading-data
    job = table.upload_from_file(
        source_file, source_format='text/csv')

# Wait for the load job to complete.
while True:
    job.reload()
    if job.state == 'DONE':
        if job.error_result:
            raise RuntimeError(job.errors)
        return
    time.sleep(1)

最新バージョンのクライアント ライブラリ:

Python

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

# from google.cloud import bigquery
# client = bigquery.Client()
# filename = '/path/to/file.csv'
# dataset_id = 'my_dataset'
# table_id = 'my_table'

dataset_ref = client.dataset(dataset_id)
table_ref = dataset_ref.table(table_id)
job_config = bigquery.LoadJobConfig()
job_config.source_format = bigquery.SourceFormat.CSV
job_config.skip_leading_rows = 1
job_config.autodetect = True

with open(filename, "rb") as source_file:
    job = client.load_table_from_file(source_file, table_ref, job_config=job_config)

job.result()  # Waits for table load to complete.

print("Loaded {} rows into {}:{}.".format(job.output_rows, dataset_id, table_id))

詳細については、ローカル データソースからのデータの読み込みをご覧ください。

pandas データフレームからのデータの読み込み

次のサンプルは、pandas データフレームを BigQuery テーブルにアップロードする方法を示しています。

旧バージョンのクライアント ライブラリ:

旧バージョンのクライアント ライブラリでは、pandas データフレームからのデータのアップロードはサポートされていませんでした。

最新バージョンのクライアント ライブラリ:

Python

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

from google.cloud import bigquery

import pandas

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

# TODO(developer): Set table_id to the ID of the table to create.
# table_id = "your-project.your_dataset.your_table_name"

records = [
    {"title": u"The Meaning of Life", "release_year": 1983},
    {"title": u"Monty Python and the Holy Grail", "release_year": 1975},
    {"title": u"Life of Brian", "release_year": 1979},
    {"title": u"And Now for Something Completely Different", "release_year": 1971},
]
dataframe = pandas.DataFrame(
    records,
    # In the loaded table, the column order reflects the order of the
    # columns in the DataFrame.
    columns=["title", "release_year"],
    # Optionally, set a named index, which can also be written to the
    # BigQuery table.
    index=pandas.Index(
        [u"Q24980", u"Q25043", u"Q24953", u"Q16403"], name="wikidata_id"
    ),
)
job_config = bigquery.LoadJobConfig(
    # Specify a (partial) schema. All columns are always written to the
    # table. The schema is used to assist in data type definitions.
    schema=[
        # Specify the type of columns whose type cannot be auto-detected. For
        # example the "title" column uses pandas dtype "object", so its
        # data type is ambiguous.
        bigquery.SchemaField("title", bigquery.enums.SqlTypeNames.STRING),
        # Indexes are written if included in the schema by name.
        bigquery.SchemaField("wikidata_id", bigquery.enums.SqlTypeNames.STRING),
    ],
    # Optionally, set the write disposition. BigQuery appends loaded rows
    # to an existing table by default, but with WRITE_TRUNCATE write
    # disposition it replaces the table with the loaded data.
    write_disposition="WRITE_TRUNCATE",
)

job = client.load_table_from_dataframe(
    dataframe, table_id, job_config=job_config
)  # Make an API request.
job.result()  # Wait for the job to complete.

table = client.get_table(table_id)  # Make an API request.
print(
    "Loaded {} rows and {} columns to {}".format(
        table.num_rows, len(table.schema), table_id
    )
)

Cloud Storage からのデータの読み込み

次のサンプルは、Cloud Storage から BigQuery テーブルにファイルを読み込む方法を示します。

旧バージョンのクライアント ライブラリ:

dataset = client.dataset(dataset_name)
table = dataset.table(table_name)
job_id = str(uuid.uuid4())

job = client.load_table_from_storage(
    job_id, table, 'gs://bucket_name/object_name')
job.begin()

# Wait for the load job to complete.
while True:
    job.reload()
    if job.state == 'DONE':
        if job.error_result:
            raise RuntimeError(job.errors)
        return
    time.sleep(1)

最新バージョンのクライアント ライブラリ:

Python

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

# from google.cloud import bigquery
# client = bigquery.Client()
# dataset_id = 'my_dataset'

dataset_ref = client.dataset(dataset_id)
job_config = bigquery.LoadJobConfig()
job_config.schema = [
    bigquery.SchemaField("name", "STRING"),
    bigquery.SchemaField("post_abbr", "STRING"),
]
job_config.skip_leading_rows = 1
# The source format defaults to CSV, so the line below is optional.
job_config.source_format = bigquery.SourceFormat.CSV
uri = "gs://cloud-samples-data/bigquery/us-states/us-states.csv"

load_job = client.load_table_from_uri(
    uri, dataset_ref.table("us_states"), job_config=job_config
)  # API request
print("Starting job {}".format(load_job.job_id))

load_job.result()  # Waits for table load to complete.
print("Job finished.")

destination_table = client.get_table(dataset_ref.table("us_states"))
print("Loaded {} rows.".format(destination_table.num_rows))

詳細については、Cloud Storage からのデータの読み込みをご覧ください。

Cloud Storage へのテーブルの抽出

次の例は、Cloud Storage にテーブルを抽出する方法を示しています。

旧バージョンのクライアント ライブラリ:

dataset = client.dataset(dataset_name)
table = dataset.table(table_name)
job_id = str(uuid.uuid4())

job = client.extract_table_to_storage(
    job_id, table, 'gs://bucket_name/object_name')
job.begin()

# Wait for the job to complete.
while True:
    job.reload()
    if job.state == 'DONE':
        if job.error_result:
            raise RuntimeError(job.errors)
        return
    time.sleep(1)

最新バージョンのクライアント ライブラリ:

Python

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

# from google.cloud import bigquery
# client = bigquery.Client()
# bucket_name = 'my-bucket'
project = "bigquery-public-data"
dataset_id = "samples"
table_id = "shakespeare"

destination_uri = "gs://{}/{}".format(bucket_name, "shakespeare.csv")
dataset_ref = client.dataset(dataset_id, project=project)
table_ref = dataset_ref.table(table_id)

extract_job = client.extract_table(
    table_ref,
    destination_uri,
    # Location must match that of the source table.
    location="US",
)  # API request
extract_job.result()  # Waits for job to complete.

print(
    "Exported {}:{}.{} to {}".format(project, dataset_id, table_id, destination_uri)
)

詳細については、テーブルデータのエクスポートをご覧ください。

テーブルのコピー

次のサンプルは、テーブルを別のテーブルにコピーする方法を示します。

旧バージョンのクライアント ライブラリ:

dataset = client.dataset(dataset_name)
table = dataset.table(table_name)
destination_table = dataset.table(new_table_name)

job_id = str(uuid.uuid4())
job = client.copy_table(job_id, destination_table, table)

job.create_disposition = (
        google.cloud.bigquery.job.CreateDisposition.CREATE_IF_NEEDED)
job.begin()

# Wait for the job to complete.
while True:
    job.reload()
    if job.state == 'DONE':
        if job.error_result:
            raise RuntimeError(job.errors)
        return
    time.sleep(1)

最新バージョンのクライアント ライブラリ:

Python

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

# TODO(developer): Import the client library.
# from google.cloud import bigquery

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

# TODO(developer): Set source_table_id to the ID of the original table.
# source_table_id = "your-project.source_dataset.source_table"

# TODO(developer): Set destination_table_id to the ID of the destination table.
# destination_table_id = "your-project.destination_dataset.destination_table"

job = client.copy_table(source_table_id, destination_table_id)
job.result()  # Wait for the job to complete.

print("A copy of the table created.")

詳細については、テーブルのコピーをご覧ください。

テーブルへのデータのストリーミング

次のサンプルは、テーブルのストリーミング バッファに行を書き込む方法を示します。

旧バージョンのクライアント ライブラリ:

dataset = client.dataset(dataset_name)
table = dataset.table(table_name)

# Reload the table to get the schema.
table.reload()

rows = [('values', 'in', 'same', 'order', 'as', 'schema')]
errors = table.insert_data(rows)

if not errors:
    print('Loaded 1 row into {}:{}'.format(dataset_name, table_name))
else:
    do_something_with(errors)

最新バージョンのクライアント ライブラリ:

Python

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

# TODO(developer): Import the client library.
# from google.cloud import bigquery

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

# TODO(developer): Set table_id to the ID of the model to fetch.
# table_id = "your-project.your_dataset.your_table"

table = client.get_table(table_id)  # Make an API request.
rows_to_insert = [(u"Phred Phlyntstone", 32), (u"Wylma Phlyntstone", 29)]

errors = client.insert_rows(table, rows_to_insert)  # Make an API request.
if errors == []:
    print("New rows have been added.")

詳細については、BigQuery へのデータのストリーミングをご覧ください。

テーブルの一覧表示

次のサンプルは、データセット内のテーブルを一覧表示する方法を示します。

旧バージョンのクライアント ライブラリ:

dataset = client.dataset(dataset_name)
for table in dataset.list_tables():
    print(table.name)

最新バージョンのクライアント ライブラリ:

Python

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

# TODO(developer): Import the client library.
# from google.cloud import bigquery

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

# TODO(developer): Set dataset_id to the ID of the dataset that contains
#                  the tables you are listing.
# dataset_id = 'your-project.your_dataset'

tables = client.list_tables(dataset_id)  # Make an API request.

print("Tables contained in '{}':".format(dataset_id))
for table in tables:
    print("{}.{}.{}".format(table.project, table.dataset_id, table.table_id))

詳細については、テーブルの一覧表示をご覧ください。

テーブルの取得

次のサンプルは、テーブルを取得する方法を示します。

旧バージョンのクライアント ライブラリ:

dataset = client.dataset(dataset_name)
table = dataset.table(table_name)
table.reload()

最新バージョンのクライアント ライブラリ:

Python

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

# TODO(developer): Import the client library.
# from google.cloud import bigquery

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

# TODO(developer): Set table_id to the ID of the model to fetch.
# table_id = 'your-project.your_dataset.your_table'

table = client.get_table(table_id)  # Make an API request.

# View table properties
print(
    "Got table '{}.{}.{}'.".format(table.project, table.dataset_id, table.table_id)
)
print("Table schema: {}".format(table.schema))
print("Table description: {}".format(table.description))
print("Table has {} rows".format(table.num_rows))

詳細については、テーブルに関する情報の取得をご覧ください。

テーブルの存在チェック

BigQuery API ではネイティブの exists メソッドは提供されていません。その代わりに、テーブル リソースを取得するリクエストを発行して 404 エラーが返されるかどうかを確認します。旧バージョンのクライアント ライブラリには、この確認を行う exists() ヘルパーが用意されていました。exists() ヘルパーでは、リソース全体を取得する前に exists() を呼び出すなど、いくつかの非効率的な使い方が許容されていました。そのため、exists() ヘルパーはクライアント ライブラリから削除されました。

次のサンプルは、テーブルが存在するかどうかを確認する方法を示します。

旧バージョンのクライアント ライブラリ:

dataset = client.dataset(dataset_name)
table = dataset.table(table_name)
if table.exists():
    # do something
else:
    # do something else

最新バージョンのクライアント ライブラリ:

Python

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

from google.cloud.exceptions import NotFound

# TODO(developer): Set table_id to the ID of the table to determine existence.
# table_id = "your-project.your_dataset.your_table"

try:
    client.get_table(table_id)  # Make an API request.
    print("Table {} already exists.".format(table_id))
except NotFound:
    print("Table {} is not found.".format(table_id))

テーブルの作成

次のサンプルは、テーブルを作成する方法を示します。

旧バージョンのクライアント ライブラリ:

dataset = client.dataset(dataset_name)
table = dataset.table(table_name)
table.create()

最新バージョンのクライアント ライブラリ:

Python

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

from google.cloud import bigquery

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

# TODO(developer): Set table_id to the ID of the table to create.
# table_id = "your-project.your_dataset.your_table_name"

schema = [
    bigquery.SchemaField("full_name", "STRING", mode="REQUIRED"),
    bigquery.SchemaField("age", "INTEGER", mode="REQUIRED"),
]

table = bigquery.Table(table_id, schema=schema)
table = client.create_table(table)  # Make an API request.
print(
    "Created table {}.{}.{}".format(table.project, table.dataset_id, table.table_id)
)

詳細については、テーブルの作成をご覧ください。

テーブルの更新

次のサンプルは、テーブルを更新する方法を示します。

旧バージョンのクライアント ライブラリ:

dataset = client.dataset(dataset_name)
table = dataset.table(table_name)
table.patch(description='new description')

旧バージョンのライブラリでは、etag プロパティによってテーブル リソースのバージョンがチェックされていなかったため、「読み取り - 変更 - 書き込み」の手順は安全ではありません。

最新バージョンのクライアント ライブラリ:

Python

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

# from google.cloud import bigquery
# client = bigquery.Client()
# table_ref = client.dataset('my_dataset').table('my_table')
# table = client.get_table(table_ref)  # API request

assert table.description == "Original description."
table.description = "Updated description."

table = client.update_table(table, ["description"])  # API request

assert table.description == "Updated description."

詳細については、テーブル プロパティの更新をご覧ください。

テーブルの削除

次のサンプルは、テーブルを削除する方法を示します。

旧バージョンのクライアント ライブラリ:

dataset = client.dataset(dataset_name)
table = dataset.table(table_name)
table.delete()

最新バージョンのクライアント ライブラリ:

Python

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

# TODO(developer): Import the client library.
# from google.cloud import bigquery

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

# TODO(developer): Set table_id to the ID of the table to fetch.
# table_id = 'your-project.your_dataset.your_table'

# If the table does not exist, delete_table raises
# google.api_core.exceptions.NotFound unless not_found_ok is True.
client.delete_table(table_id, not_found_ok=True)  # Make an API request.
print("Deleted table '{}'.".format(table_id))

詳細については、テーブルの削除をご覧ください。

データセットに関するコードの変更

データセット参照

追加のプロパティなしでデータセットを参照するには DatasetReference オブジェクトを使用し、データセット リソース全体を参照するには Dataset を使用します。これまで Dataset クラスを使用していたいくつかのメソッドが、v0.28 以降では DatasetReference クラスを使用するようになりました。例:

  • client.dataset('mydataset')DatasetReference を返すようになりました。

DatasetReference クラスと Dataset クラスの両方を使用する例については、データセットの作成方法をご覧ください。

データセットの一覧表示

次のサンプルは、プロジェクト内のデータセットを一覧表示する方法を示します。

旧バージョンのクライアント ライブラリ:

for dataset in client.list_datasets():
    print(dataset.name)

最新バージョンのクライアント ライブラリ:

Python

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

# TODO(developer): Import the client library.
# from google.cloud import bigquery

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

datasets = list(client.list_datasets())  # Make an API request.
project = client.project

if datasets:
    print("Datasets in project {}:".format(project))
    for dataset in datasets:
        print("\t{}".format(dataset.dataset_id))
else:
    print("{} project does not contain any datasets.".format(project))

詳細については、データセットの一覧表示をご覧ください。

データセットの取得

次のサンプルは、データセットを取得する方法を示します。

旧バージョンのクライアント ライブラリ:

dataset = client.dataset(dataset_name)
dataset.reload()

最新バージョンのクライアント ライブラリ:

Python

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

# TODO(developer): Import the client library.
# from google.cloud import bigquery

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

# TODO(developer): Set dataset_id to the ID of the dataset to fetch.
# dataset_id = 'your-project.your_dataset'

dataset = client.get_dataset(dataset_id)  # Make an API request.

full_dataset_id = "{}.{}".format(dataset.project, dataset.dataset_id)
friendly_name = dataset.friendly_name
print(
    "Got dataset '{}' with friendly_name '{}'.".format(
        full_dataset_id, friendly_name
    )
)

# View dataset properties.
print("Description: {}".format(dataset.description))
print("Labels:")
labels = dataset.labels
if labels:
    for label, value in labels.items():
        print("\t{}: {}".format(label, value))
else:
    print("\tDataset has no labels defined.")

# View tables in dataset.
print("Tables:")
tables = list(client.list_tables(dataset))  # Make an API request(s).
if tables:
    for table in tables:
        print("\t{}".format(table.table_id))
else:
    print("\tThis dataset does not contain any tables.")

詳細については、データセットに関する情報の取得をご覧ください。

データセットの存在チェック

BigQuery API ではネイティブの exists メソッドは提供されていません。その代わりに、データセット リソースを取得するリクエストを発行して 404 エラーが返されるかどうかを確認します。旧バージョンのクライアント ライブラリには、この確認を行う exists() ヘルパーが用意されていました。exists() ヘルパーでは、リソース全体を取得する前に exists() を呼び出すなど、いくつかの非効率的な使い方が許容されていました。そのため、exists() ヘルパーはクライアント ライブラリから削除されました。

次のサンプルは、データセットが存在するかどうかを確認する方法を示します。

旧バージョンのクライアント ライブラリ:

dataset = client.dataset(dataset_name)
if dataset.exists():
    # do something
else:
    # do something else

最新バージョンのクライアント ライブラリ:

Python

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

from google.cloud.exceptions import NotFound

# TODO(developer): Set dataset_id to the ID of the dataset to determine existence.
# dataset_id = "your-project.your_dataset"

try:
    client.get_dataset(dataset_id)  # Make an API request.
    print("Dataset {} already exists".format(dataset_id))
except NotFound:
    print("Dataset {} is not found".format(dataset_id))

データセットの作成

次のサンプルは、データセットを作成する方法を示します。

旧バージョンのクライアント ライブラリ:

dataset = client.dataset(dataset_name)
dataset.create()

最新バージョンのクライアント ライブラリ:

Python

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

from google.cloud import bigquery

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

# TODO(developer): Set dataset_id to the ID of the dataset to create.
# dataset_id = "{}.your_dataset".format(client.project)

# Construct a full Dataset object to send to the API.
dataset = bigquery.Dataset(dataset_id)

# TODO(developer): Specify the geographic location where the dataset should reside.
dataset.location = "US"

# Send the dataset to the API for creation.
# Raises google.api_core.exceptions.Conflict if the Dataset already
# exists within the project.
dataset = client.create_dataset(dataset)  # Make an API request.
print("Created dataset {}.{}".format(client.project, dataset.dataset_id))

詳細については、データセットの作成をご覧ください。

データセットの更新

次のサンプルは、データセットを更新する方法を示します。

旧バージョンのクライアント ライブラリ:

dataset = client.dataset(dataset_name)
dataset.patch(description='new description')

旧バージョンのライブラリでは、etag プロパティによってデータセット リソースのバージョンがチェックされていなかったため、「読み取り - 変更 - 書き込み」の手順は安全ではありません。

最新バージョンのクライアント ライブラリ:

Python

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

# TODO(developer): Import the client library.
# from google.cloud import bigquery

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

# TODO(developer): Set dataset_id to the ID of the dataset to fetch.
# dataset_id = 'your-project.your_dataset'

dataset = client.get_dataset(dataset_id)  # Make an API request.
dataset.description = "Updated description."
dataset = client.update_dataset(dataset, ["description"])  # Make an API request.

full_dataset_id = "{}.{}".format(dataset.project, dataset.dataset_id)
print(
    "Updated dataset '{}' with description '{}'.".format(
        full_dataset_id, dataset.description
    )
)

詳細については、データセット プロパティの更新をご覧ください。

データセットの削除

次のサンプルは、データセットを削除する方法を示します。

旧バージョンのクライアント ライブラリ:

dataset = client.dataset(dataset_name)
dataset.delete()

最新バージョンのクライアント ライブラリ:

Python

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

# TODO(developer): Import the client library.
# from google.cloud import bigquery

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

# TODO(developer): Set model_id to the ID of the model to fetch.
# dataset_id = 'your-project.your_dataset'

# Use the delete_contents parameter to delete a dataset and its contents.
# Use the not_found_ok parameter to not receive an error if the dataset has already been deleted.
client.delete_dataset(
    dataset_id, delete_contents=True, not_found_ok=True
)  # Make an API request.

print("Deleted dataset '{}'.".format(dataset_id))

詳細については、データセットの削除をご覧ください。