Elegir una biblioteca de Python
En BigQuery, puedes elegir entre tres bibliotecas de Python en función de tu caso práctico.
Caso práctico | Mantenido por | Descripción | |
---|---|---|---|
BigQuery DataFrames | Procesamiento de datos y operaciones de aprendizaje automático basados en Python con procesamiento del lado del servidor (por ejemplo, mediante el uso de slots) | APIs de Pandas y Scikit-learn implementadas con la función de envío al lado del servidor. Para obtener más información, consulta Introducción a BigQuery DataFrames. | |
pandas-gbq | Procesamiento de datos basado en Python mediante la copia de datos del lado del cliente | Biblioteca de código abierto mantenida por PyData y colaboradores voluntarios | Te permite mover datos a y desde DataFrames de Python en el lado del cliente. Para obtener más información, consulta la documentación y el código fuente. |
google-cloud-bigquery | Implementación, administración y consultas basadas en SQL de BigQuery | Biblioteca de código abierto mantenida por Google | Paquete de Python que encapsula todas las APIs de BigQuery. Para obtener más información, consulta la documentación y el código fuente. |
Usar pandas-gbq y google-cloud-bigquery
La biblioteca pandas-gbq
proporciona una interfaz sencilla para ejecutar consultas y subir dataframes de pandas a BigQuery. Es un envoltorio ligero
de la biblioteca de cliente de BigQuery,
google-cloud-bigquery
. Ambas bibliotecas se centran en ayudarte a realizar análisis de datos con SQL.
Instalar las bibliotecas
Para usar los ejemplos de código de esta guía, instala el paquete pandas-gbq
y las bibliotecas de cliente de Python de BigQuery.
Instala los paquetes
pandas-gbq
y
google-cloud-bigquery
.
pip install --upgrade pandas-gbq 'google-cloud-bigquery[bqstorage,pandas]'
Cómo ejecutar consultas
Ambas bibliotecas permiten consultar datos almacenados en BigQuery. Entre las principales diferencias entre las bibliotecas se incluyen las siguientes:
pandas-gbq | google-cloud-bigquery | |
---|---|---|
Sintaxis de SQL predeterminada | GoogleSQL (configurable con pandas_gbq.context.dialect ) |
GoogleSQL |
Configuraciones de consultas | Se envía como diccionario en el formato de una solicitud de consulta. | Usa la clase QueryJobConfig , que contiene propiedades para las distintas opciones de configuración de la API. |
Consultar datos con la sintaxis de GoogleSQL
En el siguiente ejemplo se muestra cómo ejecutar una consulta de GoogleSQL especificando y sin especificar explícitamente un proyecto. En ambas bibliotecas, si no se especifica ningún proyecto, se determinará a partir de las credenciales predeterminadas.
pandas-gbq
:
google-cloud-bigquery
:
Consultar datos con la sintaxis de SQL antiguo
En el siguiente ejemplo se muestra cómo ejecutar una consulta con la sintaxis de SQL antiguo. Consulta la guía de migración a GoogleSQL para obtener información sobre cómo actualizar tus consultas a GoogleSQL.
pandas-gbq
:
google-cloud-bigquery
:
Usar la API Storage de BigQuery para descargar resultados de gran tamaño
Usa la API Storage de BigQuery para acelerar las descargas de resultados de gran tamaño entre 15 y 31 veces.
pandas-gbq
:
google-cloud-bigquery
:
Ejecutar una consulta con una configuración
Es necesario enviar una configuración con una solicitud a la API de BigQuery para realizar determinadas 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 debe enviarse como un diccionario con el formato de una solicitud de consulta.
En google-cloud-bigquery
, se proporcionan clases de configuración de trabajos, como QueryJobConfig
, que contienen las propiedades necesarias para configurar trabajos complejos.
En el siguiente ejemplo se muestra cómo ejecutar una consulta con parámetros con nombre.
pandas-gbq
:
google-cloud-bigquery
:
Cargar un DataFrame de pandas en una tabla de BigQuery
Ambas bibliotecas permiten subir datos de un DataFrame de pandas a una tabla nueva de BigQuery. Entre las principales diferencias se incluyen las siguientes:
pandas-gbq | google-cloud-bigquery | |
---|---|---|
Asistencia para escribir | Convierte el DataFrame al formato CSV antes de enviarlo a la API, que no admite valores anidados ni de matriz. | Convierte el DataFrame al formato Parquet o CSV antes de enviarlo a la API, que admite valores anidados y de matriz. Elige Parquet para los valores de struct y array, y CSV para la flexibilidad de serialización de fechas y horas. Parquet es la opción predeterminada. Ten en cuenta que pyarrow , que es el motor de Parquet que se usa para enviar los datos de DataFrame a la API de BigQuery, debe estar instalado para cargar el DataFrame en una tabla. |
Cargar configuraciones | También puedes especificar un esquema de tabla. | Usa la clase LoadJobConfig , que contiene propiedades para las distintas opciones de configuración de la API. |
pandas-gbq
:
google-cloud-bigquery
:
google-cloud-bigquery
requiere la biblioteca pyarrow
para serializar
un DataFrame de pandas en un archivo Parquet.
Instala el paquete pyarrow
:
pip install pyarrow
Funciones no compatibles con pandas-gbq
Aunque la biblioteca pandas-gbq
proporciona una interfaz útil para consultar datos y escribir datos en tablas, no abarca muchas de las funciones de la API de BigQuery, entre las que se incluyen las siguientes:
- Gestionar conjuntos de datos, lo que incluye crear conjuntos de datos, actualizar propiedades de conjuntos de datos y eliminar conjuntos de datos
- Cargar datos en BigQuery desde formatos distintos de pandas DataFrames o desde pandas DataFrames con columnas JSON
- Gestionar tablas, como listar tablas de un conjunto de datos, copiar datos de una tabla y eliminar tablas
- Exportar datos de BigQuery directamente a Cloud Storage
Solucionar errores del grupo de conexiones
Error string: Connection pool is full, discarding connection: bigquery.googleapis.com.
Connection pool size: 10
Si usas el objeto de cliente predeterminado de BigQuery en Python, solo podrás usar un máximo de 10 hilos, ya que el tamaño predeterminado del grupo de Python HTTPAdapter es 10. Para usar más de 10 conexiones, crea un requests.adapters.HTTPAdapter
objeto personalizado. Por ejemplo:
client = bigquery.Client() adapter = requests.adapters.HTTPAdapter(pool_connections=128, pool_maxsize=128,max_retries=3) client._http.mount("https://",adapter) client._http._auth_request.session.mount("https://",adapter) query_job = client.query(QUERY)