Cargar datos con particiones externas

BigQuery puede cargar datos almacenados en Cloud Storage mediante un diseño de partición de Hive. La creación de particiones de Hive significa que los datos externos se organizan en varios archivos, con una convención de nomenclatura para separar los archivos en diferentes particiones. Para obtener más información, consulta Diseños de datos admitidos.

De forma predeterminada, los datos no se particionan en BigQuery después de cargarlos, a menos que crees explícitamente una tabla particionada.

Cargar datos con particiones de Hive

Para cargar datos particionados de Hive, elija una de las siguientes opciones:

Consola

  1. En la consola de Google Cloud , ve a BigQuery.

    Ir a BigQuery

  2. En el panel Explorador, expande tu proyecto y selecciona un conjunto de datos.
  3. Haz clic en Ver acciones y, a continuación, en Crear tabla. Se abrirá el panel Crear tabla.
  4. En la sección Fuente, especifica los siguientes detalles:
    1. En Crear tabla a partir de, selecciona Google Cloud Storage.
    2. En Seleccionar archivo del segmento de Cloud Storage, introduce la ruta de la carpeta de Cloud Storage con comodines. Por ejemplo, my_bucket/my_files*. El segmento de Cloud Storage debe estar en la misma ubicación que el conjunto de datos que contiene la tabla que quieres crear, añadir o sobrescribir.
    3. En la lista Formato de archivo, selecciona el tipo de archivo.
    4. Marca la casilla Partición de datos de origen y, en Seleccionar prefijo del URI de origen, introduce el prefijo del URI de Cloud Storage. Por ejemplo, gs://my_bucket/my_files.
    5. En la sección Modo de inferencia de particiones, seleccione una de las siguientes opciones:
      • Tipos de inferencias automáticas: define el modo de detección del esquema de partición como AUTO.
      • Todas las columnas son cadenas: define el modo de detección del esquema de partición como STRINGS.
      • Proporcionar mi propio esquema: define el modo de detección del esquema de partición como CUSTOM e introduce manualmente la información del esquema de las claves de partición. Para obtener más información, consulta el artículo Proporcionar un esquema de clave de partición personalizado.
    6. Opcional: Para requerir un filtro de partición en todas las consultas de esta tabla, seleccione la casilla Requerir filtro de partición. Si usas este filtro, es posible que rebajes los costes y mejores el rendimiento. Para obtener más información, consulta Requerir filtros de predicado en claves de partición en consultas.
  5. En la sección Destino, especifica los siguientes detalles:
    1. En Proyecto, selecciona el proyecto en el que quieras crear la tabla.
    2. En Conjunto de datos, selecciona el conjunto de datos en el que quieras crear la tabla.
    3. En Tabla, introduce el nombre de la tabla que quieras crear.
    4. En Tipo de tabla, selecciona Tabla nativa .
  6. En la sección Schema (Esquema), introduce la definición de schema.
  7. Para habilitar la detección automática del esquema, selecciona Detectar automáticamente.
  8. Para ignorar las filas con otros valores de columna que no coincidan con el esquema, despliega la sección Opciones avanzadas y selecciona Valores desconocidos.
  9. Haz clic en Crear tabla.

SQL

Para crear una tabla con particiones externas, usa la cláusula WITH PARTITION COLUMNS de la declaración LOAD DATA para especificar los detalles del esquema de partición.

Por ejemplo, consulta Cargar un archivo que está particionado externamente.

bq

Cargar datos con particiones de Hive mediante la detección automática del tipo de clave de partición:

bq load --source_format=ORC --hive_partitioning_mode=AUTO \
--hive_partitioning_source_uri_prefix=gcs_uri_shared_prefix \
dataset.table gcs_uris

Carga datos con particiones de Hive mediante la detección de claves de partición de tipo cadena:

bq load --source_format=CSV --autodetect \
--hive_partitioning_mode=STRINGS \
--hive_partitioning_source_uri_prefix=gcs_uri_shared_prefix \
dataset.table gcs_uris

Carga datos particionados de Hive mediante un esquema de clave de partición personalizado que se codifica con el campo source\_uri\_prefix:

bq load --source_format=JSON --hive_partitioning_mode=CUSTOM \
--hive_partitioning_source_uri_prefix=gcs_uri_shared_prefix/partition_key_schema \
dataset.table gcs_uris file_schema

El esquema de clave de partición se codifica inmediatamente después del prefijo del URI de origen. Utiliza el siguiente formato para especificar --hive_partitioning_source_uri_prefix:

--hive_partitioning_source_uri_prefix=gcs_uri_shared_prefix/{key1:TYPE1}/{key2:TYPE2}/{key3:TYPE3}

API

Para usar la partición de Hive, debes definir el valor de HivePartitioningOptions en JobConfigurationLoad.

Realizar cargas incrementales

Considera el siguiente diseño de datos:

gs://my_bucket/my_table/dt=2019-10-31/val=1/file1
gs://my_bucket/my_table/dt=2018-10-31/val=2/file2
gs://my_bucket/my_table/dt=2017-10-31/val=3/file3
gs://my_bucket/my_table/dt=2016-10-31/val=4/file4

Para cargar solo los datos del 31 de octubre del 2019, haz lo siguiente:

  • Define el modo de particiones de Hive como AUTO, STRINGS o CUSTOM.
  • Define el prefijo del URI de origen como gs://my_bucket/my_table/ para los modos de partición mediante Hive AUTO o STRINGS. En el caso de CUSTOM, proporciona gs://my_bucket/my_table/{dt:DATE}/{val:INTEGER}.
  • Usa el URI gs://my_bucket/my_table/dt=2019-10-31/*.
  • Los datos se cargan con las columnas dt y val, con los valores 2019-10-31 y 1, respectivamente.

Para cargar solo los datos de archivos específicos, sigue estos pasos:

  • Define el modo de particiones de Hive como AUTO, STRINGS o CUSTOM.
  • Define el prefijo del URI de origen como gs://my_bucket/my_table/ para los modos de partición mediante Hive AUTO o STRINGS. En CUSTOM, proporciona gs://my_bucket/my_table/{dt:DATE}/{val:INTEGER}.
  • Usa los URIs gs://my_bucket/my_table/dt=2017-10-31/val=3/file3,gs://my_bucket/my_table/dt=2016-10-31/val=4/file4.
  • Los datos se cargan de ambos archivos con las columnas dt y val rellenas.

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.

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.

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 cargar datos desde Cloud Storage.

Siguientes pasos