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

lib*_*ack 5 hadoop hive

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

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

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

Cha*_*guy 5

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

从概念上讲,我也认为使用字符串更有意义,您的 YYYYMMDD 只是日期对象的字面表示,但它隐式相当于 YYYY-MM-DD 或 DDMMYYYY 之类的东西。因此,如果您在这里使用整数,那么进行此类比较就会变得很痛苦。

请注意,您还可以使用等于/大于/小于运算符来比较 Hive 中的字符串,如果您想选择一系列分区,则可以使用这些运算符轻松实现。

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