oracle数据库中Date类型倒入到hive中出现时分秒截断问题解决方案

1.问题描述:

用sqoop将oracle数据表倒入到hive中,oracle中Date型数据会出现时分秒截断问题,只保留了‘yyyy-MM-dd',而不是’yyyy-MM-dd HH24:mi:ss'格式的,后面的‘HH24:mi:ss’被自动截断了,在对时间要求到秒级的分析处理中这种截断会产生问题。

2.解决方案:

在用sqoop倒入数据表是,添加--map-column-hive 和--map-column-java参数,来改变数据表列的默认映射类型(默认情况下sqoop倒入hive中Date类型会被映射成String),将Date列映射成Timestamp类型,在我的问题中我是通过sqoop创建job,进行数据表按时间增量倒入的,PASSTIME列的数据类型是Date,脚本如下:

sqoop job --create jobimport2hiveofv_vehicleinfo -- import --hive-import --map-column-java PASSTIME=java.sql.Timestamp --map-column-hive PASSTIME=TIMESTAMP --incremental append --connect jdbc:oracle:thin:@118.228.196.29:/pmptgdbanalyze --username SAN --password PASS --verbose -m  --bindir /opt/sqoop-1.4./lib --table V_VEHICLEINFO --check-column PASSTIME --last-value '2014-04-20 12:00:00'

注意:

1)红色字体标注的两个参数用来改变列的映射类型,蓝色字体标注的是数据类型,java.sql.Timestamp要带包名写全,否则可能会出错。

2)--map-column-java和--map-column-hive连个参数都要显示给出,如果只给出--map-column-hive那么只会改变hive中表列的数据类型,而codegen生成的Tablename.java源文件中还会是java.sql.Date类型,这样在转换成hive表中的TIMESTAMP类型时,就会出错导致hive中的PASSTIME字段全部为null。原因可能是由于Date类型默认格式‘yyyy-M-dd',而转化到hive Timestamp类型时,严格要求按照’yyyy-mm-dd hh:mm:ss[.f...]'格式转换,参见hive官网timestamp格式说明。

3)如果不设置--map-column-hive参数,只设置--map-column-java 为java.sq..Timestamp,也可以实现数据精确到时分秒,只不过以string类型保存到列hive中。事实上,在我实验后,发现如果指定--mapcolumn-hive参数为timestamp,在java中使用对应的时间where比较条件时,无法查出数据,反而,指定--map-column-hive参数为string,却能够在hive中和java代码中都能够使用时间列参与查询。

3.参考说明:

sqoop user guide: http://sqoop.apache.org/docs/1.4.5/SqoopUserGuide.html#_selecting_the_data_to_import 查看map-column-hive和map-column-java参数说明

hive languageManual: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types#LanguageManualTypes-timestamp 查看hive支持的时间类型说明

hive日期函数
http://athenaxu.blog.163.com/blog/static/2057220392014025332775/
hive数据类型转换
http://www.iteblog.com/archives/892

hive开启行转列功能:
> set hive.cli.print.header=true; // 打印列名
> set hive.cli.print.row.to.vertical=true; // 开启行转列功能, 前提必须开启打印列名功能
> set hive.cli.print.row.to.vertical.num=1; // 设置每行显示的列数
> select * from example_table where pt='2012-03-31' limit 2;

hive查看数据表结构、列类型

> desc TableName;

sqoop 从oracle导数据到hive中,date型数据时分秒截断问题的更多相关文章

  1. 使用pyspark模仿sqoop从oracle导数据到hive的主要功能(自动建表,分区导入,增量,解决数据换行符问题)

    最近公司开始做大数据项目,让我使用sqoop(1.6.4版本)导数据进行数据分析计算,然而当我们将所有的工作流都放到azkaban上时整个流程跑完需要花费13分钟,而其中导数据(增量)就占了4分钟左右 ...

  2. sqoop1.4.4从oracle导数据到hive中

    sqoop从oracle定时增量导入数据到hive 感谢: http://blog.sina.com.cn/s/blog_3fe961ae01019a4l.htmlhttp://f.dataguru. ...

  3. sqoop从mysql导数据到hive报错:Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

    背景 使用sqoop从mysql导数据到hive,从本地服务器是可以访问mysql的(本地服务器是hadoop集群的一个datanode),但是sqoop导数据的时候依然连接不上mysql 报错如下: ...

  4. 使用sqoop1.4.4从oracle导入数据到hive中错误记录及解决方案

    在使用命令导数据过程中,出现如下错误 sqoop import --hive-import --connect jdbc:oracle:thin:@192.168.29.16:1521/testdb ...

  5. mybaits中date类型显示时分秒(orcle数据库)

    <insert id="insert" parameterType="daSysLoginLog"> insert into DA_SYS_LOGI ...

  6. 使用Sqoop从MySQL导入数据到Hive和HBase 及近期感悟

    使用Sqoop从MySQL导入数据到Hive和HBase 及近期感悟 Sqoop 大数据 Hive HBase ETL 使用Sqoop从MySQL导入数据到Hive和HBase 及近期感悟 基础环境 ...

  7. 教程 | 使用Sqoop从MySQL导入数据到Hive和HBase

    基础环境 sqoop:sqoop-1.4.5+cdh5.3.6+78, hive:hive-0.13.1+cdh5.3.6+397, hbase:hbase-0.98.6+cdh5.3.6+115 S ...

  8. hdfs数据到hive中,以及hdfs数据隐身理解

    hdfs数据到hive中: 假设hdfs中已存在好了数据,路径是hdfs:/localhost:9000/user/user_w/hive_g2park/user_center_enterprise_ ...

  9. 使用sqoop从mysql导入数据到hive

      目录 前言 一.使用的导入命令 二.遇到的问题及解决 1. 用文本字段进行分区的问题 2. Hadoop历史服务器Hadoop JobHistory没开启的问题 3. 连接元数据存储数据库报错 4 ...

随机推荐

  1. 关于constraint 的disable和enable

    建立主外键的constraint create table emp1(emp_no number(2) constraint emp_emp_no_pk primary key,ename varch ...

  2. shell产生随机数七种方法

    shell实例浅谈之三产生随机数七种方法   一.问题 Shell下有时需要使用随机数,在此总结产生随机数的方法.计算机产生的的只是“伪随机数”,不会产生绝对的随机数(是一种理想随机数).伪随机数在大 ...

  3. sqlmapapi的跨域访问Access-Control-Allow-Origin:*;ajax

    1.做sqlmapapi的二次开发时,需要通过ajax方式调用sqlmapapi,但是默认情况下,sqlmapapi是不允许跨域访问的 2.尝试增加ajax的header,修改origin的值,来避免 ...

  4. install libiconv libraries

    #下载地址: https://ftp.gnu.org/pub/gnu/libiconv/ #编译安装 ./configure --prefix=/usr/local make make install ...

  5. Oracle Database Link 的创建和使用小见

    假设:需要从数据库db_a通过db_link连接到db_b查询数据库b的部分相关信息 前提条件: 数据库a账户需要有创建dblink的权限,如果没有可以使用dba账户赋权限 grant CREATE ...

  6. Codeforces Round #307 (Div. 2) D. GukiZ and Binary Operations (矩阵高速幂)

    题目地址:http://codeforces.com/contest/551/problem/D 分析下公式能够知道,相当于每一位上放0或者1使得最后成为0或者1.假设最后是0的话,那么全部相邻位一定 ...

  7. Android自己定义button实现长按功能

    Android自己定义button实现长按功能 通过自己定义BUTTON,写一个LongTouchBtn类,在按下的时候运行onTouchEvent事件,通过这个事件使用回调函数来实现长按功能! XM ...

  8. JSON字符串化

    1.JSON字符串化 JSON字符串化有2个可选参数,分别是replacer和space. 第一个可选参数replacer,它可以是数组或者函数.用来指定哪些属性被处理,哪些属性被排除. 第二个可选参 ...

  9. Kubernetes使用prometheus+grafana做一个简单的监控方案

    前言 本文介绍在k8s集群中使用node-exporter.prometheus.grafana对集群进行监控.其实现原理有点类似ELK.EFK组合.node-exporter组件负责收集节点上的me ...

  10. jQuery框架源码解读

    1.jQuery 1.9.1 parseJSON: function( data ) { // Attempt to parse using the native JSON parser first ...