本文通过示例为您介绍如何使用E-MapReduce上的StarRocks集群进行Iceberg数据源查询。
前提条件
- 已创建包含Iceberg服务的集群,例如Hadoop或DataLake集群等,详情请见创建集群。
- 已创建StarRocks集群,详情请见创建StarRocks集群。
使用限制
- 创建的两个集群需要在同一个VPC下,并且在同一个可用区下。
- StarRocks当前支持查询Versions 1表 (Analytic Data Tables) ,暂不支持查询Versions 2表 (Row-level Deletes) 。两种表的详细信息请参见Iceberg Table Spec。
操作步骤
- 创建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
中。
- Hive MetaStore
- 查询Iceberg表。
select * from iceberg_catalog.db_name.table_name;