Condividi tramite


Supporto delle regole di confronto per Delta Lake

È possibile specificare regole di confronto sui campi stringa nelle tabelle Delta per controllare il comportamento di confronto e ordinamento delle stringhe, ad esempio l'abilitazione della corrispondenza senza distinzione tra maiuscole e minuscole o dell'ordinamento compatibile con le 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.

Importante

L'abilitazione della collazione aggiunge la funzionalità di scrittura nella collations alla tua tabella Delta, che può influire sulla compatibilità con lettori esterni e altri aspetti 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

Nota

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.

Limitazioni

Le limitazioni seguenti si applicano alle tabelle Delta 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
  • Delta Sharing non è supportato per le tabelle con collatione
  • UniForm non è supportato per le tabelle con regole di confronto
  • Le tabelle delta create esternamente con regole di confronto non riconosciute da Databricks Runtime generano un'eccezione quando viene eseguita una query
  • Le API OSS Delta Lake per Scala o Python non supportano le regole di confronto. Utilizzare 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 collate non possono essere usate con i Bloom Filter Indexes
  • 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