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:

  • En las operaciones de consulta y visualización, se usa el dialecto SQL estándar de forma predeterminada.
  • Se incluyen funciones de cliente relacionadas con trabajos, como la ejecución de consultas, que inician el trabajo de inmediato.
  • Funciones para crear, obtener, actualizar y borrar conjuntos de datos y tablas fueron 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 seguir usando una versión anterior de la biblioteca cliente de Python y no quieres migrar tu código, debes especificar la versión que usa tu app. Para indicar una versión de biblioteca específica, edita el archivo requirements.txt, como se muestra a continuación:

google-cloud-bigquery==0.27

Ejecuta 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, usa 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.
  • Usa la clase QueryJobConfig a fin de configurar el trabajo de consulta.
  • Con client.query(), se realiza una solicitud a la API para comenzar la consulta de inmediato.
  • El uso de un ID de trabajo es opcional. En caso de que no se proporcione un ID, 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 lugar de job.result(), a fin de esperar que los objetos de trabajo finalicen:

while True:
    job.reload()  # Refreshes the state by using 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 usaba el código que aparece a continuación, en lugar de job.query_results().fetch_data(), a fin de obtener las filas resultantes:

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 incluidas en la Guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.


from google.cloud import bigquery

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

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

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

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:

Descarga los resultados de las consultas como un DataFrame de Pandas

En el siguiente ejemplo, se muestra cómo ejecutar una consulta y descargar los resultados como un DataFrame de Pandas.

Versiones anteriores de las bibliotecas cliente:

Las versiones anteriores de las bibliotecas cliente no admitían la descarga de los resultados en un DataFrame de Pandas.

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

Python

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

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

Consulta 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 usaban 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 usa la sintaxis SQL estándar de forma predeterminada. Configura use_legacy_sql como verdadero para usar un SQL heredado. Si deseas obtener información sobre cómo configurar y ejecutar una consulta, ve esta consulta de muestra.

Consulta datos en simultáneo

En la versión v0.28 y posteriores, se recomienda el método Client.query(), ya que se puede acceder a estadísticas y a 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 incluidas en la Guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.


from google.cloud import bigquery

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

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

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

Cambios de código en la tabla

Referencias a tablas

Usa un objeto TableReference para hacer referencia a una tabla sin propiedades adicionales y una Table a fin de hacer referencia a un recurso de tabla completo. Varias propiedades que antes usaban la clase Table ahora usan la clase TableReference en la versión v0.28 y posteriores. Por ejemplo:

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

Para 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/docs/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 incluidas en la Guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.

from google.cloud import bigquery

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

job_config = bigquery.LoadJobConfig(
    source_format=bigquery.SourceFormat.CSV, skip_leading_rows=1, autodetect=True,
)

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

job.result()  # Waits 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
    )
)

Si deseas obtener más información consulta Carga datos desde una fuente de datos local.

Carga datos desde un DataFrame de Pandas

En el siguiente ejemplo, se muestra cómo subir un DataFrame de Pandas a una tabla de BigQuery.

Versiones anteriores de las bibliotecas cliente:

Las versiones anteriores de las bibliotecas cliente no admitían la carga de datos desde un DataFrame de Pandas.

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

Python

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

import datetime

from google.cloud import bigquery
import pandas
import pytz

# 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,
        "length_minutes": 112.5,
        "release_date": pytz.timezone("Europe/Paris")
        .localize(datetime.datetime(1983, 5, 9, 13, 0, 0))
        .astimezone(pytz.utc),
        # Assume UTC timezone when a datetime object contains no timezone.
        "dvd_release": datetime.datetime(2002, 1, 22, 7, 0, 0),
    },
    {
        "title": u"Monty Python and the Holy Grail",
        "release_year": 1975,
        "length_minutes": 91.5,
        "release_date": pytz.timezone("Europe/London")
        .localize(datetime.datetime(1975, 4, 9, 23, 59, 2))
        .astimezone(pytz.utc),
        "dvd_release": datetime.datetime(2002, 7, 16, 9, 0, 0),
    },
    {
        "title": u"Life of Brian",
        "release_year": 1979,
        "length_minutes": 94.25,
        "release_date": pytz.timezone("America/New_York")
        .localize(datetime.datetime(1979, 8, 17, 23, 59, 5))
        .astimezone(pytz.utc),
        "dvd_release": datetime.datetime(2008, 1, 14, 8, 0, 0),
    },
    {
        "title": u"And Now for Something Completely Different",
        "release_year": 1971,
        "length_minutes": 88.0,
        "release_date": pytz.timezone("Europe/London")
        .localize(datetime.datetime(1971, 9, 28, 23, 59, 7))
        .astimezone(pytz.utc),
        "dvd_release": datetime.datetime(2003, 10, 22, 10, 0, 0),
    },
]
dataframe = pandas.DataFrame(
    records,
    # In the loaded table, the column order reflects the order of the
    # columns in the DataFrame.
    columns=[
        "title",
        "release_year",
        "length_minutes",
        "release_date",
        "dvd_release",
    ],
    # 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
    )
)

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 esta muestra, sigue las instrucciones de configuración para Python incluidas en la Guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.

from google.cloud import bigquery

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

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

load_job = client.load_table_from_uri(
    uri, table_id, job_config=job_config
)  # Make an API request.

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

destination_table = client.get_table(table_id)  # Make an API request.
print("Loaded {} rows.".format(destination_table.num_rows))

Si deseas obtener más información, 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 esta muestra, sigue las instrucciones de configuración para Python incluidas en la Guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.

# 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 = bigquery.DatasetReference(project, dataset_id)
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 información, consulta Exporta datos de tablas.

Copia una tabla

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

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 incluidas en la Guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.


from google.cloud import bigquery

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

Para obtener más información, 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 esta muestra, sigue las instrucciones de configuración para Python incluidas en la Guía de inicio rápido de BigQuery sobre cómo usar 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

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

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

rows_to_insert = [
    {u"full_name": u"Phred Phlyntstone", u"age": 32},
    {u"full_name": u"Wylma Phlyntstone", u"age": 29},
]

errors = client.insert_rows_json(table_id, rows_to_insert)  # Make an API request.
if errors == []:
    print("New rows have been added.")
else:
    print("Encountered errors while inserting rows: {}".format(errors))

Para obtener más información, consulta Transmite datos a BigQuery.

Haz una lista de las tablas

En el siguiente ejemplo, se muestra cómo hacer 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 incluidas en la Guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.


from google.cloud import bigquery

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

Si deseas obtener más detalles, consulta Enumera tablas en un conjunto de datos.

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 esta muestra, sigue las instrucciones de configuración para Python incluidas en la Guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.


from google.cloud import bigquery

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

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

Verifica si una tabla existe

La API de BigQuery no proporciona un método exists nativo. En su lugar, obtén el recurso de la tabla y verifica si esa solicitud produce un error 404. Antes, la biblioteca cliente proporcionaba el ayudante exists() para que realizara 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 una 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 incluidas en la Guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.

from google.cloud import bigquery
from google.cloud.exceptions import NotFound

client = bigquery.Client()

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

Crea 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 incluidas en la Guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.

from google.cloud import bigquery

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

Para obtener más información, 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 mediante la propiedad etag, por lo que la lectura, la modificación y la escritura no son seguras.

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

Python

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

# from google.cloud import bigquery
# client = bigquery.Client()
# project = client.project
# dataset_ref = bigquery.DatasetReference(project, dataset_id)
# table_ref = dataset_ref.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 información, 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 esta muestra, sigue las instrucciones de configuración para Python incluidas en la Guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.


from google.cloud import bigquery

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

Para obtener más información, consulta Borra tablas.

Cambios en el código del conjunto de datos

Referencias del conjunto de datos

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

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

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

Enumera conjuntos de datos

En el siguiente ejemplo, se muestra cómo enumerar conjuntos de datos en un proyecto de Google Cloud.

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 incluidas en la Guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.


from google.cloud import bigquery

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

Para obtener más información, 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 esta muestra, sigue las instrucciones de configuración para Python incluidas en la Guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.


from google.cloud import bigquery

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

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. Antes, la biblioteca cliente proporcionaba el ayudante exists() para que realizara 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 un 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 incluidas en la Guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.

from google.cloud import bigquery
from google.cloud.exceptions import NotFound

client = bigquery.Client()

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

Crea 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 incluidas en la Guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.

from google.cloud import bigquery

# 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, with an explicit timeout.
# Raises google.api_core.exceptions.Conflict if the Dataset already
# exists within the project.
dataset = client.create_dataset(dataset, timeout=30)  # Make an API request.
print("Created dataset {}.{}".format(client.project, dataset.dataset_id))

Para obtener más información, 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 del conjunto de datos mediante la propiedad etag, por lo que la lectura, la modificación y la escritura no son seguras.

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

Python

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


from google.cloud import bigquery

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

Si deseas obtener más información, consulta Actualiza las propiedades del 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 incluidas en la Guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.


from google.cloud import bigquery

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

Para obtener más información, consulta Borra conjuntos de datos.