如何将 Hive 表中的所有时间戳转换为 EAT

Posted

技术标签:

【中文标题】如何将 Hive 表中的所有时间戳转换为 EAT【英文标题】:how to Covert all the timestamps to EST in Hive table 【发布时间】:2020-01-14 16:51:58 【问题描述】:

我有一个包含时间戳字段的 Hive 表,它可以有任何时区 ..(UTC/PST/CST....) 我想将它们全部转换为一个时间戳,EST。它可以在 Hive 或 Pyspark 中完成。 基本上,我在我的 pyspark 应用程序中使用它,该应用程序在此日期时间字段上有一个分组逻辑,在此之前我们希望将 Hive 表中的所有时间都转换为 EST 时间。

席德

【问题讨论】:

你试过什么?数据是什么样的? 【参考方案1】:

提及 HIV 时区对 Y2K38 错误和 JDBC 兼容性问题的最大时间限制的事实,

SERDE2 的 TIMESTAMP 类型支持 unix 时间戳(1970-01-01 00:00:01 UTC 到 2038-01-19 03:14:07 UTC),同时使用 LazyBinary 和 LazySimple SerDes,具有可选的纳秒精度。 对于 LazySimpleSerDe,数据存储在 jdbc 兼容的 java.sql.Timestamp 可解析字符串中。 HIV-2272

Here 是模拟关联,支持早于 1970 年和晚于 2038 年的时间戳。

Hive JDBC doesn't support TIMESTAMP column

因此,我认为如果您使用日期类型或字符串类型的 HIV DataType 会更好。然后你可以使用任何时区偏移作为持久化的默认值。

* utc_timestamp is the column name */


/* bellow will convert a timestamp in UTC to EST timezone  */

select from_utc_timestamp(utc_timestamp, 'EST') from table1;

希望这会有所帮助。

HIV Data Types

【讨论】:

感谢详细解释,确实有帮助!【参考方案2】:

Sidd,通常 Hive 使用写入数据的主机的本地时区。 from_utc_timestamp() 和 to_utc_timestamp 函数对我们很有帮助。在这种情况下,您应该使用位置/区域,而不是将时区声明为 UTC/EST,因为这将节省日光时间。

这里有更多示例的有用链接:Local Time Convert To UTC Time In Hive

如果您还有其他问题,请分享您已经尝试过的方法并分享您的数据样本 sn-p 以供进一步调查。

【讨论】:

以上是关于如何将 Hive 表中的所有时间戳转换为 EAT的主要内容,如果未能解决你的问题,请参考以下文章

在 hive 中将时间戳转换为 hive 格式时出错

如何在 hive 中将时间戳转换为 gmt 格式

如何在进行选择查询时将 YYYY-MM-DD HH:mm:ss 中的时间戳转换为 Hive 中的 YYYY-MM-DD HH:mm:ss.SSS?

在Hive中,如何将string 类的 时间戳,转换成日期?

以任意时间戳格式将数据导入 Hive

在 Hive 中仅将时间转换为 unix 时间戳