Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Na tej stronie opisano, jak mapowanie kolumn usługi Delta Lake umożliwia zmianom tylko metadanych oznaczanie kolumn jako usuniętych lub zmienionych bez ponownego zapisywania plików danych.
Usługa Azure Databricks obsługuje mapowanie kolumn dla tabel usługi Delta Lake. Mapowanie kolumn umożliwia zmianę tylko metadanych w celu oznaczania kolumn jako usuniętych lub zmienionych bez ponownego zapisywania plików danych. Mapowanie kolumn umożliwia również używanie znaków niedozwolonych przez Parquet w nazwach kolumn, takich jak spacje. Dzięki temu można bezpośrednio importować dane CSV lub JSON do Delta bez zmieniania nazw kolumn.
Wymagania wstępne i ograniczenia
Przed włączeniem mapowania kolumn zapoznaj się z następującymi ograniczeniami:
- Tabele z włączonym mapowaniem kolumn można odczytywać tylko w środowisku Databricks Runtime 10.4 LTS lub nowszym
- Włączenie mapowania kolumn może spowodować przerwanie działania:
- Starsze aplikacje, które opierają się na nazwach katalogów do odczytywania Tabel Delty. Partycjonowane tabele z mapowaniem kolumn używają losowych prefiksów zamiast nazw kolumn dla katalogów partycji. Zobacz Czy Delta Lake i Parquet dzielą strategie partycjonowania?
- Operacje zstępujące korzystające z kanału danych delta. Zobacz Zmienianie ograniczeń źródła danych dla tabel z mapowaniem kolumn.
- Przesyłanie strumieniowe odczytów z tabeli Delta, w tym w deklaratywnych potokach Lakeflow Spark. Zobacz Mapowanie kolumn i przesyłanie strumieniowe.
Włączanie mapowania kolumn
Użyj następującego polecenia, aby włączyć mapowanie kolumn w trybie id na nowej tabeli:
CREATE table <table-name> (
id INT,
name STRING
)
USING DELTA
TBLPROPERTIES (
'delta.columnMapping.mode' = 'id'
);
Użyj następującego polecenia, aby włączyć mapowanie kolumn z trybem name w istniejącej tabeli.
ALTER TABLE <table-name> SET TBLPROPERTIES (
'delta.columnMapping.mode' = 'name'
)
Aby uzyskać szczegółowe informacje na temat trybów mapowania kolumn, zobacz Tryby mapowania kolumn.
Mapowanie kolumn wymaga następujących protokołów Delta:
- Czytelnik w wersji 2 lub nowszej
- Wersja Writer 5 lub nowsza
Zobacz zgodność funkcji Delta Lake i protokoły.
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.
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.
Tryby mapowania kolumn
Kontrolki delta.columnMapping.mode właściwości tabeli umożliwiają zmianę tylko metadanych w celu oznaczania kolumn jako usuniętych lub zmienionych bez ponownego zapisywania plików danych. Dostępne są następujące tryby:
-
none(ustawienie domyślne): mapowanie kolumn nie jest włączone. Nazwy kolumn podlegają regułom nazewnictwa Parquet. -
name: Umożliwia to zmiany nazw i usuwanie kolumn wyłącznie w metadanych oraz zezwala na użycie znaków specjalnych w nazwach kolumn.nametryb może być ustawiony dla nowych i istniejących tabel. -
id: Umożliwia to zmianę nazw kolumn oraz ich usunięcie wyłącznie na poziomie metadanych, a także zezwala na znaki specjalne w nazwach kolumn.idTryb musi być ustawiony podczas tworzenia tabeli i nie można go ustawić w istniejących tabelach.
Uwaga
Usługa Databricks zaleca tryb id dla większości przypadków użycia w celach zgodności. Jednak tryb jest ustawiany automatycznie, name jeśli nie podasz wartości delta.columnMapping.mode i włączysz funkcje zgodności z Iceberg, takie jak UniForm.
Obsługiwane znaki w nazwach kolumn
Po włączeniu mapowania kolumn dla tabeli delty można uwzględnić spacje i dowolne z tych znaków w nazwach kolumn: ,;{}()\n\t=.
Usuwanie mapowania kolumn
Mapowanie kolumn z tabeli można usunąć przy użyciu następującego polecenia:
ALTER TABLE <table-name> SET TBLPROPERTIES ('delta.columnMapping.mode' = 'none')
Ostrzeżenie
Usunięcie mapowania kolumn ponownie zapisuje wszystkie pliki danych, aby zastąpić nazwy kolumn fizycznych nazwami logicznymi. Ta operacja nie obsługuje rozwiązywania konfliktów na poziomie wiersza ani fizycznego rozwiązywania konfliktów.
Współbieżne operacje zapisu spowodują błąd ConcurrentModificationException. Przed usunięciem mapowania kolumn:
- Wstrzymaj wszystkie współbieżne operacje zapisu, w tym zadania przesyłania strumieniowego i potoki ETL.
- Wyłącz optymalizację predykcyjną w tabeli.
- W przypadku dużych tabel zaplanuj tę operację w okresach niskiej aktywności.
Aby zapoznać się z alternatywnym podejściem obsługującym obniżanie poziomu protokołu tabeli, zobacz Wyłączanie mapowania kolumn.
Wyłącz mapowanie kolumn
W środowisku Databricks Runtime 15.3 lub nowszym można użyć polecenia DROP FEATURE, aby usunąć mapowanie kolumn i obniżyć protokół tabeli. Użyj tej metody zamiast usuwania mapowania kolumn , jeśli chcesz obniżyć wersję protokołu w celu zachowania zgodności ze starszymi czytnikami.
Ważne
Porzucanie mapowania kolumn z tabeli nie powoduje usunięcia losowych prefiksów używanych w nazwach katalogów dla tabel partycjonowanych.
Zobacz Usuwanie funkcji tabeli Delta Lake i obniżenie protokołu tabeli.
Mapowanie kolumn i przesyłanie strumieniowe
Możesz określić lokalizację śledzenia schematu, aby włączyć strumieniowe przesyłanie z tabel Delta z aktywnym mapowaniem kolumn. To rozwiązuje problem, w którym nieaddytywne zmiany schematu mogą prowadzić do uszkodzenia strumieni.
Każdy odczyt strumieniowy względem źródła danych musi mieć własną określoną wartość schemaTrackingLocation. Określony schemaTrackingLocation musi znajdować się w katalogu określonym dla tabeli docelowej checkpointLocation na potrzeby zapisu strumieniowego. W przypadku obciążeń przesyłania strumieniowego łączących dane z wielu źródłowych tabel Delta należy określić unikatowe katalogi w ramach checkpointLocation dla każdej tabeli źródłowej.
Włączanie mapowania kolumn w uruchomionym zadaniu
Ważne
Aby włączyć mapowanie kolumn w uruchomionym zadaniu przesyłania strumieniowego:
- Zatrzymaj zadanie
- Włączanie mapowania kolumn w tabeli
- Uruchom ponownie zadanie (pierwsze ponowne uruchomienie — inicjuje mapowanie kolumn)
- Ponownie uruchom zadanie (drugie ponowne uruchomienie — włącza zmiany schematu)
Wszelkie dalsze zmiany schematu (dodawanie lub upuszczanie kolumn, zmienianie typów kolumn) również wymagają ponownego uruchomienia zadania.
Określanie lokalizacji śledzenia schematu
W poniższym przykładzie pokazano, jak określić schemaTrackingLocation element do odczytu strumieniowego z tabeli Delta z mapowaniem kolumn.
checkpoint_path = "/path/to/checkpointLocation"
(spark.readStream
.option("schemaTrackingLocation", checkpoint_path)
.table("delta_source_table")
.writeStream
.option("checkpointLocation", checkpoint_path)
.toTable("output_table")
)