【问题标题】:Impala - First date of Month from string dateImpala - 从字符串日期开始的月份的第一个日期
【发布时间】:2019-01-11 14:54:04
【问题描述】:

我的源表(暂存)中有列 data_as_of_daily_date(数据类型字符串),我需要根据 Impala 中的源表列找出每月的第一个日期,并将其加载到具有列 FIRST_DAY_OF_MONTH(字符串类型)的目标表中。

源表:

+--------------------+
data_as_of_daily_date
+--------------------+
+20181217            +
+20181115            +

我正在运行以下查询:

SELECT 
      DATE_ADD(FROM_UNIXTIME(UNIX_TIMESTAMP(DATA_AS_OF_DAILY_DATE, 'yyyyMMdd')), 1 - DAY(FROM_UNIXTIME(UNIX_TIMESTAMP(DATA_AS_OF_DAILY_DATE, 'yyyyMMdd')))) AS FIRST_DAY_OF_MONTH
FROM TABLE;

输出:

+--------------------+
AS FIRST_DAY_OF_MONTH
+--------------------+
+2018-12-01 00:00:00 +
+2018-11-01 00:00:00 +

预期输出:

+--------------------+
AS FIRST_DAY_OF_MONTH
+--------------------+
+20181201            +
+20181101            +

【问题讨论】:

    标签: hadoop hive hiveql impala


    【解决方案1】:

    除非您更改格式,否则无需使用 from_unixtime,unix_timestamp。

    select DATE_SUB(data_as_of_daily_date,DAY(data_as_of_daily_date) - 1) 
    from table;
    

    【讨论】:

    • 这个查询返回NULL值,是不是因为data_as_of_daily_date列在Staging层是String类型的。
    • @ASaraf DATE_SUB(string date, int days)
    • 下面是我测试这个的查询,它返回 NULL 作为输出 select DATE_SUB(DATA_AS_OF_DAILY_DATE,DAY(DATA_AS_OF_DAILY_DATE) - 1), DATA_AS_OF_DAILY_DATE from table_name WHERE DATA_AS_OF_DAILY_DATE = '20181217';
    • select DATA_AS_OF_DAILY_DATE from table_name WHERE DATA_AS_OF_DAILY_DATE = '20181217' 得到什么?
    • 选择 DATE_SUB(DATA_AS_OF_DAILY_DATE,DAY(DATA_AS_OF_DAILY_DATE) - 1) 作为第一天,DATA_AS_OF_DAILY_DATE from table_name WHERE DATA_AS_OF_DAILY_DATE = '20181217'; 1 空 20181217 2 空 20181217 3 空 20181217
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-02
    • 2016-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-19
    相关资源
    最近更新 更多