Migra desde el paquete de Datalab para Python

El paquete de datalab para Python permite interactuar con los servicios de Google Cloud Platform mediante notebooks de Cloud Datalab. El paquete de datalab para Python incluye comandos mágicos de Jupyter y módulos de Python, como google.datalab.bigquery, que son compatibles con un subconjunto de los métodos de la API de BigQuery.

google-cloud-bigquery, la biblioteca cliente de BigQuery, es la biblioteca oficial de Python que se usa para interactuar con BigQuery. La biblioteca cliente proporciona un comando mágico de celda de Jupyter para ejecutar consultas, así como compatibilidad con todas las funciones de BigQuery y funciones que permiten enviar y recuperar datos mediante DataFrames de Pandas. Los siguientes ejemplos de código ilustran cómo realizar operaciones comunes de BigQuery con la biblioteca google-cloud-bigquery para desarrolladores que ya están familiarizados con el paquete de datalab para Python.

Consulta el archivo requirements.txt para ver las versiones de las bibliotecas que se usan con estos fragmentos de código.

Usa comandos mágicos y de shell en Jupyter

Ambas bibliotecas admiten la consulta de datos almacenados en BigQuery con un comando mágico de celda. Las diferencias clave entre los enfoques que aplican estas dos bibliotecas en cuanto a los comandos mágicos incluyen lo siguiente:

datalab google-cloud-bigquery
Nombre del comando mágico bq bigquery
Nombre de la extensión de Jupyter (que se usa para cargar los comandos mágicos) google.datalab.kernel google.cloud.bigquery
Ejecución de las consultas La definición y ejecución de una consulta se pueden realizar en pasos separados. La consulta siempre se realiza inmediatamente cuando se ejecuta el comando mágico.
Funciones que abarcan los comandos mágicos No se admiten algunas funciones. Solo se pueden realizar consultas con los comandos mágicos. Para otras funciones de BigQuery, deben usarse los métodos de la herramienta de línea de comandos o de google.cloud.bigquery.Client.
Guardar los resultados de una consulta El comando mágico de una consulta permite guardar los resultados en una tabla de destino, pero no en una variable. Si deseas guardar los resultados de una consulta en una variable, ejecuta la consulta con Python en lugar de usar comandos mágicos (ver el ejemplo). El comando mágico de consulta permite guardar los resultados en una variable, pero no en una tabla de destino. Si deseas guardar los resultados de una consulta en una tabla de destino, ejecuta la consulta con Python en lugar de usar comandos mágicos (ver el ejemplo).

Instala la biblioteca cliente para Python

A fin de instalar la biblioteca cliente de BigQuery junto con las dependencias necesarias para trabajar con DataFrames de Pandas, ingresa el siguiente comando en tu notebook:

!pip install --upgrade google-cloud-bigquery[pandas,pyarrow]

Carga los comandos mágicos

Los comandos mágicos de Jupyter son accesos directos específicos para notebooks que te permiten ejecutar comandos con una sintaxis mínima. Los notebooks de Jupyter tienen muchos comandos integrados precargados. Los paquetes de datalab y google-cloud-python para Python implementan comandos mágicos adicionales que puedes cargar en los notebooks de Jupyter (incluido Cloud Datalab) para interactuar con Google Cloud Platform.

datalab

Los comandos mágicos de datalab están precargados en los notebooks de Cloud Datalab. Para cargar los comandos mágicos en un notebook de Jupyter, ingresa el siguiente comando:

%load_ext google.datalab.kernel

Si quieres conocer otras opciones para cargar los comandos mágicos, consulta el repositorio de origen de la biblioteca de datalab.

google-cloud-bigquery

Para cargar el comando mágico de BigQuery, ingresa el siguiente comando:

%load_ext google.cloud.bigquery

El comando mágico de celda de BigQuery funciona en cualquier notebook que tenga instalado el paquete google-cloud-bigquery. Para usar el comando mágico de celda, debes estar usando la versión 0.32.0 de la biblioteca cliente, o una versión más reciente.

Ejecuta consultas

En los siguientes ejemplos, se muestra cómo usar un comando mágico de celda para ejecutar una consulta. En ambos ejemplos, los resultados aparecen debajo de la celda de entrada después de la ejecución de la consulta.

datalab

Los resultados de la consulta aparecen debajo de la celda de entrada como un elemento QueryResultsTable.
%%bq query
SELECT word, SUM(word_count) as count
FROM `bigquery-public-data.samples.shakespeare`
GROUP BY word
ORDER BY count ASC
LIMIT 100

google-cloud-bigquery

Los resultados de la consulta aparecen debajo de la celda de entrada en un DataFrame de Pandas.
%%bigquery
SELECT word, SUM(word_count) as count
FROM `bigquery-public-data.samples.shakespeare`
GROUP BY word
ORDER BY count ASC
LIMIT 100

Ejecuta una consulta y almacena los resultados en una variable

En el siguiente ejemplo, se muestra cómo ejecutar una consulta y almacenar los resultados en una variable llamada my_variable.

datalab

El comando mágico de consulta de datalab puede guardar una consulta de SQL sin ejecutarla. Para ello, pasa un nombre con las marcas --name o -n.
%%bq query -n my_query
SELECT name FROM `bigquery-public-data.usa_names.usa_1910_current`
WHERE state = "TX"
LIMIT 100
La consulta guardada se puede ejecutar por separado, y los resultados se almacenan en una variable.
import google.datalab.bigquery as bq

my_variable = my_query.execute().result().to_dataframe()

google-cloud-bigquery

%%bigquery my_variable
SELECT name FROM `bigquery-public-data.usa_names.usa_1910_current`
WHERE state = "TX"
LIMIT 100

Ejecuta una consulta con parámetros

En el siguiente ejemplo, se muestra cómo ejecutar una consulta con parámetros. Con las consultas de este tipo, puedes definir parámetros de consulta y ejecutar la consulta en celdas separadas. Consulta Ejecuta consultas con parámetros para obtener más información.

datalab

Define la consulta.
%%bq query -n my_query
SELECT word, SUM(word_count) as count
FROM `bigquery-public-data.samples.shakespeare`
WHERE corpus = @corpus_name
GROUP BY word
ORDER BY count ASC
LIMIT @limit
Establece los parámetros.
corpus_name = "hamlet"
limit = 10
Ejecuta la consulta.
%%bq execute -q my_query --to-dataframe
parameters:
- name: corpus_name
  type: STRING
  value: $corpus_name
- name: limit
  type: INTEGER
  value: $limit

google-cloud-bigquery

Define los parámetros.
params = {"corpus_name": "hamlet", "limit": 10}
Define y ejecuta la consulta.
%%bigquery --params $params
SELECT word, SUM(word_count) as count
FROM `bigquery-public-data.samples.shakespeare`
WHERE corpus = @corpus_name
GROUP BY word
ORDER BY count ASC
LIMIT @limit

Otros comandos

La biblioteca de datalab contiene comandos mágicos para muchos tipos de operaciones de BigQuery, mientras que la biblioteca de google-cloud-bigquery tiene un comando mágico de celda para ejecutar consultas. Si deseas ejecutar comandos para otras operaciones aparte de las consultas, usa la herramienta de línea de comandos de BigQuery. En los siguientes ejemplos, se muestra cómo crear una lista de todas las tablas del conjunto de datos samples del proyecto bigquery-public-data con un comando mágico de celda de datalab o un comando de shell de BigQuery.

datalab

%bq tables list --dataset bigquery-public-data.samples

La herramienta de línea de comandos de BigQuery

Para comenzar a usar la herramienta de línea de comandos de BigQuery, que se instala como parte del SDK de Cloud, sigue las instrucciones de instalación del SDK de Cloud. Ten en cuenta que los comandos de shell de un notebook deben estar precedidos por un !. Una vez que la herramienta de línea de comandos de BigQuery esté configurada y disponible en tu notebook, ingresa el siguiente comando, que equivale al comando mágico de celda de datalab que se mencionó antes.

!bq ls bigquery-public-data:samples

Para obtener una lista completa de comandos, ingresa lo siguiente:

!bq help

Usa código de Python

Además de los comandos mágicos de Jupyter, también puedes realizar operaciones de BigQuery con métodos de Python en los paquetes de datalab y google-cloud-bigquery.

Ejecuta una consulta

Ambas bibliotecas permiten ejecutar consultas y mostrar los resultados como un DataFrame de Pandas.

datalab

import google.datalab.bigquery as bq

sql = """
    SELECT name FROM `bigquery-public-data.usa_names.usa_1910_current`
    WHERE state = "TX"
    LIMIT 100
"""
df = bq.Query(sql).execute().result().to_dataframe()

google-cloud-bigquery

from google.cloud import bigquery

client = bigquery.Client()
sql = """
    SELECT name FROM `bigquery-public-data.usa_names.usa_1910_current`
    WHERE state = "TX"
    LIMIT 100
"""
df = client.query(sql).to_dataframe()

Carga datos en una tabla de BigQuery

En el siguiente ejemplo, se muestra cómo crear un nuevo conjunto de datos y cargar en una tabla nueva los datos de un archivo CSV ubicado en Cloud Storage.

datalab

import google.datalab.bigquery as bq

# Create the dataset
dataset_id = 'import_sample'
bq.Dataset(dataset_id).create()

# Create the table
schema = [
    {'name': 'name', 'type': 'STRING'},
    {'name': 'post_abbr', 'type': 'STRING'},
]
table = bq.Table(
    '{}.us_states'.format(dataset_id)).create(schema=schema)
table.load(
    'gs://cloud-samples-data/bigquery/us-states/us-states.csv',
    mode='append',
    source_format='csv',
    csv_options=bq.CSVOptions(skip_leading_rows=1)
)  # Waits for the job to complete

google-cloud-bigquery

from google.cloud import bigquery

client = bigquery.Client(location='US')

# Create the dataset
dataset_id = 'import_sample'
dataset = client.create_dataset(dataset_id)

# Create the table
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
)
load_job = client.load_table_from_uri(
    'gs://cloud-samples-data/bigquery/us-states/us-states.csv',
    dataset.table('us_states'),
    job_config=job_config
)
load_job.result()  # Waits for table load to complete.

Consulta las páginas sobre cómo cargar datos desde Cloud Storage, cargar datos en BigQuery desde una fuente de datos local y transmitir datos a BigQuery a fin de obtener más ejemplos acerca del uso de la biblioteca cliente de BigQuery para Python.

Carga un DataFrame de pandas a una tabla de BigQuery

En el siguiente ejemplo, se muestra cómo crear un conjunto de datos nuevo y cargar datos de un DataFrame de Pandas en una tabla nueva.

Algunas operaciones de BigQuery, como la creación de un conjunto de datos, requieren una ubicación. Si se suministra una ubicación al cliente de google-cloud-bigquery durante la inicialización, esa será la ubicación predeterminada de los trabajos, los conjuntos de datos y las tablas que se creen con el cliente. La biblioteca de datalab no proporciona una manera de especificar las ubicaciones de los trabajos o los conjuntos de datos, lo cual puede llevar a que observes comportamientos inesperados. Consulta Ubicaciones de conjuntos de datos para obtener más información.

datalab

La biblioteca de datalab realiza una inserción de transmisión cuando se cargan datos de un DataFrame de Pandas en una tabla de BigQuery. Debido a esto, es posible que los datos no estén disponibles de forma inmediata para realizar consultas. Consulta Transmite datos a BigQuery para obtener más información.
import google.datalab.bigquery as bq
import pandas

# Create the dataset
dataset_id = 'import_sample'
bq.Dataset(dataset_id).create()

# Create the table and load the data
dataframe = pandas.DataFrame([
    {'title': 'The Meaning of Life', 'release_year': 1983},
    {'title': 'Monty Python and the Holy Grail', 'release_year': 1975},
    {'title': 'Life of Brian', 'release_year': 1979},
    {
        'title': 'And Now for Something Completely Different',
        'release_year': 1971
    },
])
schema = bq.Schema.from_data(dataframe)
table = bq.Table(
    '{}.monty_python'.format(dataset_id)).create(schema=schema)
table.insert(dataframe)  # Starts steaming insert of data

google-cloud-bigquery

La biblioteca cliente de BigQuery convierte el DataFrame de Pandas al formato Parquet y realiza un trabajo de carga (y no una inserción de transmisión). Los datos están disponibles de inmediato una vez que finaliza el trabajo de carga.
from google.cloud import bigquery
import pandas

client = bigquery.Client(location='US')

dataset_id = 'import_sample'
dataset = client.create_dataset(dataset_id)

# Create the table and load the data
dataframe = pandas.DataFrame([
    {'title': 'The Meaning of Life', 'release_year': 1983},
    {'title': 'Monty Python and the Holy Grail', 'release_year': 1975},
    {'title': 'Life of Brian', 'release_year': 1979},
    {
        'title': 'And Now for Something Completely Different',
        'release_year': 1971
    },
])
table_ref = dataset.table('monty_python')
load_job = client.load_table_from_dataframe(dataframe, table_ref)
load_job.result()  # Waits for table load to complete.
¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Si necesitas ayuda, visita nuestra página de asistencia.