Udostępnij za pośrednictwem


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

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

Tabele z włączonym mapowaniem kolumn można odczytywać tylko w środowisku Databricks Runtime 10.4 LTS lub nowszym.

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 operacji przesyłania strumieniowego odczytów z tabeli delty jako źródła, w tym w tabelach delta live. Zobacz Przesyłanie strumieniowe za pomocą mapowania kolumn i zmian schematu.

Włączanie mapowania kolumn

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 włączyć mapowanie kolumn, możesz użyć następującego polecenia:

  ALTER TABLE <table-name> SET TBLPROPERTIES (
    'delta.columnMapping.mode' = 'name'
  )

Zobacz Wyłączanie mapowania kolumn.

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")
)

Wyłączanie mapowania kolumn

W środowisku Databricks Runtime 15.3 lub nowszym można użyć DROP FEATURE polecenia , aby usunąć mapowanie kolumn z tabeli i obniżyć protokół tabeli.

Zobacz Usuwanie funkcji tabeli delty.