Impala 3.4.0创建Kudu表报VARCHAR(n)类型不支持问题咨询
问题原因说明
- 你对IMPALA-5092工单的理解存在偏差:该工单仅实现了Impala引擎层对VARCHAR类型的基础支持,不代表所有和Impala对接的存储引擎都同步支持该类型。
- 该报错的核心限制来自Kudu侧:Kudu原生类型系统中仅提供无长度限制的STRING类型存储可变长字符串,没有VARCHAR、CHAR这类带长度约束的字符类型,所以无论Impala版本多高,只要对接Kudu存储引擎,都无法使用VARCHAR类型建表,和Impala的编译、配置参数无关,也不属于语法错误。
解决方案
你可以通过两种方式实现和VARCHAR(40)等价的效果:
- 直接将字段类型替换为STRING:如果不需要严格的长度强制校验,直接替换类型即可正常建表,Kudu的STRING类型本身支持存储最大64MB的字符串数据,性能和VARCHAR无显著差异。
create table kudu_test1 (x int primary key, y string) stored as kudu;
- 加CHECK约束实现长度限制:如果需要和VARCHAR一样强制校验字段长度,可以借助Impala 3.4+支持的CHECK约束实现,示例语句如下:
create table kudu_test1 ( x int primary key, y string, check (length(y) <= 40) ) stored as kudu;
补充说明
目前Impala的VARCHAR类型仅适配HDFS/对象存储上的Parquet、ORC、Text、Avro等存储格式,Kudu、HBase这类自带独立类型系统的存储引擎,暂不支持使用VARCHAR类型创建表。
内容的提问来源于stack exchange,提问作者Krzysztof J. Obara
相关产品推荐
相关产品推荐

