5

如果我在 Hive 中定义一个表,并且将基于日期进行分区,并且我的日期格式为 YYYYMMDD,我应该为类型、int 还是 string 选择哪个?

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

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

4

2 回答 2

5

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

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

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

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

于 2013-03-04T17:42:41.623 回答
4

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

http://xkcd.com/1179/

于 2013-03-07T06:15:31.470 回答