javaapi、spark、flink 创建Iceberg表,hive 和impala无法正常读取解决

发布时间 2023-11-02 15:31:51作者: 一九七

spark、flink 创建Iceberg表中,元数据存储在hive 的meta_store,发现hive 或者impala无法正常读取报错。事实上解决方案是

在spark 、flink 的SQL中执行语句:

add iceberg相关引擎的runntime的jar;
ALTER TABLE t SET TBLPROPERTIES ('storage_handler'='org.apache.iceberg.mr.hive.HiveIcebergStorageHandler');
就可以解决。
原因是因为impala和hive 是依据元数据库中的
StorageHandler 来序列号和反序列化数据的.

使用iceberg的java的api 建表语句中 建表属性补充上
Catalog catalog=...;
    Map<String, String> tableProperties=Maps.newHashMap();
    tableProperties.put(TableProperties.ENGINE_HIVE_ENABLED,"true"); // engine.hive.enabled=true
    catalog.createTable(tableId,schema,spec,tableProperties);