【问题标题】:Hive - month and year from timestamp columnHive - 来自时间戳列的月份和年份
【发布时间】:2017-01-10 06:18:05
【问题描述】:

您好,我正在尝试使用以下查询提取 hive 中时间戳列的月份和年份部分

select from_unixtime(unix_timestamp(upd_gmt_ts,'yyyyMM')) from  abc.test;

输出看起来像 2016-05-20 01:08:48

所需的输出应该是 201605

感谢任何建议。

【问题讨论】:

  • 查看select date_format(upd_gmt_ts,'yyyyMM') from abc.test;

标签: date hadoop hive sql-timestamp


【解决方案1】:

我更喜欢使用 Hive date_format()(从 Hive 1.2.0 开始)。它支持 Java SimpleDateFormat 模式。

date_format() 接受date/timestamp/string。所以你的最终查询将是

select date_format(upd_gmt_ts,'yyyyMM') from abc.test;

编辑:

SimpleDateFormat 可接受的模式示例。

【讨论】:

    【解决方案2】:

    您可以使用 CONCAT 和 FROM_UNIXTIME,如下所示:

    SELECT CONCAT(YEAR(FROM_UNIXTIME(1468215093)), MONTH(FROM_UNIXTIME(1468215093))) AS YEAR_MONTH
    

    在您的查询中:

    SELECT CONCAT(YEAR(FROM_UNIXTIME(upd_gmt_ts)), MONTH(FROM_UNIXTIME(upd_gmt_ts))) AS YEAR_MONTH
    FROM abc.test;
    

    【讨论】:

    • 感谢您的查询..但这给了我语义异常。没有按预期工作..
    • 失败:语义异常 [错误 10014]:第 1:19 行错误的参数“upd_gmt_ts”:类 org.apache.hadoop.hive.ql.udf.UDFFromUnixTime 与(时间戳)没有匹配的方法。可能的选择:_FUNC_(bigint) _FUNC_(bigint, string) _FUNC_(int) _FUNC_(int, string)
    • upd_gmt_ts你的时间戳值吗?
    【解决方案3】:

    请使用以下查询

    SELECT YEAR(FROM_UNIXTIME(unix_timestamp()))*100 + MONTH(FROM_UNIXTIME(unix_timestamp()))
    

    【讨论】:

      【解决方案4】:

      要查看yyyy-mm-dd hh:mm:ss格式的日期,可以如下使用:

      select to_utc_timestamp(col_name, 'PST') * from table;
      

      【讨论】:

        猜你喜欢
        • 2021-08-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多