次の方法で共有


Delta Lake 列マッピングを使用して列の名前を変更および削除する

Azure Databricks では Delta Lake テーブルの列マッピングがサポートされています。これにより、メタデータのみの変更で、データ ファイルを書き換えずに列を削除または名前変更済みとしてマークできます。 また、ユーザーは、スペースなどの Parquet で許可されていない文字を使用して Delta テーブルの列に名前を付けることもできます。これにより、ユーザーは以前の文字制約のために列の名前を変更しなくても、CSV または JSON データを Delta に直接取り込むことができます。

重要

列マッピングが有効になっているテーブルは、Databricks Runtime 10.4 LTS 以降でのみ読み取ることができます。

列マッピングが有効になっているパーティション テーブルでは、パーティション ディレクトリの列名の代わりにランダム なプレフィックスが使用されます。 Delta Lake と Parquet のパーティション分割戦略 を参照してください。.

テーブルで列マッピングを有効にすると、差分変更データ フィードに依存するダウンストリーム操作が中断される可能性があります。 列マッピングが有効になっているテーブルのデータ フィード制限の変更を参照してください。

テーブルで列マッピングを有効にすると、ソースとしてのDeltaテーブルからのストリーミング読み取りが中断される可能性があります。これにはDelta Live Tablesも含まれます。 「列マッピングとスキーマの変更が伴うストリーミング」を参照してください。

列マッピングを有効にする

列マッピングには、次のデルタ プロトコルが必要です。

  • Reader バージョン 2 以降。
  • Writer バージョン 5 以降。

必要なプロトコル バージョンの Delta テーブルの場合は、delta.columnMapping.modenameに設定することで、列マッピングを有効にすることができます。

次のコマンドを使用して、列マッピングを有効にすることができます。

  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 に指定されたディレクトリ内に含まれている必要があります。

Note

複数のソース 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 テーブル機能の削除」を参照してください。