通过Spark SQL读写Iceberg外表

更新时间:2025-03-27 06:46:14

本文主要介绍如何在云原生数据仓库 AnalyticDB MySQL 版中使用Spark SQL读写Iceberg外表。

前提条件

步骤一:进入数据开发

  1. 登录云原生数据仓库AnalyticDB MySQL控制台,在左上角选择集群所在地域。在左侧导航栏,单击集群列表。在集群列表上方,选择产品系列,然后单击目标集群ID。

  2. 在左侧导航栏,单击作业开发 > SQL开发

  3. SQLConsole窗口,选择Spark引擎和资源组(Job型资源组或Spark引擎的Interactive型资源组)。

步骤二:创建外库与Iceberg外表

说明

您可以选择批处理或交互式执行任意一种方式执行以下SQL语句。

  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);

步骤三:写入或删除Iceberg外表数据

在执行写入和删除操作时,需要在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, 'lisa', 10), (2, 'jams', 10);
  • INSERT OVERWRITE写入

    INSERT OVERWRITE 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 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.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;

步骤四:查询Iceberg外表数据

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 |
+---+----+---+

步骤五:删除Iceberg外表

  • 仅在AnalyticDB for MySQL中删除Iceberg外表,OSS中的Iceberg外表数据不删除:

    DROP TABLE adb_external_db_iceberg.test_iceberg_tbl;
  • 同时删除AnalyticDB for MySQL中的Iceberg外表和OSSIceberg外表的数据:

    DROP TABLE adb_external_db_iceberg.test_iceberg_tbl purge;

  • 本页导读 (1)
  • 前提条件
  • 步骤一:进入数据开发
  • 步骤二:创建外库与Iceberg外表
  • 步骤三:写入或删除Iceberg外表数据
  • 写入数据
  • 删除数据
  • 步骤四:查询Iceberg外表数据
  • 步骤五:删除Iceberg外表
AI助理

点击开启售前

在线咨询服务

你好,我是AI助理

可以解答问题、推荐解决方案等