通过Spark SQL读写Iceberg外表
本文主要介绍如何在云原生数据仓库 AnalyticDB MySQL 版中使用Spark SQL读写Iceberg外表。
前提条件
集群的产品系列为企业版、基础版或湖仓版。
企业版和基础版预留资源需大于0 ACU。
湖仓版集群存储预留资源需大于0 ACU。
已创建数据库账号。
如果是通过阿里云账号访问,只需创建高权限账号。具体操作,请参见创建高权限账号。
如果是通过RAM用户访问,需要创建高权限账号和普通账号并且将RAM用户绑定到普通账号上。具体操作,请参见创建数据库账号和绑定或解绑RAM用户与数据库账号。
集群与OSS存储空间位于相同地域。
步骤一:进入数据开发
登录云原生数据仓库AnalyticDB MySQL控制台,在左上角选择集群所在地域。在左侧导航栏,单击集群列表。在集群列表上方,选择产品系列,然后单击目标集群ID。
在左侧导航栏,单击
。在SQLConsole窗口,选择Spark引擎和资源组(Job型资源组或Spark引擎的Interactive型资源组)。
步骤二:创建外库与Iceberg外表
您可以选择批处理或交互式执行任意一种方式执行以下SQL语句。
检查已有数据库中是否可以创建Iceberg外表,或新建数据库。
使用
SHOW CREATE DATABASE
语句查看数据库的DDL语句,满足以下两种情况,可以使用已有数据库,否则需新建数据库。DDL语句未指定
Location
。DDL语句指定了
Location
,且Catalog
参数的值为mix
。
新建数据库。
CREATE DATABASE adb_external_db_iceberg;
创建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外表和OSS中Iceberg外表的数据:
DROP TABLE adb_external_db_iceberg.test_iceberg_tbl purge;
- 本页导读 (1)
- 前提条件
- 步骤一:进入数据开发
- 步骤二:创建外库与Iceberg外表
- 步骤三:写入或删除Iceberg外表数据
- 写入数据
- 删除数据
- 步骤四:查询Iceberg外表数据
- 步骤五:删除Iceberg外表