在hive中使用spark hive context格式从oracle导入到hive的日期格式为YYYYMMDD (dt



我必须使用Spark和Scala从Oracle导入一个表到Hive, Oracle中的日期列看起来像这个Oracle列日期,我必须将其转换为Hive中的dt_skey格式(YYYYMMDD)。Hive中的表格格式为Parquet格式。我该怎么做呢?我在谷歌上搜索了很多,但没有找到任何解决办法。

Thanks in advance

假设您的输入数据应该是yy-mm-dd(所以16-09-15意味着2016年,09月,15日),您可能需要这样的转换:

select to_char( to_date (dt, 'yy-mm-dd'), 'yyyymmdd') from ...

的例子:

with my_table ( dt ) as ( select '16-09-15' from dual)
  -- this creates a test table my_table with column dt and value as shown
select dt, 
       to_char( to_date (dt, 'yy-mm-dd'), 'yyyymmdd') as dt_skey
from my_table
;

DT        DT_SKEY
--------  --------
16-09-15  20160915

您也可以直接操作输入字符串,但我强烈建议不要这样做。转换日期和返回日期将在您尝试将数据推送到应用程序之前捕获数据中的无效"日期"。此外,如果输入字符串不一致(例如,允许使用16-9-15和16-09-15),则字符串操作将变得复杂。

EDIT:在对他最初问题的评论中,OP声明dt在Oracle中已经是DATE格式了。在这种情况下,它不应该被包装在to_date()中——那会导致错误。相反,解决方案要简单得多,所需要的只是

select to_char(dt, 'yyyymmdd') from ...

最新更新