Delta Lake の列マッピングを使用して列の名前変更と削除を行う
Azure Databricks では Delta Lake テーブルの列マッピングがサポートされています。これにより、データ ファイルを書き換えることなく、メタデータのみの変更で、列を削除または名前変更済みとしてマークできます。 また、ユーザーは、Parquet で許可されていないスペースなどの文字を使って、Delta テーブルの列に名前を付けることができます。そのため、ユーザーは、以前は文字の制約のために必要であった列の名前の変更を行うことなく、CSV または JSON のデータを Delta に直接取り込むことができます。
重要
列マッピングが有効になっているテーブルは、Databricks Runtime 10.4 LTS 以降でのみ読み取ることができます。
テーブルで列マッピングを有効にすると、Delta 変更データ フィードに依存するダウンストリーム操作が中断される可能性があります。 「列マッピングが有効になっているテーブルのデータ フィードの制限を変更する」を参照してください。
テーブルで列マッピングを有効にすると、Delta Live Tables を含め、ソースとして Delta テーブルから読み取られるストリーミングが中断される可能性があります。 「列マッピングとスキーマの変更が伴うストリーミング」を参照してください。
列マッピングを有効にする
列マッピングには、次の Delta プロトコルが必要です。
- Reader バージョン 2 以降。
- Writer バージョン 5 以降。
必要なプロトコル バージョンを備えた Delta テーブルの場合は、delta.columnMapping.mode
を name
に設定することで、列マッピングを有効にできます。
次のコマンドを使用して、列マッピングを有効にすることができます:
ALTER TABLE <table-name> SET TBLPROPERTIES (
'delta.columnMapping.mode' = 'name'
)
「列マッピングの無効化」を参照してください。
列の名前変更
Note
Databricks Runtime 10.4 LTS 以降で使用できます。
Delta テーブルで列マッピングが有効になっている場合は、列の名前を変更できます。
ALTER TABLE <table-name> RENAME COLUMN old_col_name TO new_col_name
その他の例については、「Delta Lake のテーブル スキーマを更新する」を参照してください。
列の削除
Note
Databricks Runtime 11.3 LTS 以降で使用できます。
Delta テーブルで列マッピングが有効になっている場合は、1 つ以上の列を削除できます。
ALTER TABLE table_name DROP COLUMN col_name
ALTER TABLE table_name DROP COLUMNS (col_name_1, col_name_2, ...)
詳細については、「Delta Lake のテーブル スキーマを更新する」を参照してください。
列名でサポートされる文字
Delta テーブルで列マッピングが有効になっている場合は、テーブルの列名にスペースと次の任意の文字を含めることができます: ,;{}()\n\t=
。
列マッピングとスキーマの変更が伴うストリーミング
重要
この機能は、Databricks Runtime 13.3 LTS 以降でパブリック プレビュー段階にあります。
スキーマ追跡の場所を指定して、列マッピングが有効になっている Delta テーブルからのストリーミングを有効にすることができます。 これにより、非加法スキーマの変更によってストリームが破損する可能性がある問題が克服されます。
データ ソースに対する各ストリーミングの読み込みには、独自の schemaTrackingLocation
を指定する必要があります。 指定された schemaTrackingLocation
は、ストリーミング書き込み用のターゲット テーブルの checkpointLocation
に指定されたディレクトリ内に含まれている必要があります。
注意
複数ソースの Delta テーブルからのデータを結合するストリーミング ワークロードの場合は、ソース テーブルごとの checkpointLocation
内の一意のディレクトリを指定する必要があります。
次のコード例に示すように、オプション schemaTrackingLocation
はスキーマ追跡のパスを指定するために使用されます。
checkpoint_path = "/path/to/checkpointLocation"
(spark.readStream
.option("schemaTrackingLocation", checkpoint_path)
.table("delta_source_table")
.writeStream
.option("checkpointLocation", checkpoint_path)
.toTable("output_table")
)
列マッピングを無効にする
Databricks Runtime 15.3 以降では、DROP FEATURE
コマンドを使用してテーブルから列マッピングを削除し、テーブル プロトコルをダウングレードできます。
「Delta テーブル機能の削除」を参照してください。