date - 有两个不同的字符串代表两个不同的配置单元表中的日期,我想用它们来连接

标签 date hadoop hive hiveql

因此,我的 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/

相关文章:

mysql - 使用不同的定义重建 Hive 表

hive - Hadoop HIVE - 如何查询部分行

date - Java中`uuuu`格式化模式代码中的`yyyy`与`DateTimeFormatter`?

javascript - 在 JavaScript 中计算不包括周末和假期的天数

r - 在 R 中绘制按时间显示日期的折线图

sql-server - 使用 Tableau 创建仪表板的 Hive 性能?

hadoop - phoenix hbase 表预拆分,同一区域有多个拆分点

java - 无法解析自定义Java日期: Can I set it to a default year?

performance - 使用 ganglia 监控 hadoop 集群上的磁盘 I/O

hadoop - 我们可以在JDBC URL中使用多个配置单元服务器进行故障转移吗