因此,我的 Hadoop 集群中的 Hive 中有两个外部表。
一个表有一个 (date STRING) 列,格式为 '2019-05-24 11:16:31.0'
另一个有 (date STRING) 列,格式为 '23/May/2019:22:15:04'
,它们都是字符串。我需要将它们转换为相同类型的日期格式,并使用它们来连接这两个表。
您将如何解决这个问题并在 hive 中解决所有问题?可能吗?我在Hadoop方面还是个菜鸟,对hive的可能性还不太了解。
Ps:我的 hive 版本不支持 !hive --version 命令来检查我正在使用的版本,所以我不太确定如何了解我正在使用的版本。不是我的集群,我也不是 root 用户。
最佳答案
在加入之前,您需要将两个字符串转换为相同的格式。
转换非标准格式'23/May/2019:22:15:04'
使用unix_timestamp(string date, string pattern)
来转换给定的date format到 1970-01-01 过去的秒数。然后使用from_unixtime()
转换为required format :
select from_unixtime(unix_timestamp('23/May/2019:22:15:04','dd/MMM/yyyy:HH:mm:ss'));
返回:
2019-05-23 22:15:04
如果您只需要日期,请在 from_unixtime 函数中指定日期格式 'yyyy-MM-dd'
:
select from_unixtime(unix_timestamp('23/May/2019:22:15:04','dd/MMM/yyyy:HH:mm:ss'),'yyyy-MM-dd');
返回:
2019-05-23
第二个表包含更标准的格式'2019-05-24 11:16:31.0'
,您可以使用更简单的方法。
您可以使用简单的 substr,因为日期已经采用 Hive 格式'yyyy-MM-dd'
:
select substr('2019-05-24 11:16:31.0',1,10);
返回:
2019-05-24
或者,如果您想要与第一个示例中相同的格式'yyyy-MM-dd HH:mm:ss'
:
select substr('2019-05-24 11:16:31.0',1,19);
返回:
2019-05-24 11:16:31
date_format(从 Hive 1.2.0 开始)函数也可用于相同的目的:
select date_format('2019-05-24 11:16:31.0','yyyy-MM-dd HH:mm:ss');
返回:
2019-05-24 11:16:31
日期部分仅使用 date_format(从 Hive 1.2.0 开始):
select date_format('2019-05-24 11:16:31.0','yyyy-MM-dd')
关于date - 有两个不同的字符串代表两个不同的配置单元表中的日期,我想用它们来连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56369219/