对于基于日期的Hive分区,为什么要使用字符串类型?为什么不int?

时间:2013-03-04 16:18:34

标签: hadoop hive

如果我在Hive中定义一个表,并且将根据日期进行分区,并且我的日期格式为YYYYMMDD,我应该选择哪个类型,int或字符串?

如果它只是一个字段,因此在我为表提供的文件中,我可以看到使用字符串,即使只是为了我可以搜索并识别可能以我的方式进入我的方式的格式错误的条目数据。但由于我将指定分区作为加载过程的一部分,我知道我将始终具有正确形成的值。

Where子句中使用时,分区字段通常是相等的或小于/大于逻辑。

2 个答案:

答案 0 :(得分:3)

日期通常在Hive中被视为字符串。如果查看所有可用的日期操作UDF,它们会使用字符串类型,因此如果您使用整数,则必须每次都使用它们。

从概念上讲,我认为使用字符串更有意义,YYYYMMDD只是日期对象的文字表示,但它隐含地等同于YYYY-MM-DD或DDMMYYYY。因此,如果你在这里使用整数,那么进行这样的比较就会变得很痛苦。

请注意,您还可以将Hive中的字符串与相等/大于/小于运算符进行比较,如果要选择一系列分区,则可以使用这些运算符轻松完成。

我会看到使用“日期”作为整数的唯一情况是使用时间戳(Unix风格),因为它是一个连续值,代表一个真实的可测量数量。

答案 1 :(得分:2)

因为YYYY-MM-DD是日期表示的标准,并且是hive的to_date()UDF的输出 它还允许你做一些懒惰的事情,比如select * from foo where day>'2013'

http://xkcd.com/1179/