Supporto delle regole di confronto per Delta Lake

È possibile specificare collazioni sui campi di tipo stringa nelle tabelle Delta Lake per controllare il modo in cui avvengono i confronti e l'ordinamento delle stringhe, ad esempio abilitando la corrispondenza senza distinzione tra maiuscole e minuscole o un ordinamento sensibile alle impostazioni locali. Ciò richiede Databricks Runtime 16.4 LTS e versioni successive.

Per una spiegazione completa dei tipi di regole di confronto, delle convenzioni di denominazione e delle regole di precedenza, vedere Regole di confronto.

Per impostazione predefinita, Delta Lake imposta le regole di confronto per i campi di tipo stringa su UTF8_BINARY.

Important

L'abilitazione della collation aggiunge la funzionalità della tabella writer collations alla tua tabella Delta Lake, con effetti sulla compatibilità con i lettori esterni e altre funzionalità della piattaforma. Esaminare la sezione Limitazioni prima di abilitare la collatione nelle tabelle di produzione.

Creare una tabella con regole di confronto

È possibile specificare le regole di confronto a livello di colonna durante la creazione di una nuova tabella. Le regole di confronto possono essere applicate alle colonne stringa di primo livello e ai campi stringa all'interno di tipi annidati:

CREATE TABLE catalog.schema.my_table (
  id BIGINT,
  name STRING COLLATE UTF8_LCASE,
  metadata STRUCT<label: STRING COLLATE UNICODE>,
  tags ARRAY<STRING COLLATE UTF8_LCASE>,
  properties MAP<STRING, STRING COLLATE UTF8_LCASE>
) USING delta

Note

MAP le chiavi non possono usare le regole di confronto. Solo MAP i valori supportano stringhe collate.

Modificare le regole di confronto in una colonna esistente

È possibile modificare le regole di confronto di una colonna esistente usando ALTER TABLE:

-- Set a column to case-insensitive collation
ALTER TABLE my_table ALTER COLUMN name TYPE STRING COLLATE UTF8_LCASE

-- Revert a column to the default binary collation
ALTER TABLE my_table ALTER COLUMN name TYPE STRING COLLATE UTF8_BINARY

Aggiornare le statistiche e il layout dei dati dopo aver modificato le regole di confronto

La modifica delle regole di confronto di una colonna non riscrive i dati esistenti o aggiorna le statistiche. Le query restituiscono immediatamente risultati corretti nelle nuove regole di confronto, ma l'omissione e il clustering dei file potrebbero risultare meno efficaci fino a quando non si eseguono i passaggi seguenti:

  1. Aggiornare le statistiche di salto dei file per la colonna:
   ANALYZE TABLE my_table COMPUTE DELTA STATISTICS
  1. Se la tua tabella utilizza il clustering liquido, riscrivi il layout clustering della tabella:
   OPTIMIZE FULL my_table
  1. Se la tabella usa ZORDER, disabilitare l'ottimizzazione incrementale e riscrivere tutti i file:
   SET spark.databricks.optimize.incremental = false;
   OPTIMIZE my_table ZORDER BY zorder_column;

Ignorare questi passaggi non causerà risultati non corretti, ma potrebbe ridurre le prestazioni delle query sui dati cronologici fino alla successiva riscrittura completa.

Le regole di confronto vengono sempre rispettate da Azure Databricks nei risultati delle query.

Disabilitare la collazione per una tabella

Per rimuovere la funzionalità tabella di confronto, impostare prima di tutto ogni colonna confrontata su UTF8_BINARY:

-- Repeat for each collated column
ALTER TABLE my_table ALTER COLUMN name TYPE STRING COLLATE UTF8_BINARY

Eliminare quindi la funzionalità tabella:

ALTER TABLE my_table DROP FEATURE collations

Per altre informazioni, vedere Eliminare una funzionalità di tabella Delta Lake e effettuare il downgrade del protocollo di tabella .

Evoluzione dello schema e ordinamento

Quando l'evoluzione dello schema aggiunge o unisce colonne con regole di confronto specificate, si applicano le regole seguenti:

  • Se nella tabella di destinazione esiste già una colonna di origine, le regole di confronto della tabella di destinazione per tale colonna sono mantenute. Le regole di confronto della colonna di origine vengono ignorate.
  • Se una colonna di origine è nuova e include regole di confronto specificate, la tabella di destinazione adotta le regole di confronto per la nuova colonna.
  • Se la tabella di destinazione non dispone già della collations funzionalità tabella abilitata, l'aggiunta di una colonna ordinata la abilita automaticamente.

Limitations

Le limitazioni seguenti si applicano alle tabelle Delta Lake con regole di confronto abilitate:

Compatibilità e interoperabilità:

  • I lettori esterni che non riconoscono la collations funzionalità di tabella rientrano in UTF8_BINARY, che potrebbe produrre ordini di ordinamento o confronti non corretti.
  • OpenSharing non supporta la condivisione di singole partizioni in colonne di regole di confronto non predefinite. Condividi la tabella invece.
  • UniForm non è supportato per le tabelle con collazione.
  • Le tabelle Delta Lake create esternamente con regole di confronto non riconosciute da Databricks Runtime generano un'eccezione quando viene eseguita una query.
  • Le API Delta Lake OSS per Scala o Python non supportano la collazione. Usare le API di Spark SQL o di DataFrame.

Restrizioni relative a query e funzionalità:

  • Le colonne collate non possono essere usate nei CHECK vincoli
  • Non è possibile fare riferimento alle colonne ordinate nelle espressioni di colonna generate
  • Le colonne accorpate non possono essere usate con indici bloom filter (deprecato)
  • Non è possibile fare riferimento alle colonne ordinate nelle query stateful di Structured Streaming (aggregazioni, join, deduplicazione).
  • Una MAP chiave non può essere una stringa ordinata. Solo i valori MAP supportano le regole di confronto

Risorse aggiuntive