Cómo migrar desde la biblioteca cliente de Python v0.27

La biblioteca cliente de Google BigQuery para Python v0.28 incluye algunos cambios significativos con respecto al diseño de las bibliotecas cliente v0.27 y anteriores. Estos cambios se pueden resumir de la siguiente manera:

  • Operaciones de consulta y vista predeterminadas del dialecto de SQL estándar.
  • Funciones del cliente relacionadas con trabajos, como ejecutar consultas, que inician el trabajo inmediatamente.
  • Funciones para crear, obtener, actualizar y borrar conjuntos de datos y tablas trasladadas a la clase de cliente.

Este tema proporciona detalles sobre los cambios que debes realizar a tu código de Python para las bibliotecas cliente de BigQuery a fin de utilizar la última versión de la biblioteca cliente de Python.

Cómo ejecutar versiones anteriores de la biblioteca cliente

No es necesario que actualices tu biblioteca cliente de Python a la versión más reciente. Sin embargo, la funcionalidad nueva en la API de BigQuery es compatible solo con la versión v0.28 y posteriores.

Si deseas continuar utilizando una versión anterior de la biblioteca cliente de Python y no deseas migrar tu código, debes especificar la versión de la biblioteca cliente de Python que usa tu aplicación. A fin de indicar una versión de biblioteca específica, edita el archivo requirements.txt como se muestra a continuación:

google-cloud-bigquery==0.27

Cómo ejecutar la versión más reciente de la biblioteca cliente

A fin de instalar la versión más reciente de la biblioteca cliente de Python, utiliza el comando pip:

pip install --upgrade google-cloud-bigquery

Si deseas obtener instrucciones detalladas, consulta bibliotecas cliente de BigQuery.

Cómo importar la biblioteca y crear un cliente

Para importar la biblioteca cliente de Python y crear un objeto de cliente, se siguen los mismos pasos en las versiones nuevas y las anteriores de la biblioteca.

from google.cloud import bigquery

client = bigquery.Client()

Cambios en el código de consulta

Cómo consultar datos con el dialecto SQL estándar.

Entre los cambios de la versión v0.28 y posteriores se incluyen los siguientes:

  • SQL estándar es el dialecto de SQL predeterminado.
  • Utiliza la clase QueryJobConfig a fin de configurar el trabajo de consulta.
  • client.query() realiza una solicitud a la API para comenzar inmediatamente la consulta.
  • Un ID del trabajo es opcional. En caso de que no se proporcione uno, la biblioteca cliente generará uno para ti.

En el siguiente ejemplo, se muestra cómo ejecutar una consulta:

Versiones anteriores de las bibliotecas cliente:

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)

En la versión 0.25.0 o anteriores de la biblioteca google-cloud-bigquery, se requería el código que aparece a continuación, en vez de job.result(), a fin de esperar que los objetos de trabajo terminen:

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)

En la versión 0.25.0 o anteriores de la biblioteca google-cloud-bigquery, se utilizaba el código que aparece a continuación, en vez de job.query_results().fetch_data(), a fin de obtener las filas de resultados:

rows = query_job.results().fetch_data()

Versión más reciente de la biblioteca cliente:

La biblioteca cliente de Python ahora utiliza SQL estándar de forma predeterminada.

Python

Antes de probar esta muestra, sigue las instrucciones de configuración para Python que se encuentran en la Guía de inicio rápido de BigQuery con bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de Python de BigQuery.

# 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)

Si deseas obtener más muestras sobre la ejecución de consultas con la versión más reciente de la biblioteca cliente de Python, consulta los siguientes vínculos:

Cómo consultar datos con el dialecto SQL heredado

En el siguiente ejemplo, se muestra cómo ejecutar una consulta mediante el dialecto SQL heredado.

Versiones anteriores de las bibliotecas cliente:

Las versiones anteriores de las bibliotecas cliente utilizaban la sintaxis SQL heredada de forma predeterminada. Si deseas obtener información sobre cómo configurar y ejecutar una consulta, ve a consulta de muestra.

Versión más reciente de la biblioteca cliente:

La biblioteca cliente utiliza la sintaxis de SQL estándar de forma predeterminada. Establece use_legacy_sql como verdadero a fin de utilizar SQL heredado. Si deseas obtener información sobre cómo configurar y ejecutar una consulta, ve la consulta de muestra.

Cómo consultar datos de forma sincronizada

En la versión v0.28 y posteriores, se recomienda el método Client.query(), ya que se puede acceder a estadísticas y otras propiedades de la consulta en el QueryJob.

Versiones anteriores de las bibliotecas cliente:

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)

Versión más reciente de la biblioteca cliente:

Python

Antes de probar esta muestra, sigue las instrucciones de configuración para Python que se encuentran en la Guía de inicio rápido de BigQuery con bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de Python de BigQuery.

# 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)

Cambios de código en la tabla

Referencias de tablas

Utiliza un objeto TableReference para referirte a una tabla sin propiedades adicionales y Table a fin de referirte a un recurso de tabla completo. Diferentes propiedades que antes utilizaban la clase Table ahora usan la clase TableReference en la versión v0.28 y posteriores. Por ejemplo:

  • QueryJob.destination ahora es TableReference.
  • client.dataset('mydataset').table('mytable') ahora muestra TableReference.

Si deseas conocer un ejemplo que utilice clases tanto de TableReference como de Table, consulta cómo crear una tabla.

Cómo cargar datos desde un archivo local

En el siguiente ejemplo, se muestra cómo cargar un archivo local en una tabla de BigQuery.

Versiones anteriores de las bibliotecas cliente:

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)

Versión más reciente de la biblioteca cliente:

Python

Antes de probar esta muestra, sigue las instrucciones de configuración para Python que se encuentran en la Guía de inicio rápido de BigQuery con bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de Python de BigQuery.

# 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))

Si deseas obtener más detalles, consulta cómo cargar datos desde una fuente de datos local.

Cómo cargar datos desde Google Cloud Storage

En el siguiente ejemplo, se muestra cómo cargar un archivo desde Google Cloud Storage en una tabla de BigQuery.

Versiones anteriores de las bibliotecas cliente:

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)

Versión más reciente de la biblioteca cliente:

Python

Antes de probar esta muestra, sigue las instrucciones de configuración para Python que se encuentran en la Guía de inicio rápido de BigQuery con bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de Python de BigQuery.

# 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))

Si deseas obtener más detalles, consulta cómo cargar datos desde Google Cloud Storage.

Cómo extraer una tabla a Google Cloud Storage

En el siguiente ejemplo, se muestra cómo extraer una tabla a Google Cloud Storage.

Versiones anteriores de las bibliotecas cliente:

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)

Versión más reciente de la biblioteca cliente:

Python

Antes de probar esta muestra, sigue las instrucciones de configuración para Python que se encuentran en la Guía de inicio rápido de BigQuery con bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de Python de BigQuery.

# 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))

Si deseas obtener más detalles, consulta cómo exportar datos.

Cómo copiar una tabla

En el siguiente ejemplo, se muestra cómo copiar una tabla a otra tabla.

Versiones anteriores de las bibliotecas cliente:

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)

Versión más reciente de la biblioteca cliente:

Python

Antes de probar esta muestra, sigue las instrucciones de configuración para Python que se encuentran en la Guía de inicio rápido de BigQuery con bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de Python de BigQuery.

# 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

Si deseas obtener más detalles, consulta cómo copiar una tabla.

Cómo transmitir datos a una tabla

En el siguiente ejemplo, se muestra cómo escribir filas en el búfer de transmisión de la tabla.

Versiones anteriores de las bibliotecas cliente:

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)

Versión más reciente de la biblioteca cliente:

Python

Antes de probar esta muestra, sigue las instrucciones de configuración para Python que se encuentran en la Guía de inicio rápido de BigQuery con bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de Python de BigQuery.

# 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 == []

Si deseas obtener más detalles, consulta cómo trasmitir datos a BigQuery.

Cómo realizar una lista de tablas

En el siguiente ejemplo, se muestra cómo realizar una lista de las tablas en un conjunto de datos.

Versiones anteriores de las bibliotecas cliente:

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

Versión más reciente de la biblioteca cliente:

Python

Antes de probar esta muestra, sigue las instrucciones de configuración para Python que se encuentran en la Guía de inicio rápido de BigQuery con bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de Python de BigQuery.

# 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'

Si deseas obtener más detalles, consulta cómo realizar una lista de tablas en un conjunto de datos.

Cómo obtener una tabla

En el siguiente ejemplo, se muestra cómo obtener una tabla.

Versiones anteriores de las bibliotecas cliente:

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

Versión más reciente de la biblioteca cliente:

Python

Antes de probar esta muestra, sigue las instrucciones de configuración para Python que se encuentran en la Guía de inicio rápido de BigQuery con bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de Python de BigQuery.

# 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)

Si deseas obtener más detalles, consulta cómo obtener más información sobre tablas.

Cómo comprobar si una tabla existe

La API de BigQuery no proporciona un método exists nativo. En cambio, obtén el recurso de la tabla y verifica si esa solicitud produce un error 404. Anteriormente, la biblioteca cliente proporcionaba el ayudante exists() para realizar esta verificación. El ayudante exists() permitía algunos casos prácticos ineficientes, como la llamada a exists(), antes de intentar obtener el recurso completo. Como resultado, se quitó el ayudante exists() de la biblioteca cliente.

En el siguiente ejemplo, se muestra cómo verificar si la tabla existe.

Versiones anteriores de las bibliotecas cliente:

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

Versión más reciente de la biblioteca cliente:

Python

Antes de probar esta muestra, sigue las instrucciones de configuración para Python que se encuentran en la Guía de inicio rápido de BigQuery con bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de Python de BigQuery.

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

Cómo crear una tabla

En el siguiente ejemplo, se muestra cómo crear una tabla.

Versiones anteriores de las bibliotecas cliente:

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

Versión más reciente de la biblioteca cliente:

Python

Antes de probar esta muestra, sigue las instrucciones de configuración para Python que se encuentran en la Guía de inicio rápido de BigQuery con bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de Python de BigQuery.

# 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'

Si deseas obtener más detalles, consulta cómo crear una tabla.

Cómo actualizar una tabla

En el siguiente ejemplo, se muestra cómo actualizar una tabla.

Versiones anteriores de las bibliotecas cliente:

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

Ten en cuenta que las versiones anteriores de la biblioteca no verifican las versiones del recurso de la tabla a través de la propiedad etag, por lo que la lectura-modificación-escritura no es segura.

Versión más reciente de la biblioteca cliente:

Python

Antes de probar esta muestra, sigue las instrucciones de configuración para Python que se encuentran en la Guía de inicio rápido de BigQuery con bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de Python de BigQuery.

# 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.'

Si deseas obtener más detalles, consulta cómo actualizar las propiedades de la tabla.

Cómo borrar una tabla

En el siguiente ejemplo, se muestra cómo borrar una tabla.

Versiones anteriores de las bibliotecas cliente:

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

Versión más reciente de la biblioteca cliente:

Python

Antes de probar esta muestra, sigue las instrucciones de configuración para Python que se encuentran en la Guía de inicio rápido de BigQuery con bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de Python de BigQuery.

# 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))

Si deseas obtener más detalles, consulta cómo borrar una tabla.

Cambios en el código del conjunto de datos

Referencias del conjunto de datos

Utiliza un objeto DatasetReference para hacer referencia a un conjunto de datos sin propiedades adicionales y Dataset a fin de hacer referencia a un recurso de conjunto de datos completo. Algunos métodos que anteriormente utilizaban la clase Dataset ahora usan la clase DatasetReference en la versión v0.28 y posteriores. Por ejemplo:

  • client.dataset('mydataset') ahora muestra DatasetReference.

Si deseas conocer un ejemplo que utilice clases tanto DatasetReference como Dataset, consulta cómo crear un conjunto de datos.

Cómo realizar una lista de conjuntos de datos

En el siguiente ejemplo, se muestra cómo realizar listas de conjuntos de datos en un proyecto.

Versiones anteriores de las bibliotecas cliente:

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

Versión más reciente de la biblioteca cliente:

Python

Antes de probar esta muestra, sigue las instrucciones de configuración para Python que se encuentran en la Guía de inicio rápido de BigQuery con bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de Python de BigQuery.

# 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))

Si deseas obtener más detalles, consulta cómo realizar listas de conjuntos de datos.

Cómo obtener un conjunto de datos

En el siguiente ejemplo, se muestra cómo obtener un conjunto de datos.

Versiones anteriores de las bibliotecas cliente:

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

Versión más reciente de la biblioteca cliente:

Python

Antes de probar esta muestra, sigue las instrucciones de configuración para Python que se encuentran en la Guía de inicio rápido de BigQuery con bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de Python de BigQuery.

# 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.')

Si deseas obtener más detalles, consulta cómo obtener más información sobre conjuntos de datos.

Cómo verificar si un conjunto de datos existe

La API de BigQuery no proporciona un método exists nativo. En cambio, obtén el recurso del conjunto de datos y verifica si esa solicitud produce un error 404. Anteriormente, la biblioteca cliente proporcionaba el ayudante exists() para realizar esta verificación. El ayudante exists() permitía algunos casos prácticos ineficientes, como la llamada a exists(), antes de intentar obtener el recurso completo. Como resultado, se quitó el ayudante exists() de la biblioteca cliente.

En el siguiente ejemplo, se muestra cómo controlar si el conjunto de datos existe.

Versiones anteriores de las bibliotecas cliente:

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

Versión más reciente de la biblioteca cliente:

Python

Antes de probar esta muestra, sigue las instrucciones de configuración para Python que se encuentran en la Guía de inicio rápido de BigQuery con bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de Python de BigQuery.

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

Cómo crear un conjunto de datos

En el siguiente ejemplo, se muestra cómo crear un conjunto de datos.

Versiones anteriores de las bibliotecas cliente:

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

Versión más reciente de la biblioteca cliente:

Python

Antes de probar esta muestra, sigue las instrucciones de configuración para Python que se encuentran en la Guía de inicio rápido de BigQuery con bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de Python de BigQuery.

# 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.Conflict if the Dataset already
# exists within the project.
dataset = client.create_dataset(dataset)  # API request

Si deseas obtener más detalles, consulta cómo crear conjuntos de datos.

Cómo actualizar un conjunto de datos

En el siguiente ejemplo, se muestra cómo actualizar un conjunto de datos.

Versiones anteriores de las bibliotecas cliente:

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

Ten en cuenta que las versiones anteriores de la biblioteca no verifican las versiones del recurso de conjunto de datos a través de la propiedad etag, por lo que la lectura-modificación-escritura no es segura.

Versión más reciente de la biblioteca cliente:

Python

Antes de probar esta muestra, sigue las instrucciones de configuración para Python que se encuentran en la Guía de inicio rápido de BigQuery con bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de Python de BigQuery.

# 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.'

Si deseas obtener más detalles, consulta Cómo actualizar las propiedades de un conjunto de datos.

Cómo borrar un conjunto de datos

En el siguiente ejemplo, se muestra cómo borrar un conjunto de datos:

Versiones anteriores de las bibliotecas cliente:

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

Versión más reciente de la biblioteca cliente:

Python

Antes de probar esta muestra, sigue las instrucciones de configuración para Python que se encuentran en la Guía de inicio rápido de BigQuery con bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de Python de BigQuery.

# 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))

Si deseas obtener más detalles, consulta cómo borrar conjuntos de datos.

¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…

¿Necesitas ayuda? Visita nuestra página de asistencia.