Detección de particiones para tablas externas
En este artículo se describe la estrategia de detección de particiones predeterminada para las tablas externas de Unity Catalog y una configuración opcional para habilitar un registro de metadatos de partición que hace que la detección de particiones sea coherente con el metastore de Hive.
Databricks recomienda habilitar el registro de metadatos de partición para mejorar las velocidades de lectura y el rendimiento de la consulta para tablas externas de Unity Catalog con particiones.
¿Cuál es la estrategia de detección de particiones predeterminada para Unity Catalog?
De forma predeterminada, Unity Catalog enumera de forma recursiva todos los directorios de la ubicación de la tabla para detectar automáticamente las particiones. En el caso de tablas grandes con muchos directorios de partición, esto puede aumentar la latencia de muchas operaciones de tabla.
Usar registro de metadatos de partición
Importante
Esta característica está en versión preliminar pública.
En Databricks Runtime 13.3 LTS y versiones posteriores, es posible habilitar opcionalmente el registro de metadatos de partición, que es una estrategia de detección de particiones para tablas externas registradas en el catálogo de Unity. Este comportamiento es coherente con la estrategia de detección de particiones usada en metastore de Hive. Este comportamiento solo afecta a las tablas externas de Unity Catalog que tienen particiones y usan Parquet, ORC, CSV o JSON. Databricks recomienda habilitar el nuevo comportamiento para mejorar las velocidades de lectura y el rendimiento de las consultas para estas tablas.
Importante
Las tablas con el registro de metadatos de partición habilitado muestran un cambio de comportamiento para la detección de particiones. En lugar de examinar automáticamente la ubicación de la tabla para las particiones, Unity Catalog solo respeta las particiones registradas en los metadatos de partición. Consulte Agregar, quitar o reparar metadatos de partición manualmente.
Este comportamiento se convertirá en el valor predeterminado en una versión futura de Databricks Runtime. Las tablas con esta característica habilitada solo se pueden leer o escribir mediante Databricks Runtime 13.3 LTS y versiones posteriores.
Nota:
Debe intentar consultar una tabla con Databricks Runtime 12.2 LTS o una versión inferior para confirmar que no usa el nuevo comportamiento del registro de partición.
Habilitar registro de metadatos de partición
Para habilitar el registro de metadatos de partición en una tabla, debe habilitar una configuración de Spark para la actual SparkSession y, a continuación, crear una tabla externa. Esta configuración solo es necesaria en la SparkSession que crea la tabla. Una vez creada una tabla con el registro de metadatos de partición habilitado, conserva esta configuración como parte de los metadatos de la tabla y usa la característica en todas las cargas de trabajo posteriores.
La sintaxis siguiente muestra el uso de SQL para establecer una configuración de Spark en un cuaderno. También puede establecer configuraciones de Spark al configurar el proceso.
SET spark.databricks.nonDelta.partitionLog.enabled = true;
Importante
Solo puede leer y escribir tablas con el registro de metadatos de partición habilitado en Databricks Runtime 13.3 LTS y versiones posteriores. Si tiene cargas de trabajo que se ejecutan en Databricks Runtime 12.2 LTS o inferior que deben interactuar con tablas, no use esta configuración.
Las tablas externas no eliminan los archivos de datos subyacentes al quitarlos. Databricks recomienda usar la sintaxis CREATE OR REPLACE
para actualizar tablas para usar el registro de metadatos de partición, como en el ejemplo siguiente:
CREATE OR REPLACE TABLE <catalog>.<schema>.<table-name>
USING <format>
PARTITIONED BY (<partition-column-list>)
LOCATION 'abfss://<bucket-path>/<table-directory>';
Unity Catalog aplica reglas en superposiciones de ruta de acceso para tablas y volúmenes. No se puede registrar una nueva tabla de Unity Catalog en una colección de archivos de datos si ya existe una tabla en esa ubicación.
Trabajar con tablas con metadatos de partición
Databricks recomienda usar nombres de tabla en todas las lecturas y escrituras en todas las tablas registradas en Unity Catalog. Para tablas con metadatos de partición, esto garantiza que las nuevas particiones agregadas a una tabla se registren en Unity Catalog y que las consultas contra la tabla lean todas las particiones registradas.
El uso de patrones basados en rutas de acceso para lecturas o escrituras puede dar lugar a que las particiones se omitan o no se registren en el metastore de Unity Catalog. Consulte Limitaciones.
Enumerar particiones
Use el siguiente comando para mostrar todas las particiones registradas en Unity Catalog como metadatos de partición:
SHOW PARTITIONS <table-name>
Para comprobar si una sola partición está registrada en Unity Catalog, use el siguiente comando:
SHOW PARTITIONS <table-name>
PARTITION (<partition-column-name> = <partition-column-value>)
Agregar, quitar o reparar metadatos de partición manualmente
Unity Catalog requiere que todas las particiones de las tablas externas estén contenidas en el directorio registrado mediante la cláusula LOCATION
durante el registro de la tabla.
Con los metadatos de partición habilitados, la detección automática de particiones en la ubicación de la tabla está deshabilitada. Si los sistemas externos escriben datos en la ubicación de la tabla o usa escrituras basadas en rutas de acceso para agregar o sobrescribir registros en la tabla, debe reparar manualmente los metadatos de la partición.
Azure Databricks usa particiones de estilo Hive para almacenar tablas respaldadas por Parquet, ORC, CSV y JSON. Las particiones de estilo Hive contienen pares clave-valor conectados por un inicio de sesión igual en el directorio de partición, por ejemplo year=2021/month=01/
.
Si la tabla usa particiones de estilo Hive, puede usar MSCK REPAIR
para sincronizar los metadatos de partición en Unity Catalog con particiones que existen en la ubicación de la tabla. En los ejemplos de sintaxis siguientes se muestran las operaciones comunes:
-- Add and remove parition metadata to match directories in table location
MSCK REPAIR TABLE <table_name> SYNC PARTITIONS;
-- Add partitions in the table location that are not registered as partition metadata
MSCK REPAIR TABLE <table_name> ADD PARTITIONS;
-- Drop partitions registered as partition metadata that are not in the table location
MSCK REPAIR TABLE <table_name> DROP PARTITIONS;
Consulte REPAIR TABLE.
Especificar manualmente rutas de acceso para otros tipos de partición
Si la tabla no usa la creación de particiones de estilo Hive, debe especificar manualmente las ubicaciones de partición al agregar particiones. La especificación manual de particiones también puede reducir la latencia en comparación con la sintaxis MSCK REPAIR
, especialmente para las tablas con un gran número de particiones. En el ejemplo de sintaxis siguiente se muestra cómo agregar una partición:
ALTER TABLE <table-name>
ADD PARTITION (<partition-column-name> = <partition-column-value>)
LOCATION 'abfss://<bucket-path>/<table-directory>/<partition-directory>';
También puede usar la sintaxis ALTER TABLE
para quitar, cambiar el nombre, recuperar y establecer ubicaciones para las particiones. Consulte ALTER TABLE … PARTITION.
Deshabilitar nuevos metadatos de partición
La configuración de Spark que controla si las nuevas tablas usan metadatos de partición están deshabilitados de forma predeterminada. También puede deshabilitar explícitamente este comportamiento. La sintaxis siguiente usa SQL para deshabilitar la configuración de Spark:
SET spark.databricks.nonDelta.partitionLog.enabled = false;
Esto solo controla si las tablas creadas en la SparkSession usan metadatos de partición. Para deshabilitar los metadatos de partición en una tabla que usa el comportamiento, debe quitar y volver a crear la tabla en una SparkSession que no tenga habilitada la configuración de Spark.
Nota:
Aunque no puede leer ni escribir en tablas con metadatos de partición habilitados en Databricks Runtime 12.2 LTS o versiones inferiores, puede ejecutar instrucciones DROP
o CREATE OR REPLACE TABLE
en estas tablas si tiene suficientes privilegios en Unity Catalog.
Limitaciones
Existen las siguientes limitaciones:
- No se puede leer ni escribir en tablas con metadatos de partición habilitados mediante Databricks Runtime 12.2 LTS o versiones inferiores.
- Leer una tabla mediante la ruta de acceso del directorio devuelve todas las particiones, incluidas las que se han agregado o quitado manualmente.
- Si inserta o sobrescribe registros en una tabla mediante una ruta de acceso en lugar de un nombre de tabla, los metadatos de partición no se registran.
- No se admite el formato de archivo Avro.