本文通过示例为您介绍如何使用E-MapReduce上的StarRocks集群进行Iceberg数据源查询。

前提条件

  • 已创建包含Iceberg服务的集群,例如Hadoop或DataLake集群等,详情请见创建集群
  • 已创建StarRocks集群,详情请见创建StarRocks集群

使用限制

  • 创建的两个集群需要在同一个VPC下,并且在同一个可用区下。
  • StarRocks当前支持查询Versions 1表 (Analytic Data Tables) ,暂不支持查询Versions 2表 (Row-level Deletes) 。两种表的详细信息请参见Iceberg Table Spec

操作步骤

  1. 创建Iceberg Catalog。
    CREATE EXTERNAL CATALOG catalog_name PROPERTIES ("key"="value", ...);
    涉及参数如下:
    • catalog_name:Iceberg Catalog的名称,必选参数。
      命名要求如下:
      • 必须由字母(a~z或A~Z)、数字(0~9)或下划线(_)组成,且只能以字母开头。
      • 总长度不能超过64个字符。
    • PROPERTIES:Iceberg Catalog的属性,必选参数。Iceberg使用的元数据服务不同,该参数的配置也不同。在Iceberg中也存在Catalog的概念,其作用是保存Iceberg表和其存储路径的映射关系。不同元数据服务的配置方法如下:
      • Hive MetaStore
        属性 是否必选 说明
        type 数据源类型,取值为iceberg
        iceberg.catalog.type Iceberg中Catalog的类型。使用Hive MetaStore则设置该参数为HIVE
        iceberg.catalog.hive.metastore.uris Hive MetaStore的URI。格式为thrift://<Hive MetaStore的IP地址>:<端口号>,端口号默认为9083。
      • 自定义元数据服务

        如果使用自定义元数据服务,则需要您在StarRocks中开发一个Custom Catalog类(Custom Catalog类名不能与StarRocks中已存在的类名重复),并实现相关接口,以保证StarRocks能够访问自定义元数据服务。Custom Catalog类需要继承抽象类BaseMetastoreCatalog 。有关Custom Catalog开发和相关接口实现的具体信息, 请参见IcebergHiveCatalog。开发完成后,您需要将Custom Catalog及其相关文件打包并放到所有FE节点的fe/lib路径下,然后重启所有FE节点,以便FE识别该类。

        属性 是否必选 说明
        type 数据源类型,取值为iceberg
        iceberg.catalog.type Iceberg中Catalog的类型。使用自定义元数据服务时设置该参数为CUSTOM
        iceberg.catalog-impl Custom Catalog的全限定类名。

        FE会根据该类名查找开发的Custom Catalog。如果您在Custom Catalog中自定义了配置项,且希望在查询外部数据时这些配置项能生效,您可以在创建Iceberg Catalog时将这些配置项以键值对的形式添加到SQL语句的PROPERTIES中。

  2. 查询Iceberg表。
    select * from iceberg_catalog.db_name.table_name;