Migra desde pandas-gbq

La biblioteca pandas-gbq es un proyecto liderado por la comunidad pandas. La biblioteca cliente de BigQuery, google-cloud-bigquery, es la biblioteca oficial de Python para interactuar con BigQuery. Si usas la biblioteca pandas-gbq, también usas la biblioteca google-cloud-bigquery. Debido a que pandas-gbq usa google-cloud-bigquery para realizar llamadas a la API a BigQuery. Proporciona una interfaz fácil de pandas a BigQuery, pero carece de varias de las características proporcionadas por la biblioteca de google-cloud-bigquery.

En este tema, se proporcionan detalles sobre los cambios que necesitas para actualizar tu código de Python a fin de usar google-cloud-bigquery en vez de pandas-gbq. Los ejemplos de códigos incluidos en este tema usan las versiones siguientes de las dos bibliotecas:

google-cloud-bigquery[pandas,pyarrow]==1.7.0
pandas-gbq==0.7.0

Las diferencias clave en el nivel de funcionalidad y compatibilidad entre las dos bibliotecas incluyen lo siguiente:

pandas-gbq google-cloud-bigquery
Asistencia Biblioteca de código abierto mantenida por PyData y contribuyentes voluntarios Biblioteca de código abierto mantenida por Google y contribuyentes voluntarios
Funcionalidad de la API de BigQuery cubierta Limitado a ejecutar consultas y guardar datos de DataFrames de pandas en tablas Funcionalidad de la API de BigQuery completa con compatibilidad agregada para escritura y lectura de DataFrames de pandas y un Jupyter automático a fin de ejecutar consultas
Cadencia de característica nuevas Características nuevas agregadas a la biblioteca solo si se implementan por los contribuyentes voluntarios Las características nuevas implementadas como si se lanzan en la API de BigQuery
documentos/fuente documentos/fuente

Ejecuta consultas

Ambas bibliotecas son compatibles con los datos de consultas almacenados en BigQuery. Las diferencias clave entre las bibliotecas incluyen lo siguiente:

pandas-gbq google-cloud-bigquery
Sintaxis de SQL predeterminada SQL heredado SQL estándar
Configuraciones de consulta Enviado como diccionario en el formato especificado en la referencia de REST de BigQuery. Usa la clase QueryJobConfig, que contiene propiedades para varias de las opciones de configuración de la API.

Consulta datos con la sintaxis SQL estándar

En el siguiente ejemplo, se muestra cómo ejecutar una consulta de SQL estándar con especificación explícita un proyecto o sin ella. Para ambas bibliotecas, si un proyecto no está especificado, se determinará desde las credenciales predeterminadas.

pandas-gbq:

import pandas

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

# Run a Standard SQL query using the environment's default project
df = pandas.read_gbq(sql, dialect='standard')

# Run a Standard SQL query with the project set explicitly
project_id = 'your-project-id'
df = pandas.read_gbq(sql, project_id=project_id, dialect='standard')

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

# Run a Standard SQL query using the environment's default project
df = client.query(sql).to_dataframe()

# Run a Standard SQL query with the project set explicitly
project_id = 'your-project-id'
df = client.query(sql, project=project_id).to_dataframe()

Consulta datos con la sintaxis de SQL heredado

En el siguiente ejemplo, se muestra cómo ejecutar una consulta con la sintaxis de SQL heredado. Consulta la Guía de migración de SQL estándar para obtener información sobre cómo actualizar tus consultas en SQL estándar.

pandas-gbq:

import pandas

sql = """
    SELECT name
    FROM [bigquery-public-data:usa_names.usa_1910_current]
    WHERE state = 'TX'
    LIMIT 100
"""

df = pandas.read_gbq(sql, dialect='legacy')

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
"""
query_config = bigquery.QueryJobConfig(use_legacy_sql=True)

df = client.query(sql, job_config=query_config).to_dataframe()

Ejecuta una consulta con una configuración

Se requiere enviar una configuración con una consulta de la API de BigQuery a fin de realizar ciertas operaciones complejas, como ejecutar una consulta parametrizada o especificar una tabla de destino para almacenar los resultados de la consulta. En pandas-gbq, la configuración se debe enviar como un diccionario en el formato especificado en la referencia de REST de BigQuery. En google-cloud-bigquery, se proporcionan las clases de configuración de trabajos, como QueryJobConfig, que contiene las propiedades necesarias para configurar trabajos complejos.

En el siguiente ejemplo, se muestra cómo ejecutar una consulta mediante parámetros asignados.

pandas-gbq:

import pandas

sql = """
    SELECT name
    FROM `bigquery-public-data.usa_names.usa_1910_current`
    WHERE state = @state
    LIMIT @limit
"""
query_config = {
    'query': {
        'parameterMode': 'NAMED',
        'queryParameters': [
            {
                'name': 'state',
                'parameterType': {'type': 'STRING'},
                'parameterValue': {'value': 'TX'}
            },
            {
                'name': 'limit',
                'parameterType': {'type': 'INTEGER'},
                'parameterValue': {'value': 100}
            }
        ]
    }
}

df = pandas.read_gbq(sql, configuration=query_config)

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 = @state
    LIMIT @limit
"""
query_config = bigquery.QueryJobConfig(
    query_parameters=[
        bigquery.ScalarQueryParameter('state', 'STRING', 'TX'),
        bigquery.ScalarQueryParameter('limit', 'INTEGER', 100)
    ]
)

df = client.query(sql, job_config=query_config).to_dataframe()

Carga un DataFrame de pandas a una tabla de BigQuery

Ambas bibliotecas son compatibles con la carga de datos desde DataFrame de pandas a una tabla nueva en BigQuery. Las diferencias clave incluyen lo siguiente:

pandas-gbq google-cloud-bigquery
Asistencia de tipo Convierte el formato DataFrame en el formato CSV antes de enviarlo a la API, lo cual no es compatible con valores de arreglo o anidados. Convierte el formato DataFrame en el formato Parquet antes de enviarlo a la API, que es compatible con los valores de arreglo y anidados. Ten en cuenta que pyarrow, que es el motor de Parquet usado para enviar los datos de DataFrame a la API de BigQuery, se debe instalar a fin de cargar DataFrame en una tabla.
Configuraciones de carga Enviado como diccionario en el formato especificado en la referencia de REST de BigQuery. Usa la clase LoadJobConfig, que contiene propiedades para varias de las opciones de configuración de la API.

pandas-gbq:

import pandas

df = pandas.DataFrame(
    {
        'my_string': ['a', 'b', 'c'],
        'my_int64': [1, 2, 3],
        'my_float64': [4.0, 5.0, 6.0],
    }
)
full_table_id = 'my_dataset.new_table'
project_id = 'my-project-id'

df.to_gbq(full_table_id, project_id=project_id)

google-cloud-bigquery:

from google.cloud import bigquery
import pandas

df = pandas.DataFrame(
    {
        'my_string': ['a', 'b', 'c'],
        'my_int64': [1, 2, 3],
        'my_float64': [4.0, 5.0, 6.0],
    }
)
client = bigquery.Client()
dataset_ref = client.dataset('my_dataset')
table_ref = dataset_ref.table('new_table')

client.load_table_from_dataframe(df, table_ref).result()

Características no compatibles con pandas-gbq

La biblioteca pandas-gbq proporciona una interfaz útil para consultar datos y escribirlos en tablas, pero no cubre varias de las características de la API de BigQuery, que incluyen, entre otras las siguientes:

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

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