Delta Lake 列マッピングを使用した列の名前変更と削除
Databricks では Delta Lake テーブルの列マッピングがサポートされているため、メタデータのみの変更で、データ ファイルを書き換えることなく列を削除または名前変更としてマークできます。 また、ユーザーは Parquet で許可されていない文字 (スペースなど) を使用して Delta テーブルの列に名前を付けることができるため、ユーザーは以前の文字制約のために列の名前を変更することなく、CSV または JSON データを Delta に直接取り込むことができます。
列マッピングが有効になっているテーブルは、Databricks Runtime 10.4 LTS 以降でのみ読み取ることができます。
カラムマッピングが有効になっているパーティションテーブルでは、パーティションディレクトリのカラム名の代わりにランダムなプレフィックスが使用されます。 「Delta Lake と Parquet はパーティション分割戦略を共有しますか?」を参照してください。
テーブルで列マッピングを有効にすると、 Delta チェンジデータフィードに依存するダウンストリームオペレーションが中断される可能性があります。 「カラムマッピングが有効になっているテーブルのチェンジデータフィードの制限」を参照してください。
テーブルで列マッピングを有効にすると、DLT を含む Delta テーブルからのソースとしてのストリーミング読み取りが中断される可能性があります。列マッピングとスキーマの変更によるストリーミングを参照してください。
列マッピングを有効にする
列マッピングには、次の Delta プロトコルが必要です。
- リーダーのバージョン2以上。
- Writer バージョン 5 以降。
必要なプロトコル バージョンを持つ Delta テーブルの場合は、 delta.columnMapping.mode
を name
に設定することで、列マッピングを有効にできます。
次のコマンドを使用して、列マッピングを有効にできます。
ALTER TABLE <table-name> SET TBLPROPERTIES (
'delta.columnMapping.mode' = 'name'
)
列の名前を変更する
Databricks Runtime 10.4 LTS 以降で使用できます。
Delta テーブルで列マッピングが有効になっている場合は、列の名前を変更できます。
ALTER TABLE <table-name> RENAME COLUMN old_col_name TO new_col_name
その他の例については、「 Delta Lake テーブル スキーマの更新」を参照してください。
列の削除
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 Lake テーブル機能の削除」および「テーブル プロトコルのダウングレード」を参照してください。