Zmienianie nazwy i usuwanie kolumn za pomocą mapowania kolumn usługi Delta Lake

Ważne

Ta funkcja jest dostępna w publicznej wersji zapoznawczej.

Usługa Azure Databricks obsługuje mapowanie kolumn dla tabel usługi Delta Lake, co umożliwia wprowadzanie zmian tylko metadanych w celu oznaczania kolumn jako usuniętych lub zmienionych bez ponownego zapisywania plików danych. Umożliwia również użytkownikom nadawanie nazw kolumnom tabeli delty przy użyciu znaków, które nie są dozwolone przez Parquet, takich jak spacje, dzięki czemu użytkownicy mogą bezpośrednio pozyskiwać dane CSV lub JSON do funkcji Delta bez konieczności zmieniania nazw kolumn z powodu poprzednich ograniczeń znaków.

Ważne

Włączenie mapowania kolumn umożliwia również losowe prefiksy plików, co eliminuje możliwość eksplorowania danych przy użyciu partycjonowania w stylu hive. Zobacz Strategie partycjonowania udziałów w usłudze Delta Lake i Parquet?

Włączenie mapowania kolumn w tabelach może spowodować przerwanie operacji podrzędnych korzystających z zestawienia zmian różnicowych. Zobacz Zmienianie ograniczeń źródła danych dla tabel z włączonym mapowaniem kolumn.

Włączenie mapowania kolumn w tabelach może spowodować przerwanie przesyłania strumieniowego z tabeli delty jako źródła, w tym w tabelach delta live. Zobacz Przesyłanie strumieniowe za pomocą mapowania kolumn i zmian schematu.

Jak włączyć mapowanie kolumn usługi Delta Lake

Ważne

Włączenie mapowania kolumn dla tabeli uaktualnia wersję tabeli delty. To uaktualnienie protokołu jest nieodwracalne. Tabele z włączonym mapowaniem kolumn można odczytywać tylko w środowisku Databricks Runtime 10.4 LTS lub nowszym.

Mapowanie kolumn wymaga następujących protokołów różnicowych:

  • Czytelnik w wersji 2 lub nowszej.
  • Składnik zapisywania w wersji 5 lub nowszej.

W przypadku tabeli delty z wymaganymi wersjami protokołu można włączyć mapowanie kolumn, ustawiając wartość delta.columnMapping.mode .name

Aby uaktualnić wersję tabeli i włączyć mapowanie kolumn, możesz użyć następującego polecenia:

  ALTER TABLE <table-name> SET TBLPROPERTIES (
    'delta.minReaderVersion' = '2',
    'delta.minWriterVersion' = '5',
    'delta.columnMapping.mode' = 'name'
  )

Uwaga

Nie można wyłączyć mapowania kolumn po jej włączeniu. Jeśli spróbujesz ustawić wartość 'delta.columnMapping.mode' = 'none', zostanie wyświetlony błąd.

Zmienianie nazwy kolumny

Uwaga

Dostępne w środowisku Databricks Runtime 10.4 LTS i nowszym.

Po włączeniu mapowania kolumn dla tabeli delty można zmienić nazwę kolumny:

ALTER TABLE <table-name> RENAME COLUMN old_col_name TO new_col_name

Aby uzyskać więcej przykładów, zobacz Aktualizowanie schematu tabeli usługi Delta Lake.

Usuwanie kolumn

Uwaga

Dostępne w środowisku Databricks Runtime 11.3 LTS i nowszym.

Po włączeniu mapowania kolumn dla tabeli delty można usunąć jedną lub więcej kolumn:

ALTER TABLE table_name DROP COLUMN col_name
ALTER TABLE table_name DROP COLUMNS (col_name_1, col_name_2, ...)

Aby uzyskać więcej informacji, zobacz Aktualizowanie schematu tabeli usługi Delta Lake.

Obsługiwane znaki w nazwach kolumn

Gdy mapowanie kolumn jest włączone dla tabeli delty, można uwzględnić spacje i dowolne z tych znaków w nazwach kolumn tabeli: ,;{}()\n\t=.

Przesyłanie strumieniowe za pomocą mapowania kolumn i zmian schematu

Ważne

Ta funkcja jest dostępna w publicznej wersji zapoznawczej w środowisku Databricks Runtime 13.3 LTS lub nowszym.

Możesz podać lokalizację śledzenia schematu, aby włączyć przesyłanie strumieniowe z tabel delty z włączonym mapowaniem kolumn. Spowoduje to rozwiązanie problemu, w którym zmiany schematu nie addytywnego mogą spowodować uszkodzenie strumieni.

Każde przesyłanie strumieniowe odczytu względem źródła danych musi mieć własną określoną schemaTrackingLocation wartość. schemaTrackingLocation Określony musi być zawarty w katalogu określonym dla checkpointLocation tabeli docelowej na potrzeby zapisu strumieniowego.

Uwaga

W przypadku obciążeń przesyłania strumieniowego łączących dane z wielu źródłowych tabel delty należy określić unikatowe katalogi w ramach checkpointLocation każdej tabeli źródłowej.

schemaTrackingLocation Opcja służy do określania ścieżki śledzenia schematu, jak pokazano w poniższym przykładzie kodu:

checkpoint_path = "/path/to/checkpointLocation"

(spark.readStream
  .option("schemaTrackingLocation", checkpoint_path)
  .table("delta_source_table")
  .writeStream
  .option("checkpointLocation", checkpoint_path)
  .toTable("output_table")
)