hive中分区列允许的数据类型是什么?

What are the allowed data types of partition column in hive?

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

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

如果您尝试使用复杂类型创建 table 作为分区,它会失败:

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

FAILED: SemanticException [Error 10126]: Partition column must be of primitive type. Found somemap of type: map

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

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