Apache Iceberg v3の機能を使用する
Apache Iceberg v3 はクエリーパフォーマンスを向上させ、Unity Catalog で Iceberg 読み取りを行う Iceberg または Delta Lake を使用したマネージドテーブル向けの新しい機能を提供します。
Iceberg v3 の主な機能は次のとおりです。
- **削除ベクトル**は、データファイル全体を書き換えずに、効率的な行レベルの削除を有効にします。Databricksの削除ベクトルを参照してください。
- VARIANTデータ型:半構造化データの格納と処理をサポートします。 「Apache IcebergとDelta Lakeのバリアント型サポート」を参照してください。
- 行リネージ:テーブルデータの増分変更を追跡します。Databricks の行追跡を参照してください。
- GEOMETRY および GEOGRAPHY データ型 : 空間アナリティクスや結合のために地理空間データを保存およびクエリーします。
GEOMETRYタイプおよびGEOGRAPHYタイプを参照してください。 - Write default : 書き込み時に列が省略された場合に新しい行に適用される列の値を指定します。書き込みのdefaultを使用したテーブルの作成を参照してください。
要件
地理空間型などのIceberg v3機能でマネージドテーブルを使用するには、次の要件を満たす必要があります。
- Unity Catalog が有効になっているワークスペース。
- Databricks Runtime 18 LTS 以降。
Iceberg v3で新しいテーブルを作成する
Iceberg 読み取りが有効なマネージド Delta Lake テーブルとマネージド Iceberg テーブルの両方に対して、Iceberg v3 を有効にした新しいテーブルを作成します。
- Delta Lake with Iceberg reads
- Iceberg
Iceberg読み取りとIceberg v3を有効にしたDelta Lakeを使用して新しいマネージドテーブルを作成するには、次のSQLコマンドを使用します。
CREATE OR REPLACE TABLE main.schema.table (c1 INT) TBLPROPERTIES(
'delta.universalFormat.enabledFormats' = 'iceberg',
'delta.enableIcebergCompatV3' = 'true'
);
Icebergの読み取りの情報については、「IcebergクライアントでDelta Lakeテーブルを読み取る」を参照してください。
Iceberg v3で新しいマネージドテーブルを作成するには、以下のSQLコマンドを使用します。
CREATE OR REPLACE TABLE main.schema.table (c1 INT)
USING iceberg
TBLPROPERTIES ('format-version' = 3);
Iceberg テーブルの詳細については、Databricks の Apache Iceberg とはを参照してください。
既存のテーブルを Iceberg v3 にアップグレードする
既存のテーブルを Iceberg v3 にアップグレードするには、次の操作を行います。
- テーブル上の任意の v3 機能を有効にします。
- テーブルの Iceberg 形式のバージョンを 3 に設定します (以下に表示)。
テーブルは、 RESTOREを使用してテーブルを v3 へのアップグレード前のテーブル バージョンに復元することにより、v3 から v2 にダウングレードできます。テーブルを以前のバージョンにダウングレードする方法を参照してください。
- Delta Lake with Iceberg reads
- Iceberg
Iceberg読み取りを使用するDelta Lakeのマネージドテーブルをv3にアップグレードするには、次のコマンドを使用します:
ALTER TABLE catalog.schema.table SET TBLPROPERTIES(
'delta.enableIcebergCompatV3' = 'true',
'delta.enableIcebergCompatV2' = 'false'
);
Icebergを使ったマネージドテーブルをv3にアップグレードするには、以下のコマンドを使用します:
ALTER TABLE catalog.schema.table SET TBLPROPERTIES (
'format-version' = 3
);
削除ベクトルを有効にする
削除ベクトルは行レベルのデータ変更操作を最適化し、すべての新しい Iceberg v3 テーブルでデフォルトで有効になっています。Databricks の削除ベクトルを参照してください。
既存の Iceberg テーブルで削除ベクトルを有効にすると、Iceberg 形式のバージョンが 3 にアップグレードされます。
- Delta Lake with Iceberg reads
- Iceberg
Iceberg読み取り、Iceberg v3、および削除ベクトルを有効にしてDelta Lakeを使用する新しいマネージドテーブルを作成するには、次のテーブルプロパティを設定します:
CREATE TABLE catalog.schema.table (c1 INT) TBLPROPERTIES(
'delta.enableDeletionVectors' = 'true',
'delta.enableIcebergCompatV3' = 'true',
'delta.universalFormat.enabledFormats' = 'iceberg'
);
削除ベクターを有効にしたIceberg v3で新しいマネージドテーブルを作成するには、 iceberg.enableDeletionVectors テーブルプロパティを設定します:
CREATE TABLE catalog.schema.table (c1 INT)
USING ICEBERG TBLPROPERTIES (
'iceberg.enableDeletionVectors' = 'true'
);
VARIANTデータ型を使用する
VARIANT データ型を使用すると、半構造化データを保存およびクエリできます。
既存の Iceberg テーブルで VARIANT を使用すると、Iceberg 形式のバージョンが 3 にアップグレードされます。
- Delta Lake with Iceberg reads
- Iceberg
Iceberg 読み取りと VARIANT 列を備えた Delta Lake を使用して新しいマネージドテーブルを作成するには、次の手順を実行します。
CREATE TABLE catalog.schema.deltaTable (col VARIANT) TBLPROPERTIES(
'delta.enableIcebergCompatV3' = 'true',
'delta.universalFormat.enabledFormats' = 'iceberg'
);
Iceberg v3でVARIANT列を持つ新しいマネージドテーブルを作成するには:
CREATE TABLE catalog.schema.icebergTable (col VARIANT) USING iceberg;
既存のテーブルに VARIANT 列を追加するには、 ALTER TABLEコマンドを使用します。
ALTER TABLE catalog.schema.table ADD COLUMN variant_col VARIANT;
GEOMETRY および GEOGRAPHY データ型を使用する
地理空間データを格納およびクエリーするには、GEOMETRYおよびGEOGRAPHYデータ型を使用します。GEOMETRYタイプおよびGEOGRAPHYタイプを参照してください。
既存の Iceberg テーブルで GEOMETRY または GEOGRAPHY を使用すると、Iceberg フォーマットのバージョンが 3 にアップグレードされます。
- Delta Lake with Iceberg reads
- Iceberg
Iceberg読み取りとGEOMETRYまたはGEOGRAPHY列を使用してDelta Lakeで新しいマネージドテーブルを作成するには:
CREATE TABLE catalog.schema.table (
geom_col GEOMETRY(3857),
geog_col GEOGRAPHY(4326)
) TBLPROPERTIES(
'delta.enableIcebergCompatV3' = 'true',
'delta.universalFormat.enabledFormats' = 'iceberg'
);
GEOMETRY または GEOGRAPHY カラムを使用して Iceberg v3 で新しいマネージドテーブルを作成するには、次のコマンドを使用します:
CREATE TABLE catalog.schema.table (
geom_col GEOMETRY(3857),
geog_col GEOGRAPHY(4326)
) USING iceberg;
既存のテーブルにGEOMETRYまたはGEOGRAPHY列を追加するには、ALTER TABLEコマンドを使用します。
ALTER TABLE catalog.schema.table ADD COLUMN geom_col GEOMETRY(3857);
ALTER TABLE catalog.schema.table ADD COLUMN geog_col GEOGRAPHY(4326);
書き込みの default を指定してテーブルを作成する
Iceberg v3 では、2 種類の default 値が定義されています。
- 書き込みのデフォルト値 は、書き込み時に対応する列が省略された場合に新しい行に適用されます。Databricksは書き込みのdefaultをサポートしています。
- Initial defaults は、新しい列が追加されたときに既存の行に適用されます。Databricks は initial defaults をサポートしていません。
- Delta Lake with Iceberg reads
- Iceberg
Iceberg 読み取りと書き込みのdefault値を備えた Delta Lake を使用して新しいマネージドテーブルを作成するには:
CREATE TABLE catalog.schema.table (
id INT,
row_status STRING DEFAULT 'active'
) TBLPROPERTIES(
'delta.enableIcebergCompatV3' = 'true',
'delta.universalFormat.enabledFormats' = 'iceberg'
);
書き込みの default を使用して Iceberg v3 で新しいマネージドテーブルを作成するには:
CREATE TABLE catalog.schema.table (
id INT,
row_status STRING DEFAULT 'active'
) USING iceberg;
適用された default を確認するには、row_status を指定せずに 1 行挿入します:
INSERT INTO catalog.schema.table (id) VALUES (1);
SELECT * FROM catalog.schema.table;
前のクエリーは、row_status に default が適用された状態で、以下を返します:
id row_status
1 active
テーブルを以前のApache Icebergバージョンにダウングレードする
テーブルを Iceberg v3 にアップグレードする前の状態に戻す必要がある場合は、 RESTOREコマンドを使用できます。
set spark.databricks.delta.restore.protocolDowngradeAllowed = true;
RESTORE TABLE catalog.schema.table TO VERSION AS OF 1;
set spark.databricks.delta.restore.protocolDowngradeAllowed = false;
制限事項
Databricks は、次の例外を除いて、Iceberg 仕様のバージョン 3 をサポートしています。
-
Initial defaults はサポートされていません。新しい列が追加されると、初期 default によって既存の行の値が設定されます。
-
次のデータ型はサポートされていません。
- 不明なタイプ
- ナノ秒精度のタイムスタンプ。
-
複数引数の変換はサポートされていません。