作者:闻乃松
创建表是引擎的必备基本能力,引擎有很多,Hive、Spark、Flink、Trino等等,我们姑且只关注这些,创建的表按照是否跟引擎绑定,分为两大类:managed table和external table。以这里举例的引擎为例,它们都可以将表元数据维护在Hive Metastore中,对引擎来讲,这些表以external table的形式存在。
在本文中,我们将话题限制在Hive、Spark、Flink、Trino如何创建Iceberg表,并且保证各引擎都可以无障碍互相访问。这样,我们的话题分为3个部分:
- 不同引擎创建的Iceberg表为什么不兼容?
- 如何屏蔽不同引擎创建Iceberg表的差异?
- 创建独立引擎的Iceberg表的步骤
不同引擎创建的Iceberg表为什么不兼容
Hive、Spark、Flink、Trino创建的Iceberg表元数据都存储在HMS中,也就是复用了HMS的存储模型,主要涉及的表的相互关系如下:
以Hive创建的Iceberg表为例,来看看其存储内容:
CREATE TABLE default.sample_hive_table_1( id bigint, name string ) PARTITIONED BY( dept string ) STORED BY ‘org.apache.iceberg.mr.hive.HiveIcebergStorageHandler’;</