温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。

1.问题描述

通过sqoop抽取Mysql表数据到hive表,发现hive表所有列显示为null

Hive表的分隔符为“\u001B”,sqoop指定的分隔符也是“\u001B”

通过命令show create table test_hive_delimiter查看建表语句如下:

0:jdbc:hive2://localhost:10000/> showcreate table test_hive_delimiter;...

INFO: OK+----------------------------------------------------+--+|createtab_stmt|+----------------------------------------------------+--+|CREATEEXTERNAL TABLE`test_hive_delimiter`(       |

|`id`int,                                        |

|`name`string,                                   |

|`address`string)                                |

|ROWFORMAT SERDE                                   |

|'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'|

|WITHSERDEPROPERTIES (                             |

|'field.delim'='\u0015',|

|'serialization.format'='\u0015')                 |

|STOREDAS INPUTFORMAT                              |

|'org.apache.hadoop.mapred.TextInputFormat'|

|OUTPUTFORMAT|

|'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'|

|LOCATION|

|'hdfs://ip-172-31-6-148.fayson.com:8020/fayson/test_hive_delimiter'|

|TBLPROPERTIES(                                    |

|'COLUMN_STATS_ACCURATE'='false',|

|'numFiles'='0',|

|'numRows'='-1',|

|'rawDataSize'='-1',|

|'totalSize'='0',|

|'transient_lastDdlTime'='1504705887')            |+----------------------------------------------------+--+

22rows selected (0.084seconds)

0: jdbc:hive2://localhost:10000/>

发现Hive的原始建表语句中的分隔符是“\u001B”而通过show create table test_hive_delimiter命令查询出来的分隔符为“\u0015”,分隔符被修改了。

2.问题复现

1.创建Hive表test_hive_delimiter,使用“\u001B”分隔符

createexternal table test_hive_delimiter(

id int,

name string,

address string

)

rowformat delimited fields terminated by'\u001B'storedas textfile location'/fayson/test_hive_delimiter';

2.使用sqoop抽取MySQL中test表数据到hive表(test_hive_delimiter)

[root@ip-172-31-6-148~]# sqoop import --connect jdbc:mysql://ip-172-31-6-148.fayson.com:3306/fayson -username root -password123456--table test -m1--hive-import --fields-terminated-by"\0x001B"--target-dir /fayson/test_hive_delimiter --hive-table test_hive_delimiter

数据抽取成功:

[root@ip-172-31-6-148~]# hadoop fs -ls /fayson/test_hive_delimiterFound2items-rw-r--r--3fayson supergroup02017-09-06 13:46 /fayson/test_hive_delimiter/_SUCCESS-rwxr-xr-x3fayson supergroup562017-09-06 13:46 /fayson/test_hive_delimiter/part-m-00000[root@ip-172-31-6-148~]# hadoop fs -ls /fayson/test_hive_delimiter/part-m-00000-rwxr-xr-x3fayson supergroup562017-09-06 13:46 /fayson/test_hive_delimiter/part-m-00000[root@ip-172-31-6-148~]#

3.查看test_hive_delimiter表数据

[root@ip-172-31-6-148~]# beelineBeelineversion 1.1.0-cdh5.12.1 by Apache Hivebeeline> !connectjdbc:hive2://localhost:10000/;principal=hive/ip-172-31-6-148.fayson.com@FAYSON.COM...

Transactionisolation: TRANSACTION_REPEATABLE_READ

0: jdbc:hive2://localhost:10000/>select* from test_hive_delimiter;...

INFO: OK+-------------------------+---------------------------+------------------------------+--+|test_hive_delimiter.id|test_hive_delimiter.name|test_hive_delimiter.address|+-------------------------+---------------------------+------------------------------+--+|NULL|NULL|NULL|

|NULL|NULL|NULL|

|NULL|NULL|NULL|+-------------------------+---------------------------+------------------------------+--+

3rows selected (0.287seconds)

0: jdbc:hive2://localhost:10000/>

4.Hive表的建表语句如下

3.解决方法

分隔符“\u001B”为十六进制,而Hive的分隔符实际是八进制,所以在使用十六进制的分隔符时会被Hive转义,所以出现使用“\u001B”分隔符创建hive表后显示的分隔符为“\u0015”。

在不改变数据文件分隔符的情况下,要先将十六进制分隔符转换成八进制分隔符来创建Hive表。

1.将十六进制分隔符转换为八进制分隔符

“\u001B”转换八进制为“\033”,在线转换工具:http://tool.lu/hexconvert/

2.修改建表语句使用八进制“\033”作为分隔符

createexternal table test_hive_delimiter(

id int,

name string,

address string

)

rowformat delimited fields terminated by'\033'storedas textfile location'/fayson/test_hive_delimiter';

使用命令show create table test_hive_delimiter查看建表语句

0:jdbc:hive2://localhost:10000/> showcreate table test_hive_delimiter;...

INFO: OK+----------------------------------------------------+--+|createtab_stmt|+----------------------------------------------------+--+|CREATEEXTERNAL TABLE`test_hive_delimiter`(       |

|`id`int,                                        |

|`name`string,                                   |

|`address`string)                                |

|ROWFORMAT SERDE                                   |

|'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'|

|WITHSERDEPROPERTIES (                             |

|'field.delim'='\u001B',|

|'serialization.format'='\u001B')                 |

|STOREDAS INPUTFORMAT                              |

|'org.apache.hadoop.mapred.TextInputFormat'|

|OUTPUTFORMAT|

|'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'|

|LOCATION|

|'hdfs://ip-172-31-6-148.fayson.com:8020/fayson/test_hive_delimiter'|

|TBLPROPERTIES(                                    |

|'COLUMN_STATS_ACCURATE'='false',|

|'numFiles'='0',|

|'numRows'='-1',|

|'rawDataSize'='-1',|

|'totalSize'='0',|

|'transient_lastDdlTime'='1504707693')            |+----------------------------------------------------+--+

22rows selected (0.079seconds)

0: jdbc:hive2://localhost:10000/>

3.查询test_hive_delimiter表数据

0: jdbc:hive2://localhost:10000/>select* from test_hive_delimiter;...

INFO: OK+-------------------------+---------------------------+------------------------------+--+|test_hive_delimiter.id|test_hive_delimiter.name|test_hive_delimiter.address|+-------------------------+---------------------------+------------------------------+--+|1|fayson|guangdong|

|2|zhangsan|shenzheng|

|3|lisi|shanghai|+-------------------------+---------------------------+------------------------------+--+

3rows selected (0.107seconds)

0: jdbc:hive2://localhost:10000/>

将十六进制的”\u001B”转换为八进制的”\033”建表,问题解决。

4.备注

Hive建表时使用十六进制分割符需要注意,部分分隔符会被转义(如:001B/001C等)

Sqoop指定十六进制分隔符,为什么是“\0x001B”而不是“\u001B”,可参考Sqoop

官网说明:https://sqoop.apache.org/docs/1.4.6/SqoopUserGuide.html#_file_formats

醉酒鞭名马,少年多浮夸! 岭南浣溪沙,呕吐酒肆下!挚友不肯放,数据玩的花!

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。

推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。

原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操

hive 十六进制转十进制_Hive使用十六进制分隔符异常分析相关推荐

  1. hive 十六进制转十进制_0026-Hive使用十六进制分隔符异常分析

    温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看. 1.问题描述 通过sqoop抽取Mysql表数据到hive表,发现hive表所有列显示为null Hive表的分隔符为"u00 ...

  2. hive 十六进制转十进制_hive 常用运算

    第一部分:关系运算 Hive支持的关系运算符 •常见的关系运算符 •等值比较: = •不等值比较: <> •小于比较: < •小于等于比较: <= •大于比较: > •大 ...

  3. hive 十六进制转十进制_Hive内置函数详解【转】

    1.内置运算符 1.1关系运算符运算符类型说明 A = B所有原始类型如果A与B相等,返回TRUE,否则返回FALSE A == B无失败,因为无效的语法. SQL使用"=",不使 ...

  4. 在LabVIEW中将十六进制转换为十进制或ASCII

    更新 Nov 12, 2020 环境 软件 LabVIEW 在LabVIEW中,如何将十六进制值转换为十进制值?当前,我正在尝试使用"扫描值功能",但不确定需要连接什么. 我正在与 ...

  5. IEEE-754标准(32位) 十六进制转换十进制浮点数

    因实验需要,读取陀螺仪的数据是16进制的数据,需要将该数据转化为10进制方便自己查看,理解.记录如下: 1.将(32位)16进制IEEE-754标准浮点数就是用十六进制表示浮点,称为单精度浮点数. f ...

  6. c语言的十进制转十六进制字符串,用c语言写一个函数把十进制转换成十六进制,该如何处理...

    用c语言写一个函数把十进制转换成十六进制 用c语言写一个函数把十进制转换成十六进制 网上找到一些,感觉有占乱 分享到: ------解决方案-------------------- #include ...

  7. python【蓝桥杯vip练习题库】BASIC-11 十六进制转十进制

    试题 基础练习 十六进制转十进制 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出. 注:十六进制数中的1 ...

  8. java中各进制之间的转换(十进制转十六进制、十进制转二进制、二进制转十进制、二进制转十六进制)...

    在java编辑中有没有遇到经常需要进行java中各进制之间的转换(十进制转十六进制.十进制转二进制.二进制转十进制.二进制转十六进制)的事情呢?下面我们就来分析一下各自是怎么转换的: [java] / ...

  9. 十六进制转换为十进制的效率问题

    十六进制转换为十进制这样说有点笼统,因为一般来说十六进制是字符串,十进制也可能是字符串或是整数.下面我们来看看. 1.十六进制字符串转换为十进制的字符串 #include<stdio.h> ...

最新文章

  1. 你的代码会被GitHub埋在北极,保存1000年,用二维码胶片备份人类文明
  2. php中的类 对象的方法的区别,php中类和对象的区别是什么
  3. 用java正则表达式验证字符串(邮箱与网址)
  4. SmartPDA图片
  5. 浅谈Opencl四大模型之Programming Model
  6. 阿里专家:怎么样消除程序员的中年危机?
  7. 我的编程之路点滴记录(二)
  8. 直角三角形(rigtri)
  9. react 实现导出PDF功能
  10. POJ2385 Apple Catching 题解
  11. 分享45个android实例源码,很好很强大
  12. html5跟随手指的小球,Android自定义圆形View实现小球跟随手指移动效果(详细介绍)...
  13. 双机(51单片机)串行通信最基本的方法
  14. insmod等模块命令
  15. LeetCode算法日记:340.至多包含K个不同字符的最长子串
  16. base64上传为表单提交给后台的方法
  17. linux下如何部署本jar包并且在后台运行
  18. CSS给元素添加边框(样式、颜色、宽度)
  19. js、jquery、ajax、axios区别
  20. Caesers Cipher (凯撒密码)

热门文章

  1. 移动硬盘格式化后数据怎么恢复
  2. “数字乡民”疑云:助农?坑农?
  3. 制作用户标签是你要做的第一步
  4. JavaScript 使用Canvas绘图
  5. 广告变现数据分析,提高媒体广告变现效果的关键指标!
  6. Android:简单打电话 APP
  7. Android自学之SharedPreferences存储实现记录密码功能
  8. 数据结构(严蔚敏老师c语言第2版)
  9. Outlook 2007 设置代理收发邮件(CcProxy)
  10. 详解Linux双网卡绑定之bond0