3

我很确定像 STRUCT 这样的复杂类型不能是分区列的类型。但我不确定所有原始类型是否有效。我已经阅读了很多文档,但没有找到任何东西。

4

1 回答 1

1

只允许原始类型。并且应该符合 UNIX 中的最大文件名限制(等号为 255-column_name_length-1,未精确检查),因为分区是一个文件夹。

如果您尝试创建具有复杂类型的表作为分区,则会失败:

create table test_t(id int) partitioned by (somemap map<string, string>);

失败:SemanticException [错误 10126]:分区列必须是原始类型。找到了一些类型的地图:map

它允许在分区列中创建具有原始类型的表,即使使用 BINARY,尽管文件夹名称中并非所有字符都允许,并且按原样加载二进制文件将导致失败。

毕竟,一切都可以序列化为带有允许字符的字符串。而且,如果您愿意,可以将结构存储为字符串并反序列化,尽管这不切实际,因为您需要分区修剪才能工作,并且分区过滤器中的功能将禁用此功能。

于 2019-04-25T13:20:43.197 回答