Migra desde la biblioteca cliente de Python v0.27

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

  • Las operaciones de consulta y visualización usan el dialecto de SQL estándar de forma predeterminada.
  • Se incluyen funciones del cliente relacionadas con trabajos, como ejecutar consultas, que inician el trabajo de inmediato.
  • 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 este ejemplo, sigue las instrucciones de configuración de Python incluidas en la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de 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 ejemplos 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 para usar SQL heredado. Si deseas obtener información sobre cómo configurar y ejecutar una consulta, dirígete a 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 este ejemplo, sigue las instrucciones de configuración de Python incluidas en la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de 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 ver un ejemplo en el que se usen las clases TableReference y Table, consulta Cómo crear una tabla.

Carga 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 este ejemplo, sigue las instrucciones de configuración de Python incluidas en la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de 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 de una fuente de datos local.

Carga datos desde Cloud Storage

En el siguiente ejemplo, se muestra cómo cargar un archivo desde 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 este ejemplo, sigue las instrucciones de configuración de Python incluidas en la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de 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 Carga datos desde Cloud Storage.

Extrae una tabla en Cloud Storage

En el siguiente ejemplo, se muestra cómo extraer una tabla en 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 este ejemplo, sigue las instrucciones de configuración de Python incluidas en la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de 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)
)

Para obtener más detalles, consulta Exporta datos de tablas.

Copia 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 este ejemplo, sigue las instrucciones de configuración de Python incluidas en la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de 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

Para obtener más detalles, consulta Copia una tabla.

Transmite 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 este ejemplo, sigue las instrucciones de configuración de Python incluidas en la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de 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 == []

Para obtener más detalles, consulta Transmite datos a BigQuery.

Haz una lista de las 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 este ejemplo, sigue las instrucciones de configuración de Python incluidas en la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de obtener más información, consulta la Documentación de referencia de la API de Python de BigQuery.

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)

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

Para obtener más detalles, consulta Enumera tablas.

Obtén 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 este ejemplo, sigue las instrucciones de configuración de Python incluidas en la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de obtener más información, consulta la Documentación de referencia de la API de Python de BigQuery.

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)

print(
    "Got table '{}.{}.{}'.".format(table.project, table.dataset_id, table.table_id)
)

# View table properties
print("Table schema: {}".format(table.schema))
print("Table description: {}".format(table.description))
print("Table has {} rows".format(table.num_rows))

Para obtener más detalles, consulta Obtén información sobre las tablas.

Comprueba 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 este ejemplo, sigue las instrucciones de configuración de Python incluidas en la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de 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 este ejemplo, sigue las instrucciones de configuración de Python incluidas en la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de obtener más información, consulta la Documentación de referencia de la API de Python de BigQuery.

from google.cloud import bigquery

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

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

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

Para obtener más detalles, consulta Crea una tabla.

Actualiza 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 este ejemplo, sigue las instrucciones de configuración de Python incluidas en la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de 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."

Para obtener más detalles, consulta Actualiza las propiedades de las tablas.

Borra 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 este ejemplo, sigue las instrucciones de configuración de Python incluidas en la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de obtener más información, consulta la Documentación de referencia de la API de Python de BigQuery.

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)
print("Deleted table '{}'.".format(table_id))

Para obtener más detalles, consulta Borra tablas.

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.

Para ver un ejemplo en el que se usen las clases DatasetReference y Dataset, consulta Cómo crear un conjunto de datos.

Haz una lista de los 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 este ejemplo, sigue las instrucciones de configuración de Python incluidas en la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de obtener más información, consulta la Documentación de referencia de la API de Python de BigQuery.

from google.cloud import bigquery

# TODO(developer): Construct a BigQuery client object.
# 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))

Para obtener más detalles, consulta Haz una lista de los conjuntos de datos.

Obtén 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 este ejemplo, sigue las instrucciones de configuración de Python incluidas en la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de obtener más información, consulta la Documentación de referencia de la API de Python de BigQuery.

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)

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))  # API request(s)
if tables:
    for table in tables:
        print("\t{}".format(table.table_id))
else:
    print("\tThis dataset does not contain any tables.")

Para obtener más detalles, consulta Obtén información sobre los conjuntos de datos.

Verifica si un conjunto de datos existe

La API de BigQuery no proporciona un método exists nativo. En su lugar, obtén el recurso de conjunto de datos y verifica si esa solicitud genera 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 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 este ejemplo, sigue las instrucciones de configuración de Python incluidas en la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de 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 este ejemplo, sigue las instrucciones de configuración de Python incluidas en la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de obtener más información, consulta la Documentación de referencia de la API de Python de BigQuery.

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)  # API request
print("Created dataset {}.{}".format(client.project, dataset.dataset_id))

Para obtener más detalles, consulta Crea un conjunto de datos.

Actualiza 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 este ejemplo, sigue las instrucciones de configuración de Python incluidas en la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de obtener más información, consulta la Documentación de referencia de la API de Python de BigQuery.

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)
dataset.description = "Updated description."
dataset = client.update_dataset(dataset, ["description"])

full_dataset_id = "{}.{}".format(dataset.project, dataset.dataset_id)
print(
    "Updated dataset '{}' with description '{}'.".format(
        full_dataset_id, dataset.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 este ejemplo, sigue las instrucciones de configuración de Python incluidas en la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de obtener más información, consulta la Documentación de referencia de la API de Python de BigQuery.

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)

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

Para obtener más detalles, consulta Borra conjuntos de datos.

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

Enviar comentarios sobre…

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