Usar datos con particiones externas

Puedes usar tablas externas de BigQuery para consultar datos particionados en los siguientes almacenes de datos:

Los datos con particiones externas deben usar un diseño de partición de Hive predeterminado y estar en uno de los siguientes formatos:

  • Avro
  • CSV
  • JSON
  • ORC
  • Parquet

Para consultar datos con particiones externas, debes crear una tabla de BigLake o una tabla externa. Te recomendamos que uses tablas de BigLake porque te permiten aplicar una seguridad detallada a nivel de tabla. Para obtener información sobre BigLake y las tablas externas, consulta los artículos Introducción a las tablas de BigLake y Introducción a las tablas externas.

Para habilitar la compatibilidad con la creación de particiones de Hive, debe definir las opciones adecuadas en el archivo de definición de tabla. Para obtener instrucciones sobre cómo consultar tablas con particiones gestionadas, consulta el artículo Introducción a las tablas con particiones.

Esquema de partición

En las siguientes secciones se explica el diseño predeterminado de particiones de Hive y los modos de detección de esquemas que admite BigQuery.

Para evitar leer archivos innecesarios y mejorar el rendimiento, puede usar filtros de predicado en las claves de partición de las consultas.

Diseños de datos admitidos

Las claves de partición de Hive aparecen como columnas normales cuando consultas datos de Cloud Storage. Los datos deben seguir un diseño predeterminado de partición de Hive. Por ejemplo, los siguientes archivos siguen el diseño predeterminado: los pares clave-valor se configuran como directorios con el signo igual (=) como separador y las claves de partición siempre están en el mismo orden:

gs://my_bucket/my_table/dt=2019-10-31/lang=en/my_filename
gs://my_bucket/my_table/dt=2018-10-31/lang=fr/my_filename

El prefijo de URI de origen común en este ejemplo es gs://my_bucket/my_table.

Diseños de datos no admitidos

Si los nombres de las claves de partición no están codificados en la ruta del directorio, no se detectará el esquema de partición. Por ejemplo, considere la siguiente ruta, que no codifica los nombres de las claves de partición:

gs://my_bucket/my_table/2019-10-31/en/my_filename

Los archivos en los que el esquema no está en un orden coherente tampoco se detectan. Por ejemplo, considere los dos archivos siguientes con codificaciones de clave de partición invertida:

gs://my_bucket/my_table/dt=2019-10-31/lang=en/my_filename
gs://my_bucket/my_table/lang=fr/dt=2018-10-31/my_filename

Modos de detección

BigQuery admite tres modos de detección de esquemas de particiones de Hive:

  • AUTO: los nombres y los tipos de las claves se detectan automáticamente. Se pueden detectar los siguientes tipos:

  • STRINGS: los nombres de las claves se convierten automáticamente al tipo STRING.

  • CUSTOM: el esquema de la clave de partición se codifica tal como se especifica en el prefijo del URI de origen.

Esquema de clave de partición personalizada

Para usar un esquema CUSTOM, debes especificarlo en el campo de prefijo del URI de origen. Si usas un esquema CUSTOM, puedes especificar el tipo de cada clave de partición. Los valores deben analizarse correctamente como el tipo especificado o la consulta fallará.

Por ejemplo, si asignas el valor gs://my_bucket/my_table/{dt:DATE}/{val:STRING} a la marca source_uri_prefix, BigQuery tratará val como una CADENA, dt como una FECHA y usará gs://my_bucket/my_table como prefijo de URI de origen de los archivos coincidentes.

Recorte de particiones

BigQuery elimina particiones cuando es posible mediante predicados de consulta en las claves de partición. De esta forma, BigQuery no tiene que leer archivos innecesarios, lo que ayuda a mejorar el rendimiento.

Filtros de predicado en claves de partición en consultas

Cuando creas una tabla con particiones externas, puedes requerir el uso de filtros de predicado en las claves de partición habilitando la opción requirePartitionFilter en HivePartitioningOptions.

Si esta opción está habilitada, al intentar consultar la tabla particionada externamente sin especificar una cláusula WHERE, se produce el siguiente error: Cannot query over table <table_name> without a filter over column(s) <partition key names> that can be used for partition elimination.

Limitaciones

  • La compatibilidad con la partición mediante Hive se basa en un prefijo de URI de origen común para todos los URIs que termina inmediatamente antes de la codificación de la partición, como se indica a continuación: gs://BUCKET/PATH_TO_TABLE/.
  • Se presupone que la estructura de directorios de una tabla particionada de Hive tiene las mismas claves de partición en el mismo orden, con un máximo de diez claves de partición por tabla.
  • Los datos deben seguir un diseño de partición de Hive predeterminado.
  • Las claves de partición de Hive y las columnas de los archivos subyacentes no pueden superponerse.
  • La asistencia solo está disponible para GoogleSQL.

  • Se aplican todas las limitaciones para consultar fuentes de datos externas almacenadas en Cloud Storage.

Siguientes pasos