【问题标题】:Date importing from oracle to hive using spark hive context format in hive should be YYYYMMDD (dt_skey)在 hive 中使用 spark hive 上下文格式从 oracle 导入到 hive 的日期应为 YYYYMMDD (dt_skey)
【发布时间】:2016-10-22 04:20:43
【问题描述】:

我必须使用 Spark 和 Scala 将表从 Oracle 导入 Hive,Oracle 中的日期列看起来像 Oracle column date,我必须将其转换为 Hive 中的 dt_skey 格式 (YYYYMMDD)。 Hive 中的表格格式是 Parquet。我怎样才能做到这一点?我用谷歌搜索了很多,但没有找到任何解决方案。

提前致谢

【问题讨论】:

  • 看来输入是字符串格式的,你也需要字符串格式的输出。输入是一个大问题。没有更多信息,16-09-15 是什么意思? 2015 年 9 月 16 日还是 2016 年 9 月 15 日?在 Oracle 表中,您永远不应该将日期存储为字符串 - 这只是众多原因之一。
  • 你试过使用 Sqoop 吗?
  • YY-MM-DD 是 oracle 中的格式,oracle 中的数据类型是 DATE,输入是 DATE 数据类型我必须将其更改为 yyyymmdd 格式,并且其数据类型将在 hive 中为 int。
  • 我的问题是如何在 hive 中将其转换为 yyyymmdd (dt_skey) 格式。
  • @Developer - 我不知道 Hive、Spark 等是什么。您确定“dt_skey”必须是字符串,而不是“日期”数据类型吗? “日期”数据类型中的值没有格式 - 您在 Oracle 中的当前日期在 ORACLE 中没有格式 16-09-16,它们仅以这种方式显示在您的屏幕上(由您使用的前端应用程序)。您是否尝试按原样导入数据而不进行任何转换?或者你确定你在 Hive 中需要一个字符串,而不是日期,数据类型?

标签: oracle scala apache-spark hive


【解决方案1】:

假设您的输入数据应该表示 yy-mm-dd(因此 16-09-15 表示 2016 年第 9 个月第 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 之类的内容),则字符串操作会变得复杂。

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

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

【讨论】:

  • 感谢您的回答,我能知道这是否适用于 spark 吗?我相信这将适用于独家新闻。
  • 什么是 Spark?另外,如果您可以访问它,您可以尝试吗?我不知道那是什么。
猜你喜欢
  • 1970-01-01
  • 2021-01-16
  • 2019-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-01
  • 2020-08-23
  • 1970-01-01
相关资源
最近更新 更多