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.modenameに設定することで列マッピングを有効にできます。

列マッピングを有効にするには、次のコマンドを使用できます。

  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コマンドを使用してテーブルから列マッピングを削除し、テーブル プロトコルをダウングレードできます。

DROP FEATUREコマンドには、より高いプロトコル バージョンが必要です。 次のコマンドを使用して、テーブル リーダーとライターのバージョンをアップグレードできます。これにより、列マッピングを削除し、プロトコルをダウングレードできます。

  ALTER TABLE <table-name> SET TBLPROPERTIES (
    'delta.minReaderVersion' = '3',
    'delta.minWriterVersion' = '7'
  )

Drop Delta テーブルの機能を参照してください。