【发布时间】:2019-09-14 20:23:19
【问题描述】:
我很确定像 STRUCT 这样的复杂类型不能是分区列的类型。但我不确定所有原始类型是否有效。我已经阅读了很多文档,但没有找到任何东西。
【问题讨论】:
标签: hive partition hive-metastore hive-partitions hiveddl
我很确定像 STRUCT 这样的复杂类型不能是分区列的类型。但我不确定所有原始类型是否有效。我已经阅读了很多文档,但没有找到任何东西。
【问题讨论】:
标签: hive partition hive-metastore hive-partitions hiveddl
只允许原始类型。并且应该符合 UNIX 中的最大文件名限制(等号为 255-column_name_length-1,未精确检查),因为分区是一个文件夹。
如果您尝试创建具有复杂类型的表作为分区,则会失败:
create table test_t(id int) partitioned by (somemap map<string, string>);
失败:SemanticException [错误 10126]:分区列必须是 原始类型。找到了一些类型的地图:map
它允许在分区列中创建具有原始类型的表,即使使用 BINARY,尽管文件夹名称中并非所有字符都允许,并且按原样加载二进制会导致失败。
毕竟,所有内容都可以序列化为带有允许字符的字符串。而且,如果您愿意,可以将结构存储为字符串并反序列化,尽管这不切实际,因为您需要分区修剪才能工作,并且分区过滤器中的功能将禁用此功能。
【讨论】: