すべてのプロダクト
Search
ドキュメントセンター

AnalyticDB:Spark SQL を使用した Iceberg 外部テーブルの読み取りと書き込み

最終更新日:Aug 28, 2025

このトピックでは、Spark SQL を使用して AnalyticDB for MySQL で Iceberg 外部テーブルを読み書きする方法について説明します。

前提条件

手順 1: SQL 開発ページに移動する

  1. AnalyticDB for MySQL コンソール にログインします。コンソールの左上隅で、リージョンを選択します。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。管理するクラスタを見つけ、クラスタ ID をクリックします。

  2. 左側のナビゲーションウィンドウで、ジョブを開発する > Sql開発 を選択します。

  3. [SQLConsole] タブで、Spark エンジンとリソースグループ(ジョブリソースグループまたは Spark エンジンを搭載したインタラクティブリソースグループ)を選択します。

手順 2: 外部データベースと Iceberg 外部テーブルを作成する

Data Lake Storage テーブル

  1. データベースを作成します。

    CREATE DATABASE adb_external_db_iceberg 
    WITH DBPROPERTIES ('adb_lake_bucket' = 'adb-lake-cn-shanghai-6gml****');

    次の表にパラメータを示します。

    パラメータ

    説明

    adb_lake_bucket

    Data Lake Storage テーブルデータのストレージ場所を指定します。

    データベースの作成ステートメントで Data Lake Storage を指定すると、データベース内のすべてのテーブルが Data Lake Storage に格納されます。データベース内のすべてのテーブルを Data Lake Storage に格納したくない場合は、テーブルの作成時にこのパラメータを設定できます。

  2. Iceberg 外部テーブルを作成します。

    SET spark.adb.lakehouse.enabled=true;                      -- Data Lake Storage を有効にする
    CREATE TABLE adb_external_db_iceberg.test_iceberg_tbl (
      `id` int,
      `name` string,
      `age` int
    ) USING iceberg
    PARTITIONED BY (age)
    TBLPROPERTIES ( 'adb_lake_bucket' = 'adb-lake-cn-shanghai-6gml****' );

    次の表にパラメータを示します。

    パラメータ

    説明

    adb_lake_bucket

    Data Lake Storage テーブルデータのストレージ場所を指定します。

    • データベースの作成時に Data Lake Storage を指定した場合、データベース内のすべてのテーブルは Data Lake Storage に格納されます。テーブルの作成時にこのパラメータを再度指定する必要はありません。

    • データベースの作成時に Data Lake Storage を指定しなかった場合、テーブルの作成時にこのパラメータを明示的に指定する必要があります。指定しないと、エラーが発生します。このパラメータを指定すると、テーブルのデータは指定された Data Lake Storage に格納されます。

    • データベースとテーブルの両方を作成するときに Data Lake Storage を明示的に指定した場合、テーブルのデータは、テーブルの作成時に指定された Data Lake Storage に格納されます。データベース内の他のテーブルは、データベースの作成時に指定された Data Lake Storage に格納されます。

Data Lake Storage 以外のテーブル

  1. 既存のデータベースに Iceberg 外部テーブルを作成できるかどうかを確認するか、新しいデータベースを作成します。

    • SHOW CREATE DATABASE 文を実行して、既存のデータベースの DDL 文を表示します。次のいずれかの条件が満たされている場合は、既存のデータベースを使用できます。そうでない場合は、新しいデータベースを作成する必要があります。

      • DDL 文に Location パラメータが指定されていない。

      • DDL 文に Location パラメータが指定されており、Catalog パラメータの値が mix である。

    • 新しいデータベースを作成します。

      CREATE DATABASE adb_external_db_iceberg;
  2. Iceberg 外部テーブルを作成します。

    重要

    データベースに Location パラメータが指定されている場合は、Iceberg 外部テーブルの作成、読み取り、書き込みに使用する spark.iceberg.warehouse パラメータで指定された OSS パスプレフィックスが Location パラメータと一致していることを確認する必要があります。

    SET spark.adb.version=3.5;                                  -- Spark バージョンを指定します。3.5 である必要があります。
    SET spark.iceberg.warehouse=oss://testBucketName/iceberg/;  -- Iceberg 外部テーブルのメタデータとデータファイルのストレージパス
    CREATE TABLE adb_external_db_iceberg.test_iceberg_tbl (
      `id` int,
      `name` string,
      `age` int
    ) USING iceberg
    PARTITIONED BY (age);

手順 3: Iceberg 外部テーブルにデータを書き込むか、Iceberg 外部テーブルからデータを削除する

Data Lake Storage テーブル

データの書き込み

書き込み操作を実行する場合は、SQL 文の前に次のパラメータを追加する必要があります。追加しないと、書き込み操作は失敗します。

SET spark.adb.lakehouse.enabled=true;                      -- Data Lake Storage を有効にする
  • INSERT INTO 文を実行してデータを書き込みます。

    INSERT INTO adb_external_db_iceberg.test_iceberg_tbl VALUES (1, 'lisa', 10), (2, 'jams', 20);
  • INSERT OVERWRITE 文を実行してデータを書き込みます。

    INSERT OVERWRITE adb_external_db_iceberg.test_iceberg_tbl VALUES (1, 'lisa', 10), (2, 'jams', 30);
  • INSERT OVERWRITE 文を実行してデータを静的パーティションに書き込みます。

    INSERT OVERWRITE adb_external_db_iceberg.test_iceberg_tbl PARTITION(age=10) VALUES (1, 'anna');
  • INSERT OVERWRITE 文を実行してデータを動的パーティションに書き込みます。

    SET spark.sql.sources.partitionOverwriteMode=dynamic;    -- 動的パーティションのみを上書きします。構成されていない場合、テーブル内のすべてのデータが上書きされます。
    INSERT OVERWRITE adb_external_db_iceberg.test_iceberg_tbl PARTITION(age) VALUES (1, 'bom', 10);
  • UPDATE 文を実行してデータを書き込みます。

    UPDATE adb_external_db_iceberg.test_iceberg_tbl SET name = 'box' WHERE id = 2;

データの削除

SET spark.adb.lakehouse.enabled=true;                      -- Data Lake Storage を有効にする
DELETE FROM adb_external_db_iceberg.test_iceberg_tbl WHERE id = 1;
DELETE FROM adb_external_db_iceberg.test_iceberg_tbl WHERE age = 20;

Data Lake Storage 以外のテーブル

書き込み操作と削除操作を実行する場合は、SQL 文の前に次のパラメータを追加する必要があります。追加しないと、書き込み操作と削除操作は失敗します。

SET spark.adb.version=3.5;                                  -- Spark バージョンを指定します。3.5 である必要があります。
SET spark.iceberg.warehouse=oss://testBucketName/iceberg/;  -- Iceberg 外部テーブルのメタデータとデータファイルのストレージパス

データの書き込み

  • INSERT INTO 文を実行してデータを書き込みます。

    INSERT INTO adb_external_db_iceberg.test_iceberg_tbl VALUES (1, 'Frank', 10), (2, 'Amy', 10);
  • INSERT OVERWRITE 文を実行してデータを書き込みます。

    INSERT OVERWRITE adb_external_db_iceberg.test_iceberg_tbl VALUES (1, 'Frank', 10), (2, 'Amy', 20);
  • INSERT OVERWRITE 静的パーティション書き込み

    INSERT OVERWRITE adb_external_db_iceberg.test_iceberg_tbl PARTITION(age=10) VALUES (1, 'Frank');
  • INSERT OVERWRITE 文を実行してデータを動的パーティションに書き込みます。

    SET spark.sql.sources.partitionOverwriteMode=dynamic;    -- 動的パーティションのみを上書きします。構成されていない場合、テーブル内のすべてのデータが上書きされます
    INSERT OVERWRITE adb_external_db_iceberg.test_iceberg_tbl PARTITION(age) VALUES (1, 'Bom', 10);
  • UPDATE 文を実行してデータを書き込みます。

    UPDATE adb_external_db_iceberg.test_iceberg_tbl SET name = 'box' WHERE id = 2;

データの削除

SET spark.adb.version=3.5;                                  -- Spark バージョンを指定します。3.5 である必要があります
SET spark.iceberg.warehouse=oss://testBucketName/iceberg/;  -- Iceberg 外部テーブルのメタデータとデータファイルのストレージパス
DELETE FROM adb_external_db_iceberg.test_iceberg_tbl WHERE id = 1;
DELETE FROM adb_external_db_iceberg.test_iceberg_tbl WHERE age = 20;

手順 4: Iceberg 外部テーブルからデータをクエリする

Data Lake Storage テーブル

SET spark.adb.lakehouse.enabled=true;                      -- Data Lake Storage を有効にする
SELECT * FROM adb_external_db_iceberg.test_iceberg_tbl;

戻り値:

+---+----+---+
|id |name|age|
+---+----+---+
|1  |anna|10 |
|2  |jams|20 |
+---+----+---+

Data Lake Storage 以外のテーブル

SET spark.adb.version=3.5;                                  -- Spark バージョンを指定します。3.5 である必要があります
SET spark.iceberg.warehouse=oss://testBucketName/iceberg/;  -- Iceberg 外部テーブルのメタデータとデータファイルのストレージパス
SELECT * FROM adb_external_db_iceberg.test_iceberg_tbl;

戻り値:

+---+----+---+
|id |name|age|
+---+----+---+
|1  |anna|10 |
|2  |jams|20 |
+---+----+---+

手順 5: Iceberg 外部テーブルを削除する

Data Lake Storage テーブル

Iceberg で管理されている Data Lake Storage テーブルのメタデータとデータを AnalyticDB for MySQL から削除します。

SET spark.adb.lakehouse.enabled=true;
DROP TABLE adb_external_db_iceberg.test_iceberg_tbl;

Data Lake Storage 以外のテーブル

  • OSS の Iceberg 外部テーブルデータを保持しながら、AnalyticDB for MySQL から Iceberg 外部テーブルを削除します。

    DROP TABLE adb_external_db_iceberg.test_iceberg_tbl;
  • AnalyticDB for MySQL から Iceberg 外部テーブルを削除し、OSS から Iceberg 外部テーブルデータを削除します。

    DROP TABLE adb_external_db_iceberg.test_iceberg_tbl purge;