湖存储
AnalyticDB for MySQL推出湖存储功能。该功能可以简化数据湖的构建和存储管理、优化任务,同时也支持存储Iceberg、Paimon等类型的结构化表数据和非结构化文件对象。该功能主要适用于需同时满足离线批处理和实时分析的场景。本文主要介绍如何创建、修改湖存储以及查看湖存储的数据量。
湖存储功能处于邀测中,如果您需要开通该功能,请提交工单联系技术支持。
前提条件
AnalyticDB for MySQL集群的产品系列为企业版、基础版或湖仓版。
功能介绍
AnalyticDB for MySQL湖存储可以存储Iceberg、Paimon等格式的结构化表数据和非结构化文件对象。通过全托管架构,湖存储能够自动处理数据湖的构建、元数据治理和存储优化等复杂任务,既降低存储成本,又提升了查询性能。通过统一的元数据管理和服务化资源调度,您也能够快速完成数据接入、存储优化以及多引擎协同计算的流程,且无需维护底层基础设施。
费用说明
创建湖存储后,AnalyticDB for MySQL会根据湖存储中的数据量和使用时长按量计费。计费详情,请参见企业版和基础版产品定价和湖仓版产品定价。
读写湖存储中的数据时,会产生请求费用,包括PUT类型请求次数费用和GET类型请求次数费用。计费详情,请参见企业版和基础版产品定价和湖仓版产品定价
注意事项
一个阿里云账号在同一地域内最多可创建5个湖存储。
湖存储的存储用量显示存在延迟,因此无法在数据写入后立即查看到数据量。
删除湖存储时,需要确保已删除该湖存储中的所有数据,否则删除湖存储操作会报错。
创建湖存储后,AnalyticDB for MySQL会自动在其服务账号下的OSS中,创建一个和AnalyticDB for MySQL集群同地域、且与湖存储同名的Bucket。您可以通过添加收藏路径的方式,在自己阿里云账号下的OSS中查看该Bucket。
AnalyticDB for MySQL备份恢复功能不支持湖存储中的数据。
新建湖存储
登录云原生数据仓库AnalyticDB MySQL控制台,在左上角选择集群所在地域。在左侧导航栏,单击集群列表,然后单击目标集群ID。
在左侧导航栏单击
。单击页面右上角新建湖存储。
在弹出的新建湖存储对话框中单击确定。
重要湖存储名称为系统自动生成,格式为
adb-lake-地域ID-任意字符串
。湖存储名称全局唯一,创建后无法修改。(可选)修改湖存储描述。
湖存储名称由系统自动生成,且不能修改。建议修改湖存储描述,以区分不同业务场景下的湖存储。
单击目标湖存储描述列的
按钮。
在弹出的修改湖存储描述对话框中输入描述信息,然后单击确定。
使用湖存储
湖存储表是AnalyticDB for MySQL湖存储提供的全托管湖格式表,支持Iceberg和Paimon数据格式。在创建湖存储表后,系统会自动为湖存储表自动生成唯一的UUID,默认为oss://<湖存储名称>/lakehouse/default/tables/<table_uuid>
。例如,湖存储表test_iceberg_tbl
的数据存储在adb-lake-cn-shanghai-6gml****中,生成的UUID为oss://adb-lake-cn-shanghai-6gml****/lakehouse/default/tables/b22cd225-528d-421c-a2****
。您可以通过XIHE引擎和Spark引擎创建、读写湖存储表,也能够像管理普通内表一样管理湖存储表的权限和生命周期,读写湖存储表的步骤如下:
通过Spark SQL读写湖存储表
前提条件
集群内核版本需为3.2.3.0及以上版本。
请在云原生数据仓库AnalyticDB MySQL控制台集群信息页面的配置信息区域,查看和升级内核版本。
操作步骤
进入数据开发。
登录云原生数据仓库AnalyticDB MySQL控制台,在左上角选择集群所在地域。在左侧导航栏,单击集群列表,然后单击目标集群ID。
在左侧导航栏,单击
。在SQLConsole窗口,选择Spark引擎和资源组(Job型资源组或Spark引擎的Interactive型资源组)。
创建外库与Iceberg湖存储表。
创建数据库。
CREATE DATABASE adb_external_db_iceberg WITH DBPROPERTIES ('adb_lake_bucket' = 'adb-lake-cn-shanghai-6gml****');
参数说明:
参数
说明
adb_lake_bucket
指定湖存储表数据的存储位置。
在数据库建表语句中指定湖存储后,数据库中的所有表将统一存储于该湖存储中。如果您不希望将数据库下的所有表都存储到湖存储中,可以在建表时再设置该参数。
创建Iceberg外表。
SET spark.adb.lakehouse.enabled=true; ----开启湖存储 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
指定湖存储表数据的存储位置。
若您已在创建数据库时指定湖存储,数据库中的所有表将统一存储于该湖存储中,在建表时您无需再次指定。
若您在创建数据库时未指定湖存储,此处必须显式指定,否则建表会报错。指定后,该表的数据会存储到该湖存储中。
若在创建数据库和创建表时均显式指定湖存储,则该表的数据会存储在建表时指定的湖存储中;而数据库下的其他表则会存储在建库语句指定的湖存储中。
写入Iceberg数据。
SET spark.adb.lakehouse.enabled=true; ----开启湖存储 INSERT INTO adb_external_db_iceberg.test_iceberg_tbl VALUES (1, 'lisa', 10), (2, 'jams', 10);
(可选)删除Iceberg数据。
SET spark.adb.lakehouse.enabled=true; ----开启湖存储 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.lakehouse.enabled=true; ----开启湖存储 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外表的数据。
SET spark.adb.lakehouse.enabled=true; DROP TABLE adb_external_db_iceberg.test_iceberg_tbl;
通过XIHE SQL读写湖存储表
前提条件
集群内核版本需为3.2.5.3及以上版本。
请在云原生数据仓库AnalyticDB MySQL控制台集群信息页面的配置信息区域,查看和升级内核版本。
注意事项
不支持通过DELETE语句删除湖存储表中的单条数据,仅支持删除整张表。
操作步骤
进入数据开发。
登录云原生数据仓库AnalyticDB MySQL控制台,在左上角选择集群所在地域。在左侧导航栏,单击集群列表,然后单击目标集群ID。
在左侧导航栏,单击
。在SQLConsole窗口,选择XIHE引擎和Interactive型资源组。
创建外库与Iceberg外表。
创建外库。
CREATE EXTERNAL DATABASE test_db WITH DBPROPERTIES ('adb_lake_bucket' = 'adb-lake-cn-shanghai-6gml****');
参数说明:
参数
说明
adb_lake_bucket
指定湖存储表数据的存储位置。
在数据库建表语句中指定湖存储后,数据库中的所有表将统一存储于该湖存储中。如果您不希望将数据库下的所有表都存储到湖存储中,可以在建表时再设置该参数。
创建Iceberg外表。
CREATE TABLE test_db.test_iceberg_tbl ( `id` int, `name` string )PARTITIONED BY (age int) STORED AS ICEBERG TBLPROPERTIES ( 'catalog_type' = 'ADB', 'adb_lake_bucket' = 'adb-lake-cn-shanghai-6gml****' );
参数说明:
参数
说明
catalog_type
指定catalog类型。固定填写为ADB。
adb_lake_bucket
指定湖存储表数据的存储位置。
若您已在创建数据库时指定湖存储,数据库中的所有表将统一存储于该湖存储中,在建表时您无需再次指定。
若您在创建数据库时未指定湖存储,此处必须显式指定,否则建表会报错。指定后,该表的数据会存储到该湖存储中。
若在创建数据库和创建表时均显式指定湖存储,则该表的数据会存储在建表时指定的湖存储中;而数据库下的其他表则会存储在建库语句指定的湖存储中。
写入Iceberg数据。
INSERT INTO test_db1.test_iceberg_tbl select 1, 'anna', 10; INSERT INTO test_db1.test_iceberg_tbl select 2, 'jams', 20;
查询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外表的数据。
SET spark.adb.lakehouse.enabled=true; DROP TABLE adb_external_db_iceberg.test_iceberg_tbl;
查询湖存储数据量
在左侧导航栏单击
。在目标湖存储的存储用量中查看数据量。
重要湖存储的存储用量显示存在延迟,因此无法在数据写入后立即查看到数据量。
删除湖存储
在左侧导航栏单击
。单击目标湖存储操作列的删除。
在弹出的删除对话框中单击确定。
重要删除湖存储时,需要确保已删除该湖存储中的所有数据,否则删除湖存储操作会报错。