Hadoop 对于基于日期的配置单元分区,为什么使用字符串类型?为什么不是int?

Hadoop 对于基于日期的配置单元分区,为什么使用字符串类型?为什么不是int?,hadoop,hive,Hadoop,Hive,如果我在配置单元中定义一个表,并且将基于日期进行分区,并且我的日期格式为YYYYMMDD,那么我应该为类型、int还是string选择哪个 如果它只是一个字段,因此在我为表提供的文件中,我可以看到使用字符串,即使只是为了搜索和识别可能进入我的数据的格式错误的条目。但由于我将在加载过程中指定分区,所以我知道我将始终具有正确格式的值 在Where子句中使用时,分区字段通常等于或小于/大于逻辑。日期通常在配置单元中被视为字符串。如果查看所有可用的日期操纵UDF,它们使用字符串类型,因此如果使用整数,则

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

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


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

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

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

请注意,您还可以将配置单元中的字符串与equality/greater/lower than运算符进行比较,如果您想选择一系列分区,可以使用这些运算符轻松地进行比较


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

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


是的,对于存储日期的其他字段,我通常使用字符串,通常格式为配置单元日期(YYYY-MM-DD)。对于这种情况,分区中使用的日期已经格式化为YYYYMMDD,因此尝试确定将类型设置为整数而不是字符串是否有任何好处。如前所述,带有划分日期的where子句通常是平等测试。如果我认为我需要更复杂的日期函数,我会选择string并将其重新格式化为配置单元日期格式。嘿,关于将配置单元中的字符串与grater/lower-than操作进行比较,这是如何工作的?意思是检查长度和内容,还是只检查其中一项(这没有意义)。例如,“2013-06-06”>“2013-06-07”是否为假?“2013-06-06 00:00:00”>“2013-06-07”仍然是假的吗?