hive中分区列允许的数据类型有哪些?

Wan*_*ong 5 hive partition hive-metastore hive-partitions hiveddl

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

lef*_*oin 3

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

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

create table test_t(id int) partitioned by (somemap map<string, string>);
Run Code Online (Sandbox Code Playgroud)

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

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

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