Condividi tramite


Supporto delle regole di confronto per Delta Lake

È possibile specificare le regole di confronto per i campi stringa nelle tabelle Delta in Databricks Runtime 16.1 e versioni successive.

L'abilitazione delle regole di confronto per una tabella aggiunge la funzionalità collations-preview del componente di scrittura della tabella. È possibile leggere le tabelle nelle versioni 15.4 e più recenti di Databricks Runtime con le regole di confronto abilitate. Consulta In che modo Azure Databricks gestisce la compatibilità delle funzionalità Delta Lake?.

Nota

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

Creare una tabella con regole di confronto a livello di colonna

È possibile creare una nuova tabella con regole di confronto a livello di colonna usando il comando seguente:

CREATE TABLE $tableName (
 nonCollatedColName STRING,
 collatedColName STRING COLLATE UNICODE,
 structColName STRUCT<nestedFieldName: STRING COLLATE UNICODE>,
 mapColName MAP<STRING, STRING COLLATE UNICODE>,
 arrayColName ARRAY<STRING COLLATE UNICODE>
) USING delta

Modificare una colonna di tabella per specificare le regole di confronto

È possibile aggiornare una colonna esistente per usare le regole di confronto usando i comandi seguenti:

ALTER TABLE tableName ALTER COLUMN columnName TYPE newType

Per rimuovere una collazione non predefinita (se presente):

ALTER TABLE tableName ALTER COLUMN columnName TYPE STRING COLLATE UTF8_BINARY

Per modificare le regole di confronto delle colonne in utf8_lcase:

ALTER TABLE tableName ALTER COLUMN columnName TYPE STRING COLLATE UTF8_LCASE

La modifica delle regole di confronto per una tabella non aggiorna automaticamente le statistiche o il layout dei dati per i dati scritti in precedenza. Per migliorare il salto dei file sui dati cronologici nelle nuove regole di confronto, Databricks consiglia quanto segue:

  • Eseguire ANALYZE table_name COMPUTE DELTA STATISTICS per aggiornare le statistiche di salto dei file per i file di dati esistenti.
  • Per le tabelle con clustering liquido abilitato, eseguire OPTIMIZE FULL table_name per aggiornare il clustering liquido.
  • Per le tabelle che usano ZORDER, eseguire le operazioni seguenti:
    • Disabilitare l'ottimizzazione incrementale nella sessione Spark eseguendo l'override della configurazione di Spark predefinita con il comando seguente:

      SET spark.databricks.optimize.incremental=false
      
    • Eseguire OPTIMIZE table_name ZORDER BY zorder_column per riscrivere tutti i file di dati esistenti.

Le regole di confronto verranno sempre rispettate da Azure Databricks nei risultati della query.

Disabilitare le regole di confronto per una tabella

È necessario disabilitare in modo esplicito le regole di confronto per ogni colonna stringa di una tabella prima di eliminare la funzionalità delle regole di confronto.

Usare la sintassi seguente per impostare la collatione per una colonna su UTF8_BINARY:

ALTER TABLE table_name
ALTER COLUMN column_name
TYPE STRING
COLLATE UTF8_BINARY

Per eliminare la funzionalità tabella, eseguire il comando seguente:

ALTER TABLE table_name
DROP FEATURE collations-preview

Vedi la eliminare funzioni della tabella delta.

Evoluzione dello schema e ordinamento

Le regole di collazione interagiscono con l'evoluzione dello schema secondo le regole seguenti:

  • Se una colonna di origine esiste già nella tabella di destinazione, le regole di confronto della colonna nella tabella di destinazione rimangono invariate.
  • Se per una colonna di origine sono specificate regole di confronto, la colonna aggiunta alla tabella di destinazione utilizza le regole di confronto specificate.
  • Se la tabella di destinazione non dispone di regole di confronto abilitate quando viene aggiunta una colonna con regole di confronto, la funzionalità di tabella collations-preview è abilitata.

Limitazioni

Esistono le limitazioni seguenti per le tabelle con regole di confronto abilitate:

  • Le tabelle delta create esternamente con regole di confronto non riconosciute dal runtime di Databricks generano un'eccezione quando viene eseguita una query.
  • Non è disponibile alcun supporto per la condivisione Delta.
  • Le colonne collate non possono essere usate con vincoli CHECK.
  • Le colonne generate non possono usare le regole di confronto.
  • Le colonne ordinate non possono essere usate con le colonne dell'indice di filtro Bloom.
  • Non c'è supporto per la collation nelle API OSS Delta Lake per Scala o Python. Per abilitare la collazione, è necessario usare le API Spark SQL o DataFrame.
  • La sovrascrittura della partizione dinamica non è supportata nelle colonne collation.
  • Non è possibile fare riferimento alle colonne collate nelle query con stato Structured Streaming.
  • I lettori esterni che non rispettano la funzione della tabella collations-preview ritornano alla collation predefinita di UTF8_BINARY.
  • Un MAP non può avere una chiave che è una stringa collata.
  • UniForm non funziona con le regole di confronto.