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

Para 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 puedes especificar el esquema.

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

Explora datos de la tabla

Puedes explorar datos de una tabla particionada mediante la IU web de BigQuery, el comando bq head de la herramienta de línea de comandos o con una llamada al método de API tabledata.list.

Permisos necesarios

En el nivel del conjunto de datos, la exploración de los datos de la tabla requiere acceso de READER al conjunto de datos que contiene la tabla particionada que se explora.

En lugar de usar permisos a nivel de conjunto de datos, puedes aprovechar una función de IAM que incluye los permisos bigquery.tables.getData. Todas las funciones de IAM predefinidas a nivel de proyecto incluyen permisos bigquery.tables.getData a excepción de bigquery.user, bigquery.jobUser y bigquery.metadataViewer.

Además, como la función bigquery.user tiene permisos bigquery.datasets.create, un usuario asignado a la función bigquery.user puede leer los datos de cualquier tabla en cualquier conjunto de datos que el usuario cree. Cuando un usuario asignado a la función bigquery.user crea un conjunto de datos, se le otorga acceso de OWNER al conjunto de datos si no se establece ningún otro propietario. El acceso de OWNER a un conjunto de datos otorga al usuario control total sobre este y todas las tablas que contiene.

Para obtener más información sobre las funciones de IAM y los permisos en BigQuery, consulta Control de acceso. A fin de obtener más información sobre las funciones a nivel de conjunto de datos, consulta Funciones básicas para conjuntos de datos.

Navega por los datos de la tabla particionada

Para navegar por los datos de la tabla particionada, sigue estos pasos:

IU web

  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 expandirla o haz doble clic en el nombre del conjunto de datos. Esto muestra las tablas y vistas en el conjunto de datos.

  2. Haz clic en una tabla particionada de la lista. No puedes previsualizar particiones individuales con la IU web de BigQuery.

  3. Haz clic en Detalles y anota el valor en 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. Verás un conjunto de datos de muestra:

    Vista previa de la tabla

Línea de comandos

Emite el comando bq head con la marca --max_rows para enumerar todos los campos en una cantidad particular de filas en la tabla. Si no se especifica --max_rows, el valor predeterminado es 100. Especifica una partición para navegar 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 cobran por estos.

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 en la que navegas está en un proyecto que no es tu proyecto predeterminado, agrega el ID del proyecto al comando en 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 para 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 partición.

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 comando siguiente 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 la tabla con 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: número máximo de resultados para mostrar
  • 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 fila inicial para leer.

Los valores se muestran envueltos en un objeto JSON que debes analizar, según se describe en la documentación de referencia 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

Para reemplazar una partición existente o anexar datos a una partición existente, debes tener acceso de WRITER a nivel de conjunto de datos o debes tener asignada una función de IAM a nivel de proyecto que incluya permisos bigquery.tables.updateData. Las funciones de IAM predefinidas siguientes a nivel de proyecto incluyen permisos bigquery.tables.updateData:

Además, como la función bigquery.user tiene permisos bigquery.datasets.create, un usuario asignado a la función bigquery.user puede reemplazar o anexar datos en cualquier partición de cualquier tabla que el usuario cree en el conjunto de datos. Cuando un usuario asignado a la función bigquery.user crea un conjunto de datos, se le otorga acceso de OWNER al conjunto de datos si no se especifica otro propietario. El acceso de OWNER a un conjunto de datos le da al usuario control total sobre este, sobre todas las tablas que contiene y todas las particiones de la tabla.

También se debes tener asignado permisos bigquery.jobs.create para ejecutar trabajos de carga o trabajos de consulta. Las funciones de IAM predefinidas siguientes a nivel de proyecto incluyen permisos bigquery.jobs.create:

Para obtener más información sobre las funciones de IAM y los permisos en BigQuery, consulta Control de acceso. A fin de obtener más información sobre las funciones a nivel de conjunto de datos, consulta Funciones básicas para conjuntos de datos.

Usa un trabajo de carga

Puedes anexar o reemplazar particiones mediante el comando bq load o si llamas al método jobs.insert y configuras un trabajo de carga. La IU web de BigQuery no admite la anexación o reemplazo de una partición 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 Administra esquemas de tabla.
  • Cuando anexas datos a una tabla particionada en 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. El depósito de Cloud Storage y el conjunto de datos de BigQuery se crearon en la región asia-northeast1.

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

Para obtener más información sobre cómo anexar o reemplazar datos mediante un trabajo de carga, consulta la documentación del formato de datos de origen:

Usa un trabajo de consulta

Puedes anexar o reemplazar particiones mediante el comando bq query o con una llamada al método jobs.insert y si configuras un trabajo de consulta. La IU web de BigQuery no admite la anexación o reemplazo de una partición en un trabajo de consulta.

Cuando usas un trabajo de consulta para 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 anexas datos a una tabla particionada en 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. La tabla de destino y la consultada se encuentran en la ubicación multirregión US:

bq --location=US 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][JOB_ID]' Incompatible table partitioning specification. Expects partitioning specification interval (type:day), but input partitioning specification is none.

A fin de obtener más información sobre el uso de los resultados de la consulta para anexar o reemplazar datos, consulta Escribe los resultados de la consulta.

Modifica datos de la tabla particionada 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 Actualización de datos de tablas particionadas mediante 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 mediante la IU web de BigQuery, el comando de la herramienta de línea de comandos bq cp o si llamas al método de la API jobs.insert y configuras un copy job.

Para obtener más información sobre cómo copiar tablas, consulta Copia una tabla.

Puedes copiar una o más particiones mediante el comando de la herramienta de línea de comandos bq cp o si llamas al método de la API jobs.insert y configuras un copy job. En la actualidad, la copia de particiones no admite la IU web de BigQuery.

Para obtener más información sobre cómo copiar particiones, consulta Copia particiones.

Transmite datos en tablas particionadas

Para transmitir datos a una partición específica, usa el decorador de particiones cuando especifique el tableId de la tabla a la que estás transmites. 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 partición. El comando bq insert está destinado solo para pruebas. Para transmitir datos a BigQuery, usa el método de la API tabledata.insertAll. Para obtener más información sobre la transmisión de datos a particiones, consulta la Transmisión a tablas particionadas.

Durante una transmisión mediante un decorador de particiones, puedes transmitir a particiones dentro de los últimos 30 días en el pasado 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.

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

Exporta datos de tablas

Exportar datos de una tabla particionada es el mismo proceso que exportar datos de una tabla no particionada. Por el momento, no es posible exportar particiones individuales. Para obtener más información, consulta Exporta datos de tabla.

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 los resultados de la consulta mediante la IU web 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.