hive中如何把13位转化为时间_sqoop1 导入 hive parquet 表中 时间戳调整为日期

问题

sqoop1从oracle数据库中向hive拉取parquet表后,原本oracle中 "yyyy-mm-dd hh24:mi:ss.ff" 格式的时间,在hive parquet表中成了13位的“时间戳”,其中后三位是常规10位秒级时间戳后的毫秒

示例

oracle的字段:

910115f5cd80?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

sqoop导入hive:

sqoop import \

--connect \

--username \

--password \

--query "SELECT * FROM XXX WHERE \$CONDITIONS" \

--hive-import \

--hive-table test \

--split-by ID \

--target-dir /user/hive/warehouse/ \

--as-parquetfile

查看时间字段:

[slave01:21000] default> select COMPLETE_TIME from test limit 1;

Query: select COMPLETE_TIME from test limit 1

Query submitted at: 2019-02-28 15:58:53 (Coordinator: https://slave01:25000)

Query progress can be monitored at: https://slave01:25000/query_plan?query_id=f84d7876d3434df6:2da14b0000000000

+---------------+

| complete_time |

+---------------+

| 1525252558701 |

+---------------+

Fetched 1 row(s) in 4.08s

解决方法

添加参数 --map-column-java 和 --map-column-hive 来改变数据表列的默认映射类型

再次导入hive

sqoop import \

--connect \

--username \

--password \

--query "SELECT * FROM XXX WHERE \$CONDITIONS" \

--hive-import \

--hive-table test2 \

--map-column-java COMPLETE_TIME=String \

--map-column-hive COMPLETE_TIME=String \

--split-by ID \

--target-dir /user/hive/warehouse/ \

--as-parquetfile

查看时间字段:

[slave01:21000] default> select COMPLETE_TIME from test2 limit 1;

Query: select COMPLETE_TIME from test2 limit 1

Query submitted at: 2019-02-28 16:11:35 (Coordinator: https://slave01:25000)

Query progress can be monitored at: https://slave01:25000/query_plan?query_id=9d4a92bcfe931f6e:7bd9706900000000

+-------------------------+

| complete_time |

+-------------------------+

| 2017-08-25 10:30:00.266 |

+-------------------------+

Fetched 1 row(s) in 3.39s

可以看到,时间存为了 "yyyy-mm-dd hh24:mi:ss.ff"格式

注:虽然这里时间字段是String,但使用impala时可自动识别字符串中的时间,以时间函数的形式进行读取、计算等操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值