Delta Lake 列マッピングを使用して列の名前を変更および削除する
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'
)
「列マッピングの無効化」を参照してください。
列の名前を変更する
注:
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 テーブル スキーマの更新」を参照してください。
列マッピングとスキーマ変更によるストリーミング
重要
この機能は、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
コマンドを使用してテーブルから列マッピングを削除し、テーブル プロトコルをダウングレードできます。
Drop Delta テーブルの機能を参照してください。