湖存储

更新时间:

AnalyticDB for MySQL推出湖存储功能。该功能可以简化数据湖的构建和存储管理、优化任务,同时也支持存储Iceberg、Paimon等类型的结构化表数据和非结构化文件对象。该功能主要适用于需同时满足离线批处理和实时分析的场景。本文主要介绍如何创建、修改湖存储以及查看湖存储的数据量。

重要

湖存储功能处于邀测中,如果您需要开通该功能,请提交工单联系技术支持。

前提条件

AnalyticDB for MySQL集群的产品系列为企业版、基础版或湖仓版

功能介绍

AnalyticDB for MySQL湖存储可以存储Iceberg、Paimon等格式的结构化表数据和非结构化文件对象。通过全托管架构,湖存储能够自动处理数据湖的构建、元数据治理和存储优化等复杂任务,既降低存储成本,又提升了查询性能。通过统一的元数据管理和服务化资源调度,您也能够快速完成数据接入、存储优化以及多引擎协同计算的流程,且无需维护底层基础设施。

费用说明

注意事项

  • 一个阿里云账号在同一地域内最多可创建5个湖存储。

  • 湖存储的存储用量显示存在延迟,因此无法在数据写入后立即查看到数据量。

  • 删除湖存储时,需要确保已删除该湖存储中的所有数据,否则删除湖存储操作会报错。

  • 创建湖存储后,AnalyticDB for MySQL会自动在其服务账号下的OSS中,创建一个和AnalyticDB for MySQL集群同地域、且与湖存储同名的Bucket。您可以通过添加收藏路径的方式,在自己阿里云账号下的OSS中查看该Bucket。

    点击查看OSS Bucket的方法

    1. 登录OSS管理控制台

    2. 在左侧导航栏单击我的收藏路径后面的image按钮。

    3. 添加收藏路径对话框中选择添加方式,并填写地域以及Bucket名称

      添加方式:固定选择为从其他已授权bucket添加

      地域AnalyticDB for MySQL集群所属地域。

      Bucket:填写湖存储名称

      image

  • AnalyticDB for MySQL备份恢复功能不支持湖存储中的数据。

新建湖存储

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

  2. 在左侧导航栏单击数据管理 > 湖存储管理

  3. 单击页面右上角新建湖存储

  4. 在弹出的新建湖存储对话框中单击确定

    重要

    湖存储名称为系统自动生成,格式为adb-lake-地域ID-任意字符串。湖存储名称全局唯一,创建后无法修改。

  5. (可选)修改湖存储描述。

    湖存储名称由系统自动生成,且不能修改。建议修改湖存储描述,以区分不同业务场景下的湖存储。

    1. 单击目标湖存储描述列的image按钮。

    2. 在弹出的修改湖存储描述对话框中输入描述信息,然后单击确定

使用湖存储

湖存储表是AnalyticDB for MySQL湖存储提供的全托管湖格式表,支持IcebergPaimon数据格式。在创建湖存储表后,系统会自动为湖存储表自动生成唯一的UUID,默认为oss://<湖存储名称>/lakehouse/default/tables/<table_uuid>。例如,湖存储表test_iceberg_tbl的数据存储在adb-lake-cn-shanghai-6gml****中,生成的UUIDoss://adb-lake-cn-shanghai-6gml****/lakehouse/default/tables/b22cd225-528d-421c-a2****。您可以通过XIHE引擎和Spark引擎创建、读写湖存储表,也能够像管理普通内表一样管理湖存储表的权限和生命周期,读写湖存储表的步骤如下:

通过Spark SQL读写湖存储表

前提条件

集群内核版本需为3.2.3.0及以上版本。

说明

云原生数据仓库AnalyticDB MySQL控制台集群信息页面的配置信息区域,查看和升级内核版本

操作步骤

  1. 进入数据开发。

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

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

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

  2. 创建外库与Iceberg湖存储表。

    1. 创建数据库。

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

      参数说明:

      参数

      说明

      adb_lake_bucket

      指定湖存储表数据的存储位置。

      在数据库建表语句中指定湖存储后,数据库中的所有表将统一存储于该湖存储中。如果您不希望将数据库下的所有表都存储到湖存储中,可以在建表时再设置该参数。

    2. 创建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

      指定湖存储表数据的存储位置。

      • 若您已在创建数据库时指定湖存储,数据库中的所有表将统一存储于该湖存储中,在建表时您无需再次指定。

      • 若您在创建数据库时未指定湖存储,此处必须显式指定,否则建表会报错。指定后,该表的数据会存储到该湖存储中。

      • 若在创建数据库和创建表时均显式指定湖存储,则该表的数据会存储在建表时指定的湖存储中;而数据库下的其他表则会存储在建库语句指定的湖存储中。

  3. 写入Iceberg数据。

    SET spark.adb.lakehouse.enabled=true;                      ----开启湖存储
    INSERT INTO adb_external_db_iceberg.test_iceberg_tbl VALUES (1, 'lisa', 10), (2, 'jams', 10);
  4. (可选)删除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;
  5. 查询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 |
    +---+----+---+
  6. (可选)删除Iceberg外表。

    执行如下语句会删除AnalyticDB for MySQL中的Iceberg外表和OSSIceberg外表的数据。

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

通过XIHE SQL读写湖存储表

前提条件

集群内核版本需为3.2.5.3及以上版本。

说明

云原生数据仓库AnalyticDB MySQL控制台集群信息页面的配置信息区域,查看和升级内核版本

注意事项

不支持通过DELETE语句删除湖存储表中的单条数据,仅支持删除整张表。

操作步骤

  1. 进入数据开发。

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

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

    3. SQLConsole窗口,选择XIHE引擎和Interactive型资源组。

  2. 创建外库与Iceberg外表。

    1. 创建外库。

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

      参数说明:

      参数

      说明

      adb_lake_bucket

      指定湖存储表数据的存储位置。

      在数据库建表语句中指定湖存储后,数据库中的所有表将统一存储于该湖存储中。如果您不希望将数据库下的所有表都存储到湖存储中,可以在建表时再设置该参数。

    2. 创建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

      指定湖存储表数据的存储位置。

      • 若您已在创建数据库时指定湖存储,数据库中的所有表将统一存储于该湖存储中,在建表时您无需再次指定。

      • 若您在创建数据库时未指定湖存储,此处必须显式指定,否则建表会报错。指定后,该表的数据会存储到该湖存储中。

      • 若在创建数据库和创建表时均显式指定湖存储,则该表的数据会存储在建表时指定的湖存储中;而数据库下的其他表则会存储在建库语句指定的湖存储中。

  3. 写入Iceberg数据。

    INSERT INTO test_db1.test_iceberg_tbl select 1, 'anna', 10;
    INSERT INTO test_db1.test_iceberg_tbl select 2, 'jams', 20;
  4. 查询Iceberg外表数据。

    SELECT * FROM adb_external_db_iceberg.test_iceberg_tbl;

    返回结果如下:

    +---+----+---+
    |id |name|age|
    +---+----+---+
    |1  |anna|10 |
    |2  |jams|20 |
    +---+----+---+
  5. (可选)删除Iceberg外表。

    执行如下语句会删除AnalyticDB for MySQL中的Iceberg外表和OSSIceberg外表的数据。

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

查询湖存储数据量

  1. 在左侧导航栏单击数据管理 > 湖存储管理

  2. 在目标湖存储的存储用量中查看数据量。

    重要

    湖存储的存储用量显示存在延迟,因此无法在数据写入后立即查看到数据量。

删除湖存储

  1. 在左侧导航栏单击数据管理 > 湖存储管理

  2. 单击目标湖存储操作列的删除

  3. 在弹出的删除对话框中单击确定

    重要

    删除湖存储时,需要确保已删除该湖存储中的所有数据,否则删除湖存储操作会报错。

相关文档