Hive创建表时使用Unicode字符作为字段分隔符(hive unicode character as delimiter)
来源:互联网 发布:笔记本电脑测评软件 编辑:程序博客网 时间:2024/04/30 03:37
最近需要使用分布式数据库Hive管理日志数据,原始日志数据使用欧元符号€作为字段分隔符,如下图所示,创建hive表的时候就想指定€作为分隔符,这样就可以不用改变原始日志数据而直接导入hive中。
我就写了如下hive QL创建表,
CREATE TABLE subscription (RowNum BIGINT, UserNum BIGINT, Province STRING, City STRING, PayTime TIMESTAMP, PayType SMALLINT, PayID STRING, PayAmount DOUBLE, ContentPayType SMALLINT, PayContentID STRING, PayMethodType SMALLINT, ClientVersion STRING) clustered by(PayTime) into 32 buckets row format delimited fields terminated by '€' stored as textfile;成功执行完下面sql语句后,高兴的以为成功导入了,
Load data local inpath'/media/172.16.46.6/changbiao/server/a_10000_*_VGOP1-R2.10-21201_*_*.dat.gz'into table subscription;
但用select选择几条数据查看的时候,发现没有导入成功,hive不能识别以€作为分隔符,后面各种就是各种分隔符写法(包括'\0x80', '0xFFFD', '\u20AC',....)的尝试,搞了一天,都不行。在百度搜索里实在找不到想要的解决方案,就用Google搜了,后来找到一个如下的英文网页(https://issues.apache.org/jira/browse/HIVE-237)说Hive有个bug:不支持ASCII大于128的字符作为字段分隔符。太坑爹了。但是,上图红色框中的一句话启发了我:在java中,可以使用负数来表示大于128的分隔符。然后我就找到€的unicode码是0x80,它对应的二进制是10000000,这个二进制如果是表示负数的话对应-128,我就用‘\-128’作为分隔符,执行下面的sql后,再次导入数据居然成功了,嘿嘿。
CREATE TABLE subscription (RowNum BIGINT, UserNum BIGINT, Province STRING, City STRING, PayTime TIMESTAMP, PayType SMALLINT, PayID STRING, PayAmount DOUBLE, ContentPayType SMALLINT, PayContentID STRING, PayMethodType SMALLINT, ClientVersion STRING) clustered by(PayTime) into 32 buckets row format delimited fields terminated by '\-128' stored as textfile;
0 0
- Hive创建表时使用Unicode字符作为字段分隔符(hive unicode character as delimiter)
- hive指定多个字符作为列分隔符
- Hive 默认字段分隔符
- hive创建table时指定分隔符
- hive 中控制符作为分隔符的使用总结
- Hive表如何使用多字符分隔
- Treating Unicode character as whitespace
- hive创建表时ascii编码与unicode编码的对应
- hive指定多个字符作为列分隔符的问题说明
- hive 创建表——指定分隔符
- 有关hive 中默认的用控制符作为分隔符的使用总结
- Xcode 【Treating Unicode character as whitespace 警告】
- hive 分隔符 ^A
- Greenplum或DeepGreen中使用外部表访问Hive数据(分隔符是Hive表默认列分隔符)
- [Hive]Hive指定查询输出分隔符
- mysql DELIMITER(分隔符)的使用
- hive 导出数据分隔符
- hive-TextInputformat自定义分隔符
- gdb的使用
- C语言练习2
- wamp配置
- Android 多页面左右滑动
- 并发 生产者/消费者 读者/写者 哲学家进餐的理解
- Hive创建表时使用Unicode字符作为字段分隔符(hive unicode character as delimiter)
- 动态规划 UVA - 562 Dividing coins
- POJ-1364 King
- mmap_min_addr
- Linux下网卡phy状态检测与控制
- adc 采样 校准
- 不错的安全书籍
- Camel路由构建过程
- Android EditText中添图片(Spanned)后的定位问题