Delta Lake 列マッピング を使用した列の名前変更と削除
プレビュー
この機能はパブリックプレビュー段階です。
Databricks では、Delta Lake テーブルの列マッピングがサポートされており、メタデータのみの変更により、データ ファイルを書き換えることなく、列を削除済みまたは名前変更済みとしてマークできます。 また、ユーザーはスペースなど、Parquet で許可されていない文字を使用して Delta テーブルの列に名前を付けることができるため、以前の文字制約のために列の名前を変更しなくても、CSV または JSON データを Delta に直接取り込むことができます。
重要
列マッピングを有効にすると、ランダムなファイル プレフィックスも有効になり、Hive スタイルのパーティション分割を使用してデータを探索できなくなります。 「 Delta Lake と Parquet はパーティション分割戦略を共有していますか?」を参照してください。
テーブルで列マッピングを有効にすると、変更データ フィードに依存するダウンストリーム操作 Delta 中断する可能性があります。 列 マッピングが有効になっているテーブルのデータフィード制限の変更を参照してください。
テーブルで列マッピングを有効にすると、 Delta Live Tablesを含む、ソースとしての Delta テーブルからのストリーミング読み取りが中断される可能性があります。 列マッピングとスキーマ変更を伴うストリーミングを参照してください。
Delta Lake 列マッピング を有効にする方法
重要
テーブルの列マッピングを有効にすると、Deltaテーブルのバージョンがアップグレードされます。 このプロトコルのアップグレードは元に戻せません。 列マッピングが有効になっているテーブルは、Databricks Runtime 10.4 LTS 以降でのみ読み取ることができます。
列マッピングには、次の Delta プロトコルが必要です。
リーダーバージョン2以上。
ライター バージョン 5 以上。
必要なプロトコル バージョンを持つ Delta テーブルの場合、 delta.columnMapping.mode
を name
に設定することで、列マッピングを有効にできます。
次のコマンドを使用して、テーブルのバージョンをアップグレードし、列マッピングを有効にすることができます。
ALTER TABLE <table-name> SET TBLPROPERTIES (
'delta.minReaderVersion' = '2',
'delta.minWriterVersion' = '5',
'delta.columnMapping.mode' = 'name'
)
注
列マッピングを有効にした後でオフにすることはできません。 'delta.columnMapping.mode' = 'none'
を設定しようとすると、エラーが発生します。
列 の名前を変更する
注
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")
)