Administra tablas con particiones

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:

Para obtener más información sobre cómo crear y usar tablas con particiones, que incluye información sobre tablas, su enumeración y el control de acceso a sus datos, consulta Crea y usa tablas con particiones por tiempo de transferencia o Crea y usa tablas con particiones.

Actualiza 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 los permisos bigquery.tables.update necesarios. Las funciones de IAM predefinidas a nivel de proyecto que se detallan a continuación incluyen permisos bigquery.tables.update:

Además, debido a que la función bigquery.user tiene los permisos bigquery.datasets.create, un usuario asignado a la función bigquery.user puede actualizar cualquier tabla que un 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 brinda al usuario un control total sobre este y todas las tablas y vistas que contenga.

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

Actualiza 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

Puedes especificar el vencimiento de la partición de una tabla con particiones cuando se crea la tabla, mediante el comando bq mk de la herramienta de línea de comandos o con una llamada al método de API tables.insert. En la actualidad, GCP Console o la IU web clásica de BigQuery no admiten la especificación del vencimiento de la partición.

Si especificas el vencimiento de una partición cuando creas una tabla, el vencimiento de la partición anula 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.

Después de crear la tabla, puedes actualizar la fecha de vencimiento de la partición de la tabla en cualquier momento, mediante el comando bq update de la CLI o el método de API tables.patch. En la actualidad, GCP Console o la IU web clásica de BigQuery no admiten la actualización del vencimiento de la partición. Sin embargo, puedes usar una declaración de DDL para actualizar el vencimiento de la partición en cualquier IU.

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

Cuando actualizas la fecha de vencimiento de la partición de una tabla, debes calcular el vencimiento de la partición desde la medianoche UTC para la fecha de la partición.

Si la tabla con particiones también tiene establecido 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 la partición de una tabla con particiones, sigue estos pasos:

Console

  1. Abre la IU web de BigQuery en GCP Console.
    Ir a la IU web de BigQuery

  2. Haz clic en Redactar consulta nueva.

  3. Escribe tu declaración de DDL en el área de texto Editor de consultas.

     #standardSQL
     ALTER TABLE mydataset.mytable
     SET OPTIONS (
       -- Sets partition expiration to 5 days
       partition_expiration_days=5
     )
     

IU clásica

  1. Dirígete a la IU web de BigQuery.

    Ir a la IU web de BigQuery

  2. Haz clic en Redactar consulta.

  3. Escribe tu declaración de DDL en el área de texto Consulta nueva.

     #standardSQL
     ALTER TABLE mydataset.mytable
     SET OPTIONS (
       -- Sets partition expiration to 5 days
       partition_expiration_days=5
     )
     

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 la tabla, se prefiere el método tables.patch.

Actualiza la definición de esquema

Para actualizar la definición de esquema de una tabla con particiones se realiza el mismo proceso que con una tabla estándar. Para obtener más información, consulta Modifica esquemas de tabla.

Renombra 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

Copia particiones

Para copiar una o más particiones, puedes hacer lo siguiente:

En la actualidad, GCP Console o la IU web clásica de BigQuery no admiten la copia de particiones.

Permisos necesarios

Si quieres copiar las particiones a nivel del conjunto de datos, debes tener 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 necesitan permisos bigquery.tables.create para crear la copia de la partición en el 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 otorga al usuario control completo sobre él y todas las tablas y particiones que contenga.

Si deseas 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 del conjunto de datos, consulta Funciones básicas para conjuntos de datos.

Copia una partición única

Console

GCP Console no admite la copia de particiones.

IU clásica

La IU web clásica 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í. A fin de obtener más información, consulta Protege datos con claves de Cloud KMS.

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

Proporciona la marca --location y establece 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 fuente o de 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 en la sección jobReference del recurso de trabajo.

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

  • Ingresa la tabla, la partición y el conjunto de datos de origen 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.

Copia varias particiones

Si deseas copiar varias particiones, ten en cuenta lo siguiente:

Console

En la actualidad, GCP Console no admite la copia de particiones.

IU clásica

En la actualidad, la IU web clásica 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 en 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 con el comando bq rm de la herramienta de línea de comandos o con una llamada al método de API tables.delete. En la actualidad, la IU web clásica de BigQuery no admite 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 Crea una lista de particiones en tablas con particiones por tiempo de transferencia o Crea 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 los permisos bigquery.tables.delete. Las funciones de IAM predefinidas a nivel de proyecto que se detallan a continuación incluyen 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 otorga al usuario control completo sobre él, todas las tablas y las particiones de tabla que contenga.

Si deseas 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 del 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__.

Si quieres borrar una partición en una tabla con particiones, ten en cuenta lo siguiente:

Console

GCP Console no admite que se borren particiones.

IU clásica

La IU web clásica 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 el 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 ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

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