Introducción a la carga de datos en BigQuery

En esta página, se proporciona una descripción general de la carga de datos en BigQuery.

Descripción general

Son muchas las situaciones en las que puedes consultar datos sin cargarlos. En todos los demás casos, primero debes cargar tus datos en BigQuery antes de ejecutar las consultas.

Puedes llevar a cabo la carga de datos de las siguientes maneras:

Actualmente, no es posible cargar datos en BigQuery desde Google Drive, pero puedes consultar datos en Google Drive a través de una tabla externa.

Puedes cargar datos en una nueva tabla o partición, puedes agregar datos a una tabla o partición existente, o puedes reemplazar una tabla o partición. Si deseas obtener más información sobre el trabajo con particiones, consulta Cómo administrar tablas particionadas.

Cuando cargas datos en BigQuery, puedes suministrar el esquema de tabla o de partición; con determinados formatos de datos, también puedes usar la detección automática de esquemas.

Limitaciones

La carga de datos en BigQuery está sujeta a las siguientes limitaciones:

  • Por el momento, solo puedes cargar datos en BigQuery desde Cloud Storage o una fuente de datos legible (por ejemplo, desde tu máquina local).

Según la ubicación y el formato de tus datos de origen, podrían existir otras limitaciones. Si deseas obtener más información, consulta:

Formatos de datos compatibles

BigQuery es compatible con la carga de datos provenientes de Cloud Storage y fuentes de datos legibles en los siguientes formatos:

El formato de origen predeterminado para cargar datos es CSV. Si deseas cargar datos almacenados en otro formato de datos compatibles, especifica el formato de forma explícita. Cuando tus datos se cargan en BigQuery, se convierten en formato de columnas para Capacitor (formato de almacenamiento de BigQuery).

Elegir un formato de transferencia de datos

Puedes cargar datos en BigQuery en diferentes formatos. Cuando tus datos se cargan en BigQuery, se convierten en formato de columnas para Capacitor (formato de almacenamiento de BigQuery).

Cuando cargues datos, selecciona un formato de transferencia de datos en función de los siguientes factores:

  • El esquema de tus datos

    Avro, CSV, JSON, ORC y Parquet admiten datos planos. Las exportaciones de Avro, JSON, ORC, Parquet, Cloud Datastore y Cloud Firestore también admiten datos con campos repetidos y anidados. Los datos anidados o repetidos son útiles para expresar datos jerárquicos. Además, reducen la duplicación cuando se los datos desnormalizan.

  • Saltos de líneas incorporados

    Cuando cargues datos desde archivos JSON, las filas deben estar delimitadas por saltos de líneas. BigQuery espera que los archivos JSON delimitados por saltos de líneas contengan un solo registro por línea.

  • Limitaciones externas

    Tus datos pueden provenir de una base de datos de almacenamiento de documentos que guarda datos de forma nativa en formato JSON. O bien, tus datos pueden provenir de una fuente que solo exporta en formato CSV.

Cómo cargar datos codificados

BigQuery es compatible con la codificación UTF-8 tanto para datos anidados como repetidos, y planos. BigQuery es compatible con la codificación ISO-8859-1 para datos planos solo para archivos CSV.

Codificación de caracteres

De forma predeterminada, el servicio de BigQuery espera que todos los datos de origen estén codificados en UTF-8. Por otro lado, si tienes archivos de CSV con datos codificados en formato ISO-8859-1, debes especificar de forma explícita la codificación cuando importes tus datos a fin de que BigQuery pueda convertirlos con éxito en UTF-8 durante el proceso de importación. En la actualidad, solo es posible importar datos codificados como ISO-8859-1 o UTF-8. Ten en cuenta la siguiente información cuando especifiques la codificación de caracteres de tus datos:

  • Si no especificas una codificación o si especificas que tus datos son UTF-8 de forma explícita, pero proporcionas un archivo de CSV que no tiene codificación UTF-8, BigQuery intentará convertir el archivo de CSV en UTF-8.

    Por lo general, tus datos se importarán con éxito, pero es posible que no coincidan en cada byte con el resultado esperado. A fin de evitar esto, especifica la codificación correcta y vuelve a realizar la importación.

  • Los delimitadores deben codificarse como ISO-8859-1.

    Por lo general, se recomienda usar un delimitador estándar, como una tabulación, una barra vertical o una coma.

  • Si BigQuery no puede convertir un carácter, se lo convierte al carácter de reemplazo estándar de Unicode: �.
  • Los archivos JSON siempre deben estar codificados en UTF-8.

Si planeas cargar datos planos codificados en ISO-8859-1 mediante la API, especifica la propiedad encoding en la configuración de trabajo de load.

Carga datos comprimidos y sin comprimir

Se prefiere el formato binario Avro para cargar datos comprimidos y no comprimidos. Los datos Avro se cargan más rápido, porque pueden leerse en paralelo, incluso cuando los bloques de datos están comprimidos. Los archivos de Avro comprimidos no son compatibles, pero los bloques de datos comprimidos sí lo son. BigQuery admite los códecs DEFLATE y Snappy para bloques de datos comprimidos en archivos Avro.

El formato binario Parquet también es una buena opción, ya que brinda una codificación eficiente y por columna que suele generar un mejor índice de comprensión y archivos más pequeños. Además, los archivos Parquet aprovechan técnicas de compresión que permiten cargar archivos en paralelo. Los archivos comprimidos Parquet no son compatibles, pero los bloques de datos comprimidos sí lo son. BigQuery admite los códecs Snappy, GZip y LZO_1X para bloques de datos comprimidos en archivos Parquet.

El formato binario ORC ofrece beneficios similares a los del formato Parquet. Los datos en los archivos ORC se cargan rápido, ya que las franjas de datos se pueden leer en paralelo. Las filas en cada franja de datos se cargan de manera secuencial. A fin de optimizar el tiempo de carga, usa franjas de datos con un tamaño aproximado de 256 MB o menos. Los archivos ORC comprimidos no son compatibles, pero las franjas y pies de página de archivos comprimidos sí lo son. BigQuery es compatible con la compresión Zlib, Snappy, LZO y LZ4 para franjas y pies de página de archivos ORC.

Para otros formatos de datos, como CSV y JSON, BigQuery puede cargar archivos sin comprimir mucho más rápido que archivos comprimidos, ya que los no comprimidos se pueden leer en paralelo. Debido a que los archivos no comprimidos son más grandes, su uso puede llevar a limitaciones en el ancho de banda y a mayores costos de Cloud Storage para los datos almacenados en Cloud Storage antes de su carga en BigQuery. Además, deberías tener en cuenta que el orden en líneas no está garantizado para archivos comprimidos o sin comprimir. Es importante considerar estas cuestiones según tu caso práctico.

En general, si el ancho de banda es limitado, debes comprimir tus archivos CSV y JSON mediante gzip antes de subirlos a Cloud Storage. En la actualidad, cuando se cargan datos en BigQuery, gzip es el único tipo de compresión de archivos compatible con archivos CSV y JSON. Si la velocidad de carga es importante en tu app y tienes mucho ancho de banda para cargar tus datos, no comprimas los archivos.

Carga datos desnormalizados, anidados y repetidos

Muchos desarrolladores están acostumbrados a trabajar con bases de datos relacionales y esquemas de datos normalizados. La normalización hace que los datos duplicados no se almacenen y proporciona coherencia cuando se realizan actualizaciones regulares en los datos.

BigQuery tiene un mejor rendimiento cuando tus datos están desnormalizados. En lugar de preservar un esquema relacional como uno de estrella o de copo de nieve, puedes mejorar el rendimiento si desnormalizas tus datos y aprovechas los campos anidados y repetidos. Los campos anidados y repetidos pueden conservar relaciones sin el impacto en el rendimiento que produce conservar un esquema relacional (normalizado).

Los ahorros de almacenamiento de datos normalizados no son tan importantes en los sistemas modernos. Los aumentos en los costos de almacenamiento se compensan con lo que se gana en rendimiento gracias a la desnormalización de datos. Las uniones requieren coordinación de datos (ancho de banda de comunicación). La desnormalización localiza los datos en ranuras individuales para que la ejecución se pueda realizar en paralelo.

Si necesitas conservar relaciones mientras desnormalizas tus datos, usa campos repetidos y anidados en lugar de compactarlos por completo. Cuando los datos relacionales se compactan por completo, la comunicación de red (redistribución) puede tener un impacto negativo en el rendimiento.

Por ejemplo, la desnormalización de un esquema de pedidos sin usar campos repetidos y anidados podría requerir la agrupación por campos como order_id (cuando hay una relación de uno a varios). Debido a la redistribución involucrada, agrupar los datos es menos eficaz que desnormalizarlos mediante campos repetidos y anidados.

En algunas circunstancias, desnormalizar tus datos y usar campos repetidos y anidados podría no dar como resultado un mayor rendimiento. Evita la desnormalización en los casos prácticos siguientes:

  • Tienes un esquema en estrella con dimensiones que cambian con frecuencia.
  • Si BigQuery complementa un sistema de procesamiento de transacciones en línea (OLTP) con mutación a nivel de la fila, pero no puede reemplazarlo.

Los campos anidados y repetidos son compatibles con los siguientes formatos de datos:

  • Avro
  • JSON (delimitado por saltos de línea)
  • ORC
  • Parquet
  • Exportaciones de Cloud Datastore
  • Exportaciones de Cloud Firestore

Si deseas obtener más información sobre cómo especificar campos anidados y repetidos en tu esquema cuando cargas datos, consulta Cómo especificar campos anidados y repetidos.

Detección automática de esquemas

La detección automática de esquemas está disponible cuando cargas datos en BigQuery y cuando consultas una fuente de datos externa.

Cuando la detección automática está habilitada, BigQuery inicia el proceso de inferencia mediante la selección de un archivo aleatorio en la fuente de datos y el análisis de hasta 100 filas de datos que usa como muestra representativa. Luego, BigQuery examina cada campo y trata de asignarle un tipo de datos según los valores de la muestra.

Puedes usar la detección automática de esquemas cuando cargas archivos JSON o CSV. La detección automática de esquemas no está disponible para archivos Avro, ORC o Parquet, ni exportaciones de Cloud Datastore o Cloud Firestore, debido a que la información del esquema en estos formatos es autodescriptiva.

Carga datos desde otros servicios de Google

Servicio de transferencia de datos de BigQuery

El Servicio de transferencia de datos de BigQuery automatiza la carga de datos en BigQuery desde los siguientes servicios:

Aplicaciones de software como servicio de Google (SaaS) Proveedores externos de almacenamiento en la nube Almacenes de datos Además, varias transferencias de terceros (Beta) están disponibles en Google Cloud Platform Marketplace.

Una vez que hayas configurado una transferencia de datos, el Servicio de transferencia de datos de BigQuery programa y administra de forma automática cargas de datos recurrentes desde la aplicación de origen hacia BigQuery.

Google Analytics 360

A fin de aprender a exportar tu sesión y acceder a datos desde una vista de informes de Google Analytics 360 en BigQuery, consulta BigQuery Export en el Centro de ayuda de Google Analytics.

Para obtener ejemplos de consultas de datos de Google Analytics en BigQuery, consulta la guía de soluciones de BigQuery en el Centro de ayuda de Google Analytics.

Cloud Storage

BigQuery es compatible con la carga de datos desde Cloud Storage. Si deseas obtener más información, consulta Cómo cargar datos desde Cloud Storage.

Cloud Datastore

BigQuery es compatible con la carga de datos desde exportaciones de Cloud Datastore. Si deseas obtener más información, consulta Cómo cargar datos desde exportaciones de Cloud Datastore.

Cloud Firestore

BigQuery es compatible con la carga de datos desde exportaciones de Cloud Firestore. Para obtener más información, consulta Cómo cargar datos desde exportaciones de Cloud Firestore.

Google Cloud Dataflow

Cloud Dataflow puede cargar datos directamente en BigQuery. Si deseas obtener más información sobre cómo usar Cloud Dataflow para leer y escribir en BigQuery, consulta E/S de BigQuery en la documentación de Apache Beam.

Alternativas a la carga de datos

No es necesario que cargues datos antes de ejecutar consultas en las siguientes situaciones:

Conjuntos de datos públicos
Los conjuntos de datos públicos son conjuntos que se almacenan en BigQuery y se comparten con el público. Si deseas obtener más información, consulta conjuntos de datos públicos.
Conjuntos de datos compartidos
Puedes compartir conjuntos de datos almacenados en BigQuery. Si alguien compartió un conjunto de datos contigo, puedes ejecutar consultas en él sin necesidad de cargar los datos.
Fuentes de datos externas
Puedes omitir el proceso de cargar datos; para ello, crea una tabla basada en una fuente de datos externa. Si deseas obtener información acerca de los beneficios y las limitaciones de este enfoque, consulta fuentes de datos externas.
Archivos de registros de Stackdriver
Stackdriver Logging proporciona una opción para exportar archivos de registro a BigQuery. Consulta Exporta con el visor de registros para obtener más información.

Otra alternativa para cargar datos es transmitirlos de a un registro a la vez. La transmisión se suele usar cuando se necesita que los datos estén disponibles de inmediato. Para obtener información sobre la transmisión, consulta la sección Transmite datos a BigQuery.

Política de cuotas

Si deseas obtener información sobre la política de cuotas para cargar datos, consulta Trabajos de carga en la página Cuotas y límites.

Precios

Actualmente, no se cobra por cargar datos en BigQuery. Para obtener más información, consulta la página de Precios.

Próximos pasos

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

Enviar comentarios sobre…

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