【问题标题】:How to convert .net DateTime.Ticks to Hive DateTime in query?如何在查询中将 .net DateTime.Ticks 转换为 Hive DateTime?
【发布时间】:2015-05-28 09:18:19
【问题描述】:

我有一个日志文件,其中包含 DateTime.Ticks (635677577653488758) 中的一列,我正在尝试将其转换为 Hadoop Hive 中的日期。

首先我在 MySql 上尝试了下面的代码块,它工作正常。但是相同的代码在 Hive 中不起作用,因为 date_add 函数适用于 INT。

SELECT DATE_ADD('2001-01-01 00:00:00', INTERVAL (MAX(f.date) - 631139040000000000)/10 MICROSECOND);

那我就这样格式化...

SELECT DATE_FORMAT(MyDateFromTicks, '%Y-%m-%dT%T.%fZ');

我怎样才能做到这一点?

谢谢。

【问题讨论】:

    标签: c# datetime hadoop hive amazon-emr


    【解决方案1】:

    我找到了解决方案。我在这里写下来,所以如果有人走到这一步可以检查答案:)

    我的报价:635683895215023579

    EPOCH 报价:621355968000000000

    SELECT FROM_UNIXTIME(CAST((635683895215023579 - 621355968000000000)/10000000 as BIGINT),'yyyy-MM-dd\'T\'HH:mm:ss.SSSZ');
    

    【讨论】:

    • 小心 - Unix 时间(和 Unix 纪元)始终基于 UTC,因此指的是特定的时间点。 DateTime 刻度基于日期和时间值,不考虑与DateTime 关联的.Kind。这些记号可能指的是基于 UTC 的特定时刻,但也可以很容易地基于最初编写它们的计算机的本地时区,或者完全基于其他时区。您需要更多地了解创建它们的上下文。如果没有该上下文,您可能会返回与开始时不同的日期/时间。
    【解决方案2】:

    用java写一个UDF..使用SimpleDateFormat类将数据转换成日期

    【讨论】:

    • 我会尽快尝试的。你还知道其他的原生蜂巢方式吗?谢谢。
    猜你喜欢
    • 2011-03-07
    • 2017-12-14
    • 2020-03-04
    • 1970-01-01
    • 2015-05-08
    • 1970-01-01
    • 2020-09-20
    相关资源
    最近更新 更多