hive 十六进制转十进制_Hive使用十六进制分隔符异常分析
温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。
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使用十六进制分隔符异常分析相关推荐
- hive 十六进制转十进制_0026-Hive使用十六进制分隔符异常分析
温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看. 1.问题描述 通过sqoop抽取Mysql表数据到hive表,发现hive表所有列显示为null Hive表的分隔符为"u00 ...
- hive 十六进制转十进制_hive 常用运算
第一部分:关系运算 Hive支持的关系运算符 •常见的关系运算符 •等值比较: = •不等值比较: <> •小于比较: < •小于等于比较: <= •大于比较: > •大 ...
- hive 十六进制转十进制_Hive内置函数详解【转】
1.内置运算符 1.1关系运算符运算符类型说明 A = B所有原始类型如果A与B相等,返回TRUE,否则返回FALSE A == B无失败,因为无效的语法. SQL使用"=",不使 ...
- 在LabVIEW中将十六进制转换为十进制或ASCII
更新 Nov 12, 2020 环境 软件 LabVIEW 在LabVIEW中,如何将十六进制值转换为十进制值?当前,我正在尝试使用"扫描值功能",但不确定需要连接什么. 我正在与 ...
- IEEE-754标准(32位) 十六进制转换十进制浮点数
因实验需要,读取陀螺仪的数据是16进制的数据,需要将该数据转化为10进制方便自己查看,理解.记录如下: 1.将(32位)16进制IEEE-754标准浮点数就是用十六进制表示浮点,称为单精度浮点数. f ...
- c语言的十进制转十六进制字符串,用c语言写一个函数把十进制转换成十六进制,该如何处理...
用c语言写一个函数把十进制转换成十六进制 用c语言写一个函数把十进制转换成十六进制 网上找到一些,感觉有占乱 分享到: ------解决方案-------------------- #include ...
- python【蓝桥杯vip练习题库】BASIC-11 十六进制转十进制
试题 基础练习 十六进制转十进制 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出. 注:十六进制数中的1 ...
- java中各进制之间的转换(十进制转十六进制、十进制转二进制、二进制转十进制、二进制转十六进制)...
在java编辑中有没有遇到经常需要进行java中各进制之间的转换(十进制转十六进制.十进制转二进制.二进制转十进制.二进制转十六进制)的事情呢?下面我们就来分析一下各自是怎么转换的: [java] / ...
- 十六进制转换为十进制的效率问题
十六进制转换为十进制这样说有点笼统,因为一般来说十六进制是字符串,十进制也可能是字符串或是整数.下面我们来看看. 1.十六进制字符串转换为十进制的字符串 #include<stdio.h> ...
最新文章
- 你的代码会被GitHub埋在北极,保存1000年,用二维码胶片备份人类文明
- php中的类 对象的方法的区别,php中类和对象的区别是什么
- 用java正则表达式验证字符串(邮箱与网址)
- SmartPDA图片
- 浅谈Opencl四大模型之Programming Model
- 阿里专家:怎么样消除程序员的中年危机?
- 我的编程之路点滴记录(二)
- 直角三角形(rigtri)
- react 实现导出PDF功能
- POJ2385 Apple Catching 题解
- 分享45个android实例源码,很好很强大
- html5跟随手指的小球,Android自定义圆形View实现小球跟随手指移动效果(详细介绍)...
- 双机(51单片机)串行通信最基本的方法
- insmod等模块命令
- LeetCode算法日记:340.至多包含K个不同字符的最长子串
- base64上传为表单提交给后台的方法
- linux下如何部署本jar包并且在后台运行
- CSS给元素添加边框(样式、颜色、宽度)
- js、jquery、ajax、axios区别
- Caesers Cipher (凯撒密码)