Administra tablas particionadas

Este documento describe cómo administrar tablas con particiones en BigQuery. Las tablas con particiones y con particiones por tiempo de transferencia se administran de la misma manera. Puedes realizar las siguientes tareas de administración para las tablas con particiones:

  • Actualizar una tabla con particiones por tiempo:
    • Tiempo de vencimiento de la tabla
    • Tiempo de vencimiento de la partición
    • Descripción
    • Definición de esquema
    • Etiquetas
  • Volver a nombrar (copiar) una tabla con particiones por tiempo
  • Copiar una tabla con particiones por tiempo
  • Copiar particiones
  • Borrar una tabla con particiones por tiempo
  • Borrar particiones en una tabla con particiones por tiempo

Para obtener más información sobre cómo crear y usar tablas con particiones, así como obtener información de tablas, enumerarlas y controlar el acceso a sus datos, consulta Cómo crear y usar tablas con particiones por tiempo de transferencia o Cómo crear y usar tablas con particiones.

Cómo actualizar las propiedades de la tabla con particiones

Puedes actualizar los siguientes elementos de una tabla con particiones:

Permisos necesarios

Para actualizar las propiedades de una tabla, debes tener acceso de WRITER a nivel de conjunto de datos o tener asignada una función de IAM a nivel de proyecto que incluya permisos bigquery.tables.update obligatorios. Las siguientes funciones de IAM a nivel de proyecto predefinidas incluyen los permisos bigquery.tables.update:

Además, debido a que la función bigquery.user tiene permisos bigquery.datasets.create, un usuario a quien se le asigna la función bigquery.user puede actualizar 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. El acceso de OWNER a un conjunto de datos permite al usuario un control total sobre este y todas las tablas y vistas que contenga.

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

Cómo actualizar la descripción de una tabla con particiones

El proceso para actualizar la descripción de una tabla con particiones es el mismo que el de actualizar la descripción de una tabla estándar. Para obtener más información sobre cómo agregar o cambiar la descripción de una tabla, consulta Cómo actualizar la descripción de una tabla.

Actualmente, no puedes crear descripciones de particiones individuales.

Cómo actualizar el vencimiento de la tabla

El proceso para actualizar del vencimiento de una tabla con particiones es el mismo que el de actualizar el vencimiento de una tabla estándar. Para obtener más información sobre cómo agregar o cambiar el vencimiento de una tabla, consulta Cómo actualizar el tiempo de vencimiento de una tabla.

Actualiza el vencimiento de partición

Mediante el comando bq mk de la herramienta de línea de comandos o con una llamada al método de API tables.insert, puedes especificar el vencimiento de partición de una tabla con particiones cuando se crea la tabla. Actualmente, la IU web de BigQuery no admite la especificación del vencimiento de partición.

Si especificas el vencimiento de una partición cuando crees una tabla, el vencimiento de la partición anulará el vencimiento de partición predeterminado a nivel de conjunto de datos. Cuando configures un vencimiento de partición a nivel de tabla, todas las particiones estarán sujetas al vencimiento. No puedes aplicar otros tiempos de vencimiento a particiones individuales.

Puedes actualizar el tiempo de vencimiento de la tabla en cualquier momento después de crearla mediante el comando bq update de la CLI o el método de API tables.patch. Actualmente, la IU web de BigQuery no admite la actualización del vencimiento de partición.

Cuando actualices el vencimiento de la partición de una tabla, la configuración se aplicará a todas las particiones, sin importar cuándo se crearon.

Cuando actualices el tiempo de vencimiento de partición de una tabla, debes calcular el vencimiento de partición según la fecha en la que se encuentre la partición. Por ejemplo, si la fecha en la que se encuentra la partición es el 3 de enero de 2018 y configuras el tiempo de vencimiento de la partición a 5 días, esta vencerá el 8 de enero de 2018 sin importar cuándo se realizó la última actualización.

Si la tabla con particiones también tiene configurado un vencimiento de tabla, esta y todas sus particiones se borrarán según la configuración de vencimiento de la tabla. El vencimiento de la tabla tiene prioridad sobre el vencimiento de la partición.

Por ejemplo, si el vencimiento de una tabla con particiones se configura a 5 días y el tiempo de vencimiento de la partición se configura a 7 días, la tabla y todas sus particiones se borrarán después de 5 días.

Para los proyectos que tengan tablas con particiones que se crearon antes del 13 de diciembre de 2016, el vencimiento de la partición se basa en la última fecha en que se modificó la partición. Este comportamiento también se aplica a las tablas nuevas que se crearon en estos proyectos. Para migrar tu proyecto al comportamiento nuevo, abre una solicitud en el seguimiento de problemas de BigQuery.

Para actualizar el vencimiento de partición de una tabla con particiones, considera lo siguiente:

IU web

No puedes agregar el vencimiento de una partición ni actualizarlo mediante la IU web de BigQuery.

Línea de comandos

Ejecuta el comando bq update con la marca --time_partitioning_expiration. Si actualizas una tabla con particiones en otro proyecto que no sea el predeterminado, agrega el ID del proyecto al nombre del conjunto de datos en el siguiente formato: [PROJECT_ID]:[DATASET].

bq update --time_partitioning_expiration [INTEGER] [PROJECT_ID]:[DATASET].[TABLE]

Donde:

  • [INTEGER] es el ciclo de vida predeterminado (en segundos) de las particiones de la tabla. No hay valor mínimo. El tiempo de vencimiento se evalúa según la fecha en la que se encuentre la partición más el valor de número entero. Si especificas 0 o un número negativo, el vencimiento de la partición se quita y esta nunca vence. Las particiones sin vencimiento deben borrarse de forma manual.
  • [PROJECT_ID] es tu ID del proyecto.
  • [DATASET] es el nombre del conjunto de datos que contiene la tabla que actualizas.
  • [TABLE] es el nombre de la tabla que actualizas.

Ejemplos:

Ingresa el siguiente comando para actualizar el tiempo de vencimiento de las particiones en mydataset.mytable a 5 días (432,000 segundos). mydataset se encuentra en tu proyecto predeterminado.

bq update --time_partitioning_expiration 432000 mydataset.mytable

Ingresa el siguiente comando para actualizar el tiempo de vencimiento de las particiones en mydataset.mytable a 5 días (432,000 segundos). mydataset se encuentra en myotherproject, no en tu proyecto predeterminado.

bq update --time_partitioning_expiration 432000 myotherproject:mydataset.mytable

API

Llama al método tables.patch y usa la propiedad timePartitioning.expirationMs para actualizar el vencimiento de la partición en milisegundos. Debido a que el método tables.update reemplaza todo el recurso de tabla, el método tables.patch es preferible.

Actualiza la definición de esquema

El proceso para actualizar la definición de esquema de una tabla con particiones es el mismo que el de actualizar la definición de esquema de una tabla estándar. Para obtener más información, consulta Cómo modificar los esquemas de tabla.

Cómo volver a nombrar una tabla con particiones

Actualmente, no puedes cambiar el nombre de una tabla con particiones existente. Si es necesario cambiar el nombre de la tabla, sigue los pasos para copiar la tabla. Usa el nombre nuevo de la tabla cuando especifiques la tabla de destino en la operación de copia.

Cómo copiar tablas con particiones

Copia una tabla con particiones única

El proceso para copiar una tabla con particiones es el mismo que el de copiar una tabla estándar. Para obtener más información, consulta Cómo copiar una tabla.

Cuando copies una tabla con particiones, ten en cuenta lo siguiente:

  • Las tablas de origen y destino deben estar en conjuntos de datos en la misma ubicación

  • Copiar una tabla con particiones en una tabla de destino con particiones nueva
    Si copias una tabla con particiones por tiempo a una tabla nueva, toda la información de partición se copia con la tabla. La tabla nueva y la anterior tendrán particiones idénticas.
  • Copiar una tabla sin particiones en una tabla con particiones
    Si copias una tabla sin particiones en una tabla con particiones, BigQuery copia los datos de origen en la partición que representa la fecha actual.
  • Copiar una tabla con particiones a otra tabla con particiones
    Para copiar una tabla con particiones en otra tabla con particiones, las especificaciones de partición de las tablas de origen y destino deben coincidir. Puedes especificar si deseas agregar o reemplazar la tabla de destino.
  • Copiar una tabla con particiones en una tabla sin particiones
    Si copias una tabla con particiones en una tabla sin particiones, la tabla de destino permanece sin particiones. Según tu configuración, los datos se agregan a la tabla sin particiones o se usan para reemplazarla.

Copia varias tablas con particiones

El proceso para copiar varias tablas con particiones es el mismo que el de copiar varias tablas estándar. Para obtener más información, consulta Cómo copiar varias tablas de origen.

Cuando copies varias tablas con particiones, ten en cuenta lo siguiente:

  • Si copias varias tablas de origen en una tabla con particiones en el mismo trabajo, las tablas de origen no podrán contener una mezcla de tablas con particiones y sin particiones.
  • Si todas las tablas de origen son tablas con particiones, sus especificaciones de partición deben coincidir con la especificación de partición de la tabla de destino. Tu configuración determina si la tabla de destino se agrega o se reemplaza.
  • Las tablas de origen y destino deben estar en conjuntos de datos en la misma ubicación

Cómo copiar particiones

Puedes copiar una o más particiones con el comando bq cp de la herramienta de línea de comandos o con una llamada al método de API jobs.insert y mediante la configuración de un trabajo de copia. Actualmente, la IU web de BigQuery no admite la copia de particiones.

Permisos necesarios

Para copiar particiones a nivel de conjunto de datos, se requiere acceso de READER al conjunto de datos de origen que contiene las particiones que se copian y acceso de WRITER al conjunto de datos de destino.

En lugar de usar permisos a nivel de conjunto de datos, puedes aprovechar una función de IAM a nivel de proyecto que incluya permisos bigquery.tables.create y bigquery.tables.getData. Se requieren permisos bigquery.tables.create para crear la copia de la partición del conjunto de datos de destino (si la tabla de destino es nueva) y permisos bigquery.tables.getData para leer los datos en las particiones que se copian.

Las siguientes funciones de IAM predefinidas a nivel de proyecto incluyen los permisos bigquery.tables.create y bigquery.tables.getData para cada conjunto de datos del proyecto:

También debes tener permisos bigquery.jobs.create para ejecutar trabajos de copia. Las siguientes funciones de IAM a nivel de proyecto predefinidas incluyen los permisos bigquery.jobs.create:

Además, debido a que la función bigquery.user tiene permisos bigquery.datasets.create, un usuario a quien se le asigna la función bigquery.user puede leer o copiar los datos en cualquier tabla o partición 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. El acceso de OWNER a un conjunto de datos permite al usuario un control total sobre el mismo y todas las tablas y particiones que contenga.

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.

Cómo copiar una partición única

IU web

La IU web de BigQuery no admite la copia de particiones.

Línea de comandos

Usa el comando bq cp (copia) de la herramienta de línea de comandos con un decorador de particiones ($[DATE]) como $20160201 para copiar una partición.

Se pueden usar marcas opcionales para controlar la disposición de escritura de la partición de destino:

  • -a o --append_table agrega los datos desde la partición de origen a una tabla o partición existente en el conjunto de datos de destino.
  • -f o --force reemplaza una tabla o partición existente en el conjunto de datos de destino y no te solicitará confirmación.
  • -n o --no_clobber muestra el siguiente mensaje de error si la tabla o partición existe en el conjunto de datos de destino: Table '[PROJECT_ID]:[DATASET].[TABLE] or [TABLE]$[DATE]' already exists, skipping. Si -n no se especifica, el comportamiento predeterminado es solicitarte que elijas si deseas reemplazar la tabla o partición de destino.
  • --destination_kms_key es la clave de Cloud KMS administrada por el cliente que se usa para encriptar la tabla o partición de destino.

El comando cp no es compatible con las marcas --time_partitioning_field o --time_partitioning_type. No puedes usar un trabajo de copia para convertir una tabla con particiones por tiempo de transferencia en una tabla con particiones.

--destination_kms_key no se muestra aquí. Para obtener más información, consulta Cómo proteger datos con las claves de Cloud KMS.

Si el conjunto de datos de origen o destino se encuentra en otro proyecto que no sea el predeterminado, agrega el ID del proyecto a los nombres del conjunto de datos en el siguiente formato: [PROJECT_ID]:[DATASET].

Proporciona la marca --location y configura el valor en tu ubicación.

bq --location=[LOCATION] cp -a -f -n [PROJECT_ID]:[DATASET].[SOURCE_TABLE]$[SOURCE_PARTITION] [PROJECT_ID]:[DATASET].[DESTINATION_TABLE]$[DESTINATION_PARTITION]

Donde:

  • [LOCATION] es el nombre de tu ubicación. La marca --location es opcional. Por ejemplo, si usas BigQuery en la región de Tokio, puedes configurar el valor de las marcas en asia-northeast1. Puedes configurar un valor predeterminado para la ubicación con el archivo .bigqueryrc.
  • [PROJECT_ID] es tu ID del proyecto.
  • [DATASET] es el nombre del conjunto de datos de origen o destino.
  • [SOURCE_TABLE] es la tabla que copias.
  • [SOURCE_PARTITION] es el decorador de particiones de la partición de origen.
  • [DESTINATION_TABLE] es el nombre de la tabla en el conjunto de datos de destino.
  • [DESTINATION_PARTITION] es el decorador de particiones de la partición de destino.

Ejemplos:

Copia una partición a una tabla nueva

Ingresa el siguiente comando para copiar la partición del 30 de enero de 2018 desde mydataset.mytable a una tabla nueva: mydataset.mytable2. mydataset se encuentra en tu proyecto predeterminado. mydataset se creó en la ubicación multirregión US.

bq --location=US cp -a 'mydataset.mytable$20180130' mydataset.mytable2

Copia una partición a una tabla sin particiones

Ingresa el siguiente comando para copiar la partición del 30 de enero de 2018 desde mydataset.mytable a una tabla sin particiones: mydataset2.mytable2. Se usa el acceso directo -a para agregar los datos de la partición a la tabla de destino sin particiones. Ambos conjuntos de datos se encuentran en tu proyecto predeterminado y se crearon en la región asia-northeast1.

bq --location=asia-northeast1 cp -a 'mydataset.mytable$20180130' mydataset2.mytable2

Ingresa el siguiente comando para copiar la partición del 30 de enero de 2018 desde mydataset.mytable a una tabla sin particiones: mydataset2.mytable2. Se usa el acceso directo -f para reemplazar la tabla de destino sin particiones sin solicitarlo. Ambos conjuntos de datos se encuentran en tu proyecto predeterminado y se crearon en la ubicación multirregión US.

bq --location=US cp -f 'mydataset.mytable$20180130' mydataset2.mytable2

Copia una partición a otra tabla con particiones

Ingresa el siguiente comando para copiar la partición del 30 de enero de 2018 desde mydataset.mytable a otra tabla con particiones: mydataset2.mytable2. Se usa el acceso directo -a para agregar los datos de la partición a la tabla de destino. Ya que no se especifica ningún decorador de particiones en la tabla de destino, la clave de partición de origen se conserva y los datos se copian a la partición del 30 de enero de 2018 en la tabla de destino. También puedes especificar un decorador de particiones en la tabla de destino para copiar datos a una partición específica. mydataset se encuentra en tu proyecto predeterminado. mydataset2 se encuentra en myotherproject, no en tu proyecto predeterminado. Ambos conjuntos de datos se crearon en la ubicación multirregión US.

bq --location=US cp -a 'mydataset.mytable$20180130' myotherproject:mydataset2.mytable2

Ingresa el siguiente comando para copiar la partición del 30 de enero de 2018 desde mydataset.mytable a la partición del 20 de febrero de 2018 de otra tabla con particiones: mydataset2.mytable2. Se usa el acceso directo -f para reemplazar la partición del 20 de febrero de 2018 en la tabla de destino sin solicitarlo. Si no se usa ningún decorador de particiones, se reemplazan todos los datos en la tabla de destino. mydataset se encuentra en tu proyecto predeterminado. mydataset2 se encuentra en myotherproject, no en tu proyecto predeterminado. Ambos conjuntos de datos se crearon en la ubicación multirregión US.

bq --location=US cp -f 'mydataset.mytable$20180130' 'myotherproject:mydataset2.mytable2$20180220'

Ingresa el siguiente comando para copiar la partición del 30 de enero de 2018 desde mydataset.mytable a otra tabla con particiones: mydataset2.mytable2. mydataset se encuentra en tu proyecto predeterminado. mydataset2 se encuentra en myotherproject, no en tu proyecto predeterminado. Si hay datos en la tabla de destino, el comportamiento predeterminado es solicitarte que los reemplaces. Ambos conjuntos de datos se crearon en la región asia-northeast1.

bq --location=asia-northeast1 cp 'mydataset.mytable$20180130' myotherproject:mydataset2.mytable2

API

Llama al método jobs.insert y configura un trabajo de copia. Especifica tu región en la propiedad location de la sección jobReference del recurso de trabajo.

Especifica las siguientes propiedades en la configuración de tu trabajo:

  • Ingresa el conjunto de datos, la tabla y la partición de origen en la propiedad sourceTable.
  • Ingresa el conjunto de datos y la tabla de destino en la propiedad destinationTable.
  • Usa la propiedad writeDisposition para especificar si deseas agregar o reemplazar la tabla o partición de destino.

Copia varias particiones

Para copiar varias particiones, considera lo siguiente:

IU web

Actualmente, la IU web de BigQuery no admite la copia de particiones.

Línea de comandos

Copiar varias particiones es el mismo proceso que copiar una partición única, pero tienes que especificar varias particiones de origen como una lista separada por comas:

bq --location=[LOCATION] cp 'mydataset.mytable$20180130,mydataset.mytable$20180131' myotherproject:mydataset.mytable2

API

Llama al método jobs.insert y configura un trabajo de copia. Especifica tu región en la propiedad location de la sección jobReference del recurso de trabajo.

Especifica las siguientes propiedades en la configuración de tu trabajo:

  • Ingresa varias particiones de origen (incluidos los nombres del conjunto de datos y de la tabla) en la propiedad sourceTables.
  • Ingresa el conjunto de datos y la tabla de destino en la propiedad destinationTable.
  • Usa la propiedad writeDisposition para especificar si deseas agregar o reemplazar la tabla o partición de destino.

Borra una tabla con particiones

El proceso para borrar una tabla con particiones por tiempo y todas las particiones que contenga es el mismo que el de borrar una tabla estándar. Para obtener más información sobre cómo borrar una tabla, consulta Cómo borrar tablas.

Borra particiones en tablas con particiones

Puedes borrar particiones en tablas con particiones mediante el comando bq rm de la herramienta de línea de comandos o con una llamada al método de API tables.delete. La IU web de BigQuery no admite actualmente que se borren particiones.

Puedes usar el decorador de particiones para borrar una partición específica. Por ejemplo, la partición del 1 de marzo de 2016 ($20160301) de una tabla con particiones con el nombre mydataset.mytable se puede borrar mediante el comando:

bq rm 'mydataset.mytable$20160301'

Para recuperar una lista de particiones en una tabla con particiones, consulta Cómo hacer una lista de particiones en tablas con particiones por tiempo de transferencia o Cómo hacer una lista de particiones en tablas con particiones.

Actualmente, solo puedes borrar una partición a la vez.

Permisos necesarios

Para borrar una partición, debes tener acceso de OWNER a nivel de conjunto de datos o tener asignada una función de IAM a nivel de proyecto que incluya permisos bigquery.tables.delete. Las siguientes funciones de IAM predefinidas a nivel de proyecto incluyen los permisos bigquery.tables.delete:

Los usuarios a quienes se les asigna una función predefinida a nivel de proyecto pueden borrar particiones en cualquier tabla con particiones en el proyecto. Los usuarios con permisos OWNER a nivel de conjunto de datos pueden borrar particiones de tablas solo en el conjunto de datos.

Además, debido a que la función bigquery.user tiene permisos bigquery.datasets.create, un usuario a quien se le asigna la función bigquery.user puede borrar tablas y particiones en cualquier conjunto de datos que cree el usuario. 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. El acceso de OWNER a un conjunto de datos permite al usuario un control total sobre el mismo junto con todas las tablas que contenga y todas las particiones de tabla.

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.

Borra una partición en una tabla con particiones

Puedes borrar una partición si especificas el decorador de la partición, a menos que sea una de las dos particiones especiales. Actualmente, no puedes borrar las particiones __NULL__ o __UNPARTITIONED__.

Para borrar una partición en una tabla con particiones, considera lo siguiente:

IU web

La IU web de BigQuery no admite que se borren particiones.

CLI

Usa el comando bq rm con la marca --table (o el acceso directo -t) y haz referencia al decorador de particiones ($[DATE]) para borrar una partición específica de una tabla con particiones. Cuando uses la CLI para quitar una partición, debes confirmar la acción. Puedes usar la marca --force (o el acceso directo -f) para omitir la confirmación.

Si la tabla con particiones se encuentra en un conjunto de datos de un proyecto que no es el predeterminado, agrega el ID del proyecto al nombre del conjunto de datos en el siguiente formato [PROJECT_ID]:[DATASET].

bq rm -f -t [PROJECT_ID]:[DATASET].[TABLE]$[DATE]

Donde:

  • [PROJECT_ID] es tu ID del proyecto.
  • [DATASET] es el nombre del conjunto de datos que contiene la tabla.
  • [TABLE] es el nombre de la tabla.
  • $[DATE] es el decorador de particiones de la partición que borras.

Ejemplos:

Ingresa el siguiente comando para borrar la partición del 1 de marzo de 2016 ($20160301) de una tabla con particiones con el nombre mydataset.mytable. mydataset se encuentra en tu proyecto predeterminado.

bq rm 'mydataset.mytable$20160301'

Ingresa el siguiente comando para borrar la partición del 1 de enero de 2017 ($20170101) de una tabla con particiones con el nombre mydataset.mytable. mydataset se encuentra en myotherproject, no en tu proyecto predeterminado.

bq rm 'myotherproject:mydataset.mytable$20170101'

Ingresa el siguiente comando para borrar la partición del 18 de enero de 2018 ($20180118) de una tabla con particiones con el nombre mydataset.mytable. mydataset se encuentra en myotherproject, no en tu proyecto predeterminado. El acceso directo -f se usa para omitir la confirmación.

bq rm -f 'myotherproject:mydataset.mytable$20180118'

API

Llama al método tables.delete y especifica la tabla y el decorador de particiones con el parámetro tableId.

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

Enviar comentarios sobre…

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