首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hadoop中的日期处理

Hadoop中的日期处理
EN

Stack Overflow用户
提问于 2017-04-23 16:03:50
回答 1查看 1.4K关注 0票数 0

我是大数据/Hadoop生态系统的新手,我注意到日期并不总是以标准的方式跨技术处理。我计划使用带有Avro和Parquet文件格式的Sqoop将来自Oracle的数据摄取到HDFS上的Hive表中。Hive继续将我的日期导入到BIGINT值中,我更喜欢时间戳。我试过用“--地图列-蜂巢”覆盖.但还是不起作用。

寻找关于处理此用例日期的最佳方法的建议。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-24 05:45:54

拼花文件格式

如果使用Sqoop将RDBMS数据转换为Parquet,请小心解释日期、日期时间或时间戳列中的任何结果值。基础值表示为Parquet INT64类型,该类型在Impala表中表示为BIGINT。Parquet值表示时间(毫秒),Impala将BIGINT解释为以秒为单位的时间。因此,如果从Sqoop以这种方式导入的Parquet表中有BIGINT列,则在解释为时间戳类型时,将值除以1000。

Avro文件格式

当前,Avro表不能包含时间戳列。如果需要将日期和时间值存储在Avro表中,则可以使用值的字符串表示形式,使用UNIX_TIMESTAMP()函数将值转换为BIGINT,或者使用EXTRACT()函数为单个日期和时间字段创建单独的数字列。

您还可以像这样使用Hive查询来获得所需时间戳格式的结果。

代码语言:javascript
复制
FROM_UNIXTIME(CAST(SUBSTR(timestamp_column, 1,10) AS INT)) AS timestamp_column;

其他解决方法是使用sqoop命令中的--query导入数据,在该命令中,可以将列转换为时间戳格式。

示例

代码语言:javascript
复制
--query 'SELECT CAST (INSERTION_DATE AS TIMESTAMP) FROM tablename WHERE $CONDITIONS'

如果SELECT查询有点长,可以使用配置文件来缩短命令行调用的长度。这是参考文献

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43573421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档