Python 클라이언트 라이브러리 v0.27에서 이전

Python v0.28용 Google 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 참조 문서를 참조하세요.

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

query = (
    'SELECT name FROM `bigquery-public-data.usa_names.usa_1910_2013` '
    'WHERE state = "TX" '
    'LIMIT 100')
query_job = client.query(
    query,
    # Location must match that of the dataset(s) referenced in the query.
    location='US')  # API request - starts the query

for row in query_job:  # API request - fetches results
    # Row values can be accessed by field name or index
    assert row[0] == row.name == row['name']
    print(row)

최신 버전의 Python 클라이언트 라이브러리로 쿼리를 실행하는 또 다른 샘플은 다음을 참조하세요.

이전 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 참조 문서를 참조하세요.

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

query = (
    'SELECT name FROM `bigquery-public-data.usa_names.usa_1910_2013` '
    'WHERE state = "TX" '
    'LIMIT 100')
query_job = client.query(
    query,
    # Location must match that of the dataset(s) referenced in the query.
    location='US')  # API request - starts the query

for row in query_job:  # API request - fetches results
    # Row values can be accessed by field name or index
    assert row[0] == row.name == row['name']
    print(row)

테이블 코드 변경

테이블 참조

속성을 추가하지 않고 테이블을 참조하려면 TableReference 객체를 사용하고, 전체 테이블 리소스를 참조하려면 Table을 사용합니다. 이전에 Table 클래스를 사용했던 여러 속성이 v0.28 및 이후 버전에서는 TableReference 클래스를 사용합니다. 예를 들면 다음과 같습니다.

  • QueryJob.destination이 이제 TableReference입니다.
  • client.dataset('mydataset').table('mytable')이 이제 TableReference를 반환합니다.

TableReferenceTable 클래스를 모두 사용하는 예는 테이블을 만드는 방법을 참조하세요.

로컬 파일에서 데이터 로드

다음 샘플은 로컬 파일을 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,
        location='US',  # Must match the destination dataset location.
        job_config=job_config)  # API request

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

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

자세한 내용은 로컬 데이터 소스에서 데이터 로드를 참조하세요.

Google Cloud Storage에서 데이터 로드

다음 샘플은 Google 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))

자세한 내용은 Google Cloud Storage에서 데이터 로드를 참조하세요.

Google Cloud Storage로 테이블 추출

다음 샘플은 Google 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 참조 문서를 참조하세요.

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

source_dataset = client.dataset('samples', project='bigquery-public-data')
source_table_ref = source_dataset.table('shakespeare')

# dataset_id = 'my_dataset'
dest_table_ref = client.dataset(dataset_id).table('destination_table')

job = client.copy_table(
    source_table_ref,
    dest_table_ref,
    # Location must match that of the source and destination tables.
    location='US')  # API request

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

assert job.state == 'DONE'
dest_table = client.get_table(dest_table_ref)  # API request
assert dest_table.num_rows > 0

자세한 내용은 테이블 복사를 참조하세요.

데이터를 테이블로 스트리밍

다음 샘플은 테이블의 스트리밍 버퍼에 행을 쓰는 방법을 보여줍니다.

이전 버전의 클라이언트 라이브러리:

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): Uncomment the lines below and replace with your values.
# from google.cloud import bigquery
# client = bigquery.Client()
# dataset_id = 'my_dataset'  # replace with your dataset ID
# For this sample, the table must already exist and have a defined schema
# table_id = 'my_table'  # replace with your table ID
# table_ref = client.dataset(dataset_id).table(table_id)
# table = client.get_table(table_ref)  # API request

rows_to_insert = [
    (u'Phred Phlyntstone', 32),
    (u'Wylma Phlyntstone', 29),
]

errors = client.insert_rows(table, rows_to_insert)  # API request

assert errors == []

자세한 내용은 데이터를 BigQuery로 스트리밍을 참조하세요.

테이블 나열

다음 샘플은 데이터세트의 테이블을 나열하는 방법을 보여줍니다.

이전 버전의 클라이언트 라이브러리:

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

최신 버전의 클라이언트 라이브러리:

Python

이 샘플을 시도해 보기 전에 클라이언트 라이브러리를 사용하는 BigQuery 빠른 시작의 Python 설정 안내를 따르세요. 자세한 내용은 BigQuery Python API 참조 문서를 참조하세요.

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

tables = list(client.list_tables(dataset_ref))  # API request(s)
assert len(tables) == 0

table_ref = dataset.table('my_table')
table = bigquery.Table(table_ref)
client.create_table(table)                  # API request
tables = list(client.list_tables(dataset))  # API request(s)

assert len(tables) == 1
assert tables[0].table_id == 'my_table'

자세한 내용은 데이터세트의 테이블 나열을 참조하세요.

테이블 가져오기

다음 샘플은 테이블을 가져오는 방법을 보여줍니다.

이전 버전의 클라이언트 라이브러리:

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

최신 버전의 클라이언트 라이브러리:

Python

이 샘플을 시도해 보기 전에 클라이언트 라이브러리를 사용하는 BigQuery 빠른 시작의 Python 설정 안내를 따르세요. 자세한 내용은 BigQuery Python API 참조 문서를 참조하세요.

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

dataset_ref = client.dataset(dataset_id)
table_ref = dataset_ref.table(table_id)
table = client.get_table(table_ref)  # API Request

# View table properties
print(table.schema)
print(table.description)
print(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 참조 문서를 참조하세요.

def table_exists(client, table_reference):
    """Return if a table exists.

    Args:
        client (google.cloud.bigquery.client.Client):
            A client to connect to the BigQuery API.
        table_reference (google.cloud.bigquery.table.TableReference):
            A reference to the table to look for.

    Returns:
        bool: ``True`` if the table exists, ``False`` otherwise.
    """
    from google.cloud.exceptions import NotFound

    try:
        client.get_table(table_reference)
        return True
    except NotFound:
        return False

테이블 만들기

다음 샘플은 테이블을 만드는 방법을 보여줍니다.

이전 버전의 클라이언트 라이브러리:

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

최신 버전의 클라이언트 라이브러리:

Python

이 샘플을 시도해 보기 전에 클라이언트 라이브러리를 사용하는 BigQuery 빠른 시작의 Python 설정 안내를 따르세요. 자세한 내용은 BigQuery Python API 참조 문서를 참조하세요.

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

schema = [
    bigquery.SchemaField('full_name', 'STRING', mode='REQUIRED'),
    bigquery.SchemaField('age', 'INTEGER', mode='REQUIRED'),
]
table_ref = dataset_ref.table('my_table')
table = bigquery.Table(table_ref, schema=schema)
table = client.create_table(table)  # API request

assert table.table_id == 'my_table'

자세한 내용은 테이블 만들기를 참조하세요.

테이블 업데이트

다음 샘플은 테이블을 업데이트하는 방법을 보여줍니다.

이전 버전의 클라이언트 라이브러리:

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 참조 문서를 참조하세요.

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

table_ref = client.dataset(dataset_id).table(table_id)
client.delete_table(table_ref)  # API request

print('Table {}:{} deleted.'.format(dataset_id, table_id))

자세한 내용은 테이블 삭제를 참조하세요.

데이터세트 코드 변경

데이터세트 참조

속성을 추가하지 않고 데이터세트를 참조하려면 DatasetReference 객체를 사용하고, 전체 데이터세트 리소스를 참조하려면 Dataset를 사용합니다. 이전에 Dataset 클래스를 사용했던 일부 메소드가 v0.28 및 이후 버전에서는 DatasetReference 클래스를 사용합니다. 예를 들면 다음과 같습니다.

  • client.dataset('mydataset')가 이제 DatasetReference를 반환합니다.

DatasetReferenceDataset 클래스를 모두 사용하는 예는 데이터세트를 만드는 방법을 참조하세요.

데이터세트 나열

다음은 프로젝트에서 데이터세트를 나열하는 방법을 보여줍니다.

이전 버전의 클라이언트 라이브러리:

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

최신 버전의 클라이언트 라이브러리:

Python

이 샘플을 시도해 보기 전에 클라이언트 라이브러리를 사용하는 BigQuery 빠른 시작의 Python 설정 안내를 따르세요. 자세한 내용은 BigQuery Python API 참조 문서를 참조하세요.

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

datasets = list(client.list_datasets())
project = client.project

if datasets:
    print('Datasets in project {}:'.format(project))
    for dataset in datasets:  # API request(s)
        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 참조 문서를 참조하세요.

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

dataset_ref = client.dataset(dataset_id)
dataset = client.get_dataset(dataset_ref)  # API request

# View dataset properties
print('Dataset ID: {}'.format(dataset_id))
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_ref))  # 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 참조 문서를 참조하세요.

def dataset_exists(client, dataset_reference):
    """Return if a dataset exists.

    Args:
        client (google.cloud.bigquery.client.Client):
            A client to connect to the BigQuery API.
        dataset_reference (google.cloud.bigquery.dataset.DatasetReference):
            A reference to the dataset to look for.

    Returns:
        bool: ``True`` if the dataset exists, ``False`` otherwise.
    """
    from google.cloud.exceptions import NotFound

    try:
        client.get_dataset(dataset_reference)
        return True
    except NotFound:
        return False

데이터세트 만들기

다음 샘플은 데이터세트를 만드는 방법을 보여줍니다.

이전 버전의 클라이언트 라이브러리:

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

최신 버전의 클라이언트 라이브러리:

Python

이 샘플을 시도해 보기 전에 클라이언트 라이브러리를 사용하는 BigQuery 빠른 시작의 Python 설정 안내를 따르세요. 자세한 내용은 BigQuery Python API 참조 문서를 참조하세요.

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

# Create a DatasetReference using a chosen dataset ID.
# The project defaults to the Client's project if not specified.
dataset_ref = client.dataset(dataset_id)

# Construct a full Dataset object to send to the API.
dataset = bigquery.Dataset(dataset_ref)
# 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.AlreadyExists if the Dataset already
# exists within the project.
dataset = client.create_dataset(dataset)  # API request

자세한 내용은 데이터세트 만들기를 참조하세요.

데이터세트 업데이트

다음 샘플은 데이터세트를 업데이트하는 방법을 보여줍니다.

이전 버전의 클라이언트 라이브러리:

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

이전 버전의 라이브러리는 etag 속성을 통해 데이터세트 ​​리소스 버전을 확인하지 않으므로, 읽기-수정-쓰기가 안전하지 않습니다.

최신 버전의 클라이언트 라이브러리:

Python

이 샘플을 시도해 보기 전에 클라이언트 라이브러리를 사용하는 BigQuery 빠른 시작의 Python 설정 안내를 따르세요. 자세한 내용은 BigQuery Python API 참조 문서를 참조하세요.

# from google.cloud import bigquery
# client = bigquery.Client()
# dataset_ref = client.dataset('my_dataset')
# dataset = client.get_dataset(dataset_ref)  # API request

assert dataset.description == 'Original description.'
dataset.description = 'Updated description.'

dataset = client.update_dataset(dataset, ['description'])  # API request

assert dataset.description == 'Updated description.'

자세한 내용은 데이터세트 속성 업데이트를 참조하세요.

데이터세트 삭제

다음 샘플에서는 데이터세트를 삭제하는 방법을 보여줍니다.

이전 버전의 클라이언트 라이브러리:

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

최신 버전의 클라이언트 라이브러리:

Python

이 샘플을 시도해 보기 전에 클라이언트 라이브러리를 사용하는 BigQuery 빠른 시작의 Python 설정 안내를 따르세요. 자세한 내용은 BigQuery Python API 참조 문서를 참조하세요.

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

# Delete a dataset that does not contain any tables
# dataset1_id = 'my_empty_dataset'
dataset1_ref = client.dataset(dataset1_id)
client.delete_dataset(dataset1_ref)  # API request

print('Dataset {} deleted.'.format(dataset1_id))

# Use the delete_contents parameter to delete a dataset and its contents
# dataset2_id = 'my_dataset_with_tables'
dataset2_ref = client.dataset(dataset2_id)
client.delete_dataset(dataset2_ref, delete_contents=True)  # API request

print('Dataset {} deleted.'.format(dataset2_id))

자세한 내용은 데이터세트 삭제를 참조하세요.

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

도움이 필요하시나요? 지원 페이지를 방문하세요.