如果我在配置单元中定义一个表,并且将基于日期进行分区,并且我的日期格式为yyyymmdd,那么我应该选择哪种类型,int还是string?如果它只是一个字段,因此在我为表提供的文件中,我可以看到使用字符串,即使只是为了搜索和识别可能进入我的数据的格式错误的条目。但由于我将指定分区作为加载过程的一部分,所以我知道我总是有正确格式的值。当用于 Where 子句中,分区字段通常为相等或小于/大于逻辑。
Where
e7arh2l61#
在配置单元中,日期通常被视为字符串。如果查看所有可用的日期操作自定义项,它们都使用字符串类型,因此如果使用整数,则每次都必须强制转换它们。从概念上讲,我认为使用字符串更有意义,yyyymmdd只是日期对象的文字表示,但它隐式地等同于yyyy-mm-dd或ddmmyyyy之类的内容。所以如果你在这里使用整数,做这样的比较会很痛苦。请注意,您还可以在配置单元中比较具有相等/大于/小于运算符的字符串,如果要选择一系列分区,可以使用这些运算符轻松地进行比较。我看到的唯一使用“date”作为整数的情况是使用时间戳(unix风格),因为它是一个连续值,表示一个真正可测量的量。
zbwhf8kr2#
因为yyyy-mm-dd是日期表示的标准,并且是hive的to\u date()自定义项的输出,所以它还允许您执行诸如select*from foo where day>'2013'之类的惰性操作http://xkcd.com/1179/
2条答案
按热度按时间e7arh2l61#
在配置单元中,日期通常被视为字符串。如果查看所有可用的日期操作自定义项,它们都使用字符串类型,因此如果使用整数,则每次都必须强制转换它们。
从概念上讲,我认为使用字符串更有意义,yyyymmdd只是日期对象的文字表示,但它隐式地等同于yyyy-mm-dd或ddmmyyyy之类的内容。所以如果你在这里使用整数,做这样的比较会很痛苦。
请注意,您还可以在配置单元中比较具有相等/大于/小于运算符的字符串,如果要选择一系列分区,可以使用这些运算符轻松地进行比较。
我看到的唯一使用“date”作为整数的情况是使用时间戳(unix风格),因为它是一个连续值,表示一个真正可测量的量。
zbwhf8kr2#
因为yyyy-mm-dd是日期表示的标准,并且是hive的to\u date()自定义项的输出,所以它还允许您执行诸如select*from foo where day>'2013'之类的惰性操作
http://xkcd.com/1179/