【问题标题】:hive string to date over lead function迄今为止的配置单元字符串超过了引导函数
【发布时间】:2021-03-12 03:33:20
【问题描述】:

所以伙计们,我必须把它从 PL/SQL (Oracle) 转换成 Hive 格式:

NVL(TO_CHAR(TO_DATE(SUBSTR(LEAD(DATE_TIME) OVER (PARTITION BY CU_NO ORDER BY CR_NO ,TO_NUMBER(DATE_TIME)),1,6),'YYMMDD'),'YYYYMMDD'),'99991231') END_DATE

我已经试过了:

NVL(cast(from_unixtime(UNIX_TIMESTAMP(SUBSTR(LEAD(DATE_TIME) OVER (PARTITION BY CU_NO ORDER BY CR_NO ,TO_NUMBER(DATE_TIME)),1,6), 'yyMMdd' ),'yyyyMMdd') as string)'99991231') END_DATE

它总是返回在 'yyyyMMdd' 附近的 ')' 处缺少 EOF。出了什么问题?

【问题讨论】:

    标签: hive hiveql lead


    【解决方案1】:

    NVL(cast(from_unixtime(UNIX_TIMESTAMP(SUBSTR(LEAD(DATE_TIME) OVER (PARTITION BY CU_NO ORDER BY CR_NO ,TO_NUMBER(DATE_TIME)),1,6), 'yyMMdd' ),'yyyyMMdd') as string) missing-comma, '99991231')

    缩进格式:

    NVL(
        cast(
            from_unixtime(
                UNIX_TIMESTAMP(
                    SUBSTR(
                        LEAD(DATE_TIME) OVER (PARTITION BY CU_NO
                                              ORDER BY CR_NO, 
                                                       TO_NUMBER(DATE_TIME)
                                             ),
                        1,6
                    ),
                    'yyMMdd'
                ),
                'yyyyMMdd'
            ) as string
        ),
    '99991231'
    )
    

    【讨论】:

      【解决方案2】:

      您不需要额外的 to_number() 按顺序排列:

      NVL(cast(from_unixtime(UNIX_TIMESTAMP(
                              SUBSTR(
                               LEAD(DATE_TIME) OVER (PARTITION BY CU_NO ORDER BY CR_NO, DATE_TIME)
                              ,1,6), 'yyMMdd')
                  ,'yyyyMMdd') 
         as string), '99991231')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-18
        • 1970-01-01
        • 2021-05-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-18
        相关资源
        最近更新 更多