Administra datos de tablas particionadas

En este documento, se describe cómo administrar datos de tablas particionadas en BigQuery. Puedes trabajar con datos de tablas particionadas si sigues estas acciones:

  • Cargar datos en una tabla particionada
  • Examinar (o previsualizar) datos de tablas particionadas
  • Consultar datos de la tabla particionada
  • Anexar o reemplazar datos de la tabla particionada
  • Modificar datos de la tabla particionada mediante declaraciones de lenguaje de manipulación de datos
  • Copiar datos de la tabla particionada
  • Transmitir datos en tablas particionadas
  • Exportar datos de la tabla particionada

Si deseas obtener más información sobre cómo administrar esquemas de tablas, consulta Modifica esquemas de tablas.

Carga datos en una tabla particionada

Puedes crear una tabla particionada cuando cargas datos o puedes crear una tabla particionada vacía y cargar los datos más tarde. Cuando cargas datos en una tabla particionada, puedes usar la detección automática de esquemas para formatos de datos admitidos o especificar el esquema.

Para obtener más información sobre la carga de datos, consulta la documentación sobre el formato y la ubicación de tus datos de origen:

Explora datos de la tabla

Puedes explorar los datos de tablas particionadas de las siguientes maneras:

  • Con GCP Console o la IU web de BigQuery
  • Usando el comando bq head de la herramienta de línea de comandos
  • Mediante una llamada al método tabledata.list de la API
  • Con las bibliotecas cliente

Permisos necesarios

Como mínimo, para explorar los datos de la tabla y la partición, debes tener los permisos bigquery.tables.getData. Las siguientes funciones predefinidas de Cloud IAM incluyen los permisos bigquery.tables.getData:

  • bigquery.dataViewer
  • bigquery.dataEditor
  • bigquery.dataOwner
  • bigquery.admin

Además, si un usuario tiene permisos de bigquery.datasets.create, cuando cree un conjunto de datos, se le otorgará el acceso bigquery.dataOwner. El acceso bigquery.dataOwner permite al usuario explorar los datos de tablas y particiones en el conjunto de datos.

Para obtener más información sobre las funciones de Cloud IAM y los permisos en BigQuery, consulta los permisos y funciones predefinidas.

Explora los datos de tablas particionadas

Para explorar los datos de tablas particionadas, sigue estos pasos:

Console

  1. En GCP Console, en el panel de navegación, haz clic en un conjunto de datos para enumerar sus tablas y vistas.

  2. Haz clic en una tabla particionada de la lista.

  3. Haz clic en la pestaña Detalles (Details).

    Detalles de la tabla

  4. Observa el valor de Número de filas (Number of Rows). Es posible que necesites este valor para controlar el punto de partida de tus resultados mediante la CLI o la API.

    Cantidad de filas

  5. Haz clic en la pestaña Vista previa. Verás un conjunto de datos de muestra. Ten en cuenta que no puedes obtener una vista previa de particiones individuales mediante GCP Console.

IU clásica

  1. En la IU web de BigQuery, en el panel de navegación, haz clic en la flecha azul a la izquierda de tu conjunto de datos para expandirlo o haz doble clic en el nombre del conjunto de datos. De esta manera, se muestran las tablas y vistas en el conjunto de datos.

  2. Haz clic en una tabla particionada de la lista.

  3. Haz clic en Detalles (Details) y anota el valor de Número de filas. Es posible que necesites este valor para controlar el punto de partida de tus resultados mediante la CLI o la API.

  4. Haz clic en Vista previa (Preview). Verás un conjunto de datos de muestra. Ten en cuenta que no puedes obtener una vista previa de particiones individuales mediante la IU web de BigQuery.

    Vista previa de la tabla

CLI

Emite el comando bq head con la marca --max_rows para enumerar todos los campos en una cantidad determinada de filas en la tabla. Si no se especifica --max_rows, el valor predeterminado es 100. Especifica una partición que desees explorar mediante el decorador de particiones, por ejemplo, $20180224.

Debido a que el comando bq head no crea un trabajo de consulta, los comandos bq head no aparecen en tu historial de consultas y no se te cobra por ellos.

Para explorar un subconjunto de campos en la tabla (incluidos los campos anidados y repetidos), usa la marca --selected_fields y, luego, ingresa los campos como una lista separada por comas.

Para especificar el número de filas que se deben omitir antes de mostrar los datos de la tabla, usa la marca --start_row=integer (o el acceso directo -s). El valor predeterminado es 0. Puedes recuperar el número de filas de una tabla mediante el comando bq show para recuperar la información de la tabla.

Si la tabla que exploras está en un proyecto que no es el predeterminado, debes agregar el ID del proyecto al comando con el formato siguiente: project_id:dataset.table.

bq head \
--max_rows integer1 \
--start_row integer2 \
--selected_fields "fields" \
project_id:dataset.table$partition

Donde:

  • integer1 es el número de filas que se mostrará.
  • integer2 es el número de filas que se deben omitir antes de mostrar los datos.
  • fields es una lista de campos separados por comas.
  • project_id es el ID del proyecto.
  • dataset es el nombre del conjunto de datos que contiene la tabla.
  • table es el nombre de la tabla que se debe explorar.
  • $partition es el decorador de particiones.

Ejemplos:

Ingresa el comando siguiente para enumerar todos los campos en las primeras 10 filas en mydataset.mytable en la partición "2018-02-24". mydataset está en tu proyecto predeterminado.

bq head --max_rows=10 mydataset.mytable$20180224

Ingresa el comando siguiente para enumerar todos los campos en las primeras 100 filas en mydataset.mytable en la partición "2016-09-01". mydataset está en myotherproject y no en tu proyecto predeterminado.

bq head --format=prettyjson 'mydataset.mycolumntable2$20160901'

Ingresa el siguiente comando para mostrar solo field1 y field2 en mydataset.mytable en la partición "2016-09-01". El comando usa la marca - -start_row para omitir hasta la fila 100. mydataset.mytable está en tu proyecto predeterminado.

bq head \
--format=prettyjson \
--start_row 100 \
--selected_fields "state_number" \
'mydataset.mycolumntable2$20160901'

API

Navega a través de los datos de una tabla mediante una llamada a tabledata.list. Especifica el nombre de la tabla y el decorador de partición en el parámetro tableId.

Configura estos parámetros opcionales para controlar la salida:

  • maxResults: cantidad máxima de resultados que se mostrarán.
  • selectedFields: lista de campos separados por comas que se mostrarán. Si no se especifica, se muestran todos los campos.
  • startIndex: índice basado en cero de la primera fila que debe leerse.

Los valores se muestran unidos en un objeto JSON que debes analizar, como se describe en la documentación de referencia de tabledata.list.

Consulta datos de tablas particionadas

Después de cargar tus datos en BigQuery, puedes consultar los datos en tus tablas. BigQuery admite dos tipos de consultas:

BigQuery ejecuta consultas interactivas de forma predeterminada, lo que significa que la consulta se ejecuta lo antes posible.

BigQuery también ofrece consultas por lotes. BigQuery pone en cola cada consulta por lotes a tu nombre y, además, inicia la consulta tan pronto como los recursos inactivos se vuelven disponibles, por lo general, en el plazo de unos minutos.

Puedes ejecutar consultas interactivas y por lotes con las siguientes opciones:

Para obtener más información, visita Consulta tablas particionadas.

Anexa y reemplaza datos de tablas particionadas

Puedes reemplazar datos de la tabla particionada mediante una operación de carga o consulta. Puedes agregar datos adicionales a una tabla particionada existente si realizas una operación de adición de carga o si anexas resultados de consulta.

Permisos necesarios

Como mínimo, para reemplazar una partición existente o anexar datos a ella, debes tener los siguientes permisos:

  • bigquery.tables.create
  • bigquery.tables.updateData
  • bigquery.jobs.create

Es posible que se requieran permisos adicionales, como bigquery.tables.getData, a fin de acceder a los datos que usas para anexar o reemplazar.

Las siguientes funciones predefinidas de Cloud IAM incluyen los permisos bigquery.tables.updateData y bigquery.tables.create:

  • bigquery.dataEditor
  • bigquery.dataOwner
  • bigquery.admin

Las siguientes funciones predefinidas de Cloud IAM incluyen los permisos de bigquery.jobs.create:

  • bigquery.user
  • bigquery.jobUser
  • bigquery.admin

Además, si un usuario tiene permisos de bigquery.datasets.create, cuando cree un conjunto de datos, se le otorgará el acceso bigquery.dataOwner. El acceso bigquery.dataOwner permite al usuario anexar y reemplazar tablas y particiones en el conjunto de datos.

Para obtener más información sobre las funciones de Cloud IAM y los permisos en BigQuery, consulta los permisos y funciones predefinidas.

Usa un trabajo de carga

Puedes anexar o reemplazar particiones mediante el comando bq load o una llamada al método jobs.insert y la configuración de un trabajo de load. GCP Console y la IU web clásica de BigQuery no admiten reemplazar una partición o anexar datos a ella en un trabajo de carga.

Cuando anexes o reemplaces datos en una partición específica mediante un trabajo de carga, ten en cuenta esta información:

  • Cuando cargas datos desde Cloud Storage, el depósito debe estar en la misma ubicación que el conjunto de datos de BigQuery.
  • Los datos que cargas deben cumplir con el esquema de partición de la tabla. Todas las filas escritas en la partición deben tener valores que coincidan con la fecha de la partición.
  • Debido a que las particiones en una tabla particionada comparten el esquema de la tabla, el reemplazo de los datos en una partición no reemplazará el esquema de la tabla. En su lugar, el esquema de los datos nuevos debe ser compatible con el esquema de la tabla. Para obtener más información sobre la actualización del esquema de la tabla en el trabajo de carga, consulta la sección sobre cómo administrar esquemas de tabla.
  • Cuando anexes datos a una tabla particionada por tiempo de transferencia, si no especificas un decorador de partición, se usa la partición actual.

Para anexar o reemplazar los datos de la tabla particionada con un trabajo de carga, especifica una tabla de destino y un decorador de partición y establece la marca de disposición de escritura en:

Opción de CLI Opción de API Descripción
--noreplace WRITE_APPEND Anexa los datos a una partición existente. Si no se especifica ninguna opción de disposición de escritura, la acción predeterminada es agregar los datos a la partición.
--replace WRITE_TRUNCATE Reemplaza (rectifica) una partición.

Un decorador de partición representa una fecha específica y toma la forma siguiente:

$YYYYMMDD

Por ejemplo, con el comando siguiente se reemplazan los datos en la partición completa para la fecha 1 de enero de 2016 (20160101) en una tabla particionada llamada mydataset.table1. Los datos JSON se cargan desde un depósito de Cloud Storage.

bq load \
--replace \
--source_format=NEWLINE_DELIMITED_JSON \
'mydataset.table1$20160101' \
gs://mybucket/myfile.json

Usa un trabajo de consulta

Puedes anexar o reemplazar particiones mediante el comando bq query o una llamada al método jobs.insert y la configuración de un trabajo de query. GCP Console y la IU web clásica de BigQuery no admiten reemplazar una partición o anexar datos a ella en un trabajo de consulta.

Cuando uses un trabajo de consulta anexar o reemplazar una partición, ten en cuenta esta información:

  • Las tablas que consultas deben estar en la misma ubicación que la tabla que anexas o reemplazas.
  • Cuando anexes o reemplaces una partición en una tabla particionada en tiempo de transferencia, puedes usar la sintaxis de SQL heredada o la sintaxis de SQL estándar.
  • Cuando anexes o reemplaces una partición de una tabla particionada, tu consulta debe usar la sintaxis de SQL estándar. Por el momento, el SQL heredado no es compatible para la consulta de tablas particionadas ni con el fin de escribir resultados de consultas en tablas particionadas.
  • Cuando escribas los resultados de la consulta en una partición, los datos que se escriben deben ajustarse al esquema de partición de la tabla. Todas las filas escritas en la partición deben tener valores que coincidan con la fecha de la partición.
  • Cuando anexes datos a una tabla particionada por tiempo de transferencia, si no especificas un decorador de partición, se usa la partición actual.

Para anexar o reemplazar una partición mediante los resultados de la consulta, especifica una tabla de destino con un decorador de partición y establece la disposición de escritura en:

Opción de CLI Opción de API Descripción
--append_table WRITE_APPEND Anexa los resultados de la consulta a una partición existente.
--replace WRITE_TRUNCATE Reemplaza (rectifica) una partición mediante los resultados de la consulta.

Por ejemplo, con el comando siguiente, se rectifican los datos para la partición del 1 de marzo de 2016 (20160301) de table1 mediante los resultados de consulta.

bq query \
--use_legacy_sql=false \
--replace \
--destination_table 'mydataset.table1$20160301' \
'SELECT
  column1,
  column2
FROM
  mydataset.mytable'

Si la tabla de destino existe y no está particionada, se muestra el error siguiente: BigQuery error in query operation: Error processing job 'project_id job_id' Incompatible table partitioning specification. Expects partitioning specification interval (type:day), but input partitioning specification is none`.

Si deseas obtener más información sobre cómo usar los resultados de la consulta para anexar o reemplazar datos, consulta Cómo escribir resultados de consultas.

Modifica datos de tablas particionadas mediante Declaraciones DML

Puedes modificar los datos de una tabla particionada mediante declaraciones DML en el dialecto SQL estándar. Las Declaraciones DML te permiten realizar actualizaciones, inserciones y eliminaciones de filas de forma masiva. Para obtener ejemplos sobre el uso de DML con tablas particionadas, consulta la sección sobre cómo actualizar datos de tablas particionadas con Declaraciones DML.

El dialecto SQL heredado no admite Declaraciones DML. Para actualizar o borrar datos mediante SQL heredado, debes borrar la tabla particionada y, luego, volver a crearla con datos nuevos. De forma alternativa, puedes escribir una consulta que modifique los datos y escribir los resultados de la consulta en una tabla particionada nueva.

Copia datos de tablas particionadas

Puedes copiar una tabla particionada de las siguientes maneras:

  • Con GCP Console o la IU web de BigQuery
  • Usando el comando bq cp de la herramienta de línea de comandos.
  • Con llamadas al método de API jobs.insert y la configuración de un trabajo de copia
  • Con las bibliotecas cliente

Para obtener más información sobre la copia de tablas, consulta Copia una tabla.

Puedes copiar una o más particiones mediante el comando bq cp de la herramienta de línea de comandos o una llamada al método de la API jobs.insert y la configuración de un trabajo de copy. En la actualidad, la copia de particiones no es compatible GCP Console o la IU web clásica de BigQuery.

Para obtener más información sobre la copia de particiones, consulta Copia particiones.

Transmite datos en tablas particionadas

Para transmitir datos a una partición específica, usa el decorador de particiones cuando especifiques el tableId de la tabla a la que transmites los datos. Por ejemplo, con el comando siguiente, se transmite una sola fila a una partición para la fecha del 1 de enero de 2017 ($20170101) en una tabla particionada llamada mydataset.mytable:

echo '{"a":1, "b":2}' | bq insert 'mydataset.mytable$20170101'

Este comando se usa para demostrar el uso del decorador de particiones. El comando bq insert está creado solo para pruebas. Para transmitir datos a BigQuery, usa el método de API tabledata.insertAll. Para obtener más información sobre la transmisión de datos a particiones, consulta Transmite a tablas particionadas.

Durante una transmisión mediante un decorador de particiones, puedes transmitir a particiones dentro de los últimos 30 días pasados y 5 días en el futuro en relación con la fecha actual, según la hora UTC actual. Si quieres escribir en particiones para fechas fuera de estos límites permitidos, puedes usar trabajos de carga o consulta.

Si especificas una tabla particionada por tiempo como la tabla de destino cuando transmites datos, cada partición tendrá un búfer de transmisión. El búfer de transmisión se conserva cuando realizas un trabajo de carga, consulta o copia que reemplaza una partición mediante la configuración de la propiedad writeDisposition como WRITE_TRUNCATE. Si deseas quitar el búfer de transmisión, verifica que esté vacío mediante una llamada a tables.get en la partición.

Exporta datos de tablas

En la exportación de todos los datos de una tabla particionada se realiza el mismo proceso que en la exportación de datos de una tabla no particionada. Para obtener más información, consulta Exporta datos de tablas. Para exportar datos de una partición individual, agrega el decorador de particiones, $date, al nombre de la tabla. Por ejemplo: mytable$20160201.

También puedes exportar datos de las particiones __NULL__ y __UNPARTITIONED__ si agregas los nombres de las particiones al nombre de la tabla. Por ejemplo, mytable$__NULL__ o mytable$__UNPARTITIONED__.

Puedes exportar datos de tablas particionadas en formato CSV, JSON o Avro. Por ahora, debes exportar datos a un depósito de Cloud Storage. No se admite la exportación a tu máquina local; sin embargo, puedes descargar y guardar resultados de consultas mediante GCP Console o la IU web clásica de BigQuery.

Pasos siguientes

Para obtener más información sobre cómo trabajar con tablas particionadas, consulta estas secciones:

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

Enviar comentarios sobre...

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