Hive创建外部表CSV数据中列含有逗号问题处理

Posted Hadoop实操

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hive创建外部表CSV数据中列含有逗号问题处理相关的知识,希望对你有一定的参考价值。

温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。


Fayson的github:

​https://github.com/fayson/cdhproject​


提示:代码块部分可以左右滑动查看噢


1.问题描述



示例数据:


0098.HK,104,2018-10-21T22:20:00.105Z," ""BID3_SIZE"" : null, ""ASK10_SIZE"" : null, ""ASK10"" : null, ""ASK5_SIZE"" : null, ""BID9_SIZE"" : null, ""ASK8_SIZE"" : null, ""ASK_SIZE"" : null, ""BID6_SIZE"" : null, ""ASK2_SIZE"" : null, ""RT_MKT_STATUS"" : null, ""SEQUENCE_NUMBER"" : 104.0, ""BID4_SIZE"" : null, ""BID7_SIZE"" : null, ""ASK9_SIZE"" : null, ""ASK3_SIZE"" : null, ""ASK9"" : null, ""ASK6_SIZE"" : null, ""ASK7"" : null, ""ASK8"" : null, ""ASK5"" : null, ""ASK6"" : null, ""BID9"" : null, ""ASK3"" : null, ""BID8"" :null, ""ASK4"" : null, ""BID7"" : null, ""BID6"" : null, ""ASK2"" : null, ""BID5"" : null, ""BID4"" : null, ""BID3"" : null, ""BID2"" : null, ""LEVEL2"" : 1.0, ""BID1_SIZE"" : null, ""ASK7_SIZE"" : null, ""BID8_SIZE"" : null, ""ASK4_SIZE"" : null, ""BID10"" : null, ""BID10_SIZE"" : null, ""BID_SIZE"" : null, ""ASK1_SIZE"" : null, ""BID5_SIZE"" : null, ""BID2_SIZE"" : null "

(可左右滑动)


建表语句:


CREATE EXTERNAL TABLE csvtable2(
symbol string,
tickSequence string,
timeStamp string,
tickdata STRUCT< BID3_SIZE: string, ASK10_SIZE: string>
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ,
STORED AS TEXTFILE
LOCATION /mdtick/hk/csv;

(可左右滑动)


查询结果显示:

Hive创建外部表CSV数据中列含有逗号问题处理_hadoop


如上截图所示,tickdata的json数据并未完整显示,只显示了部分数据。


2.问题解决



在不能修改示例数据的结构情况下,这里需要使用Hive提供的Serde,在Hive1.1版本中提供了多种Serde,此处的数据通过属于CSV格式,所以这里使用默认的org.apache.hadoop.hive.serde2.OpenCSVSerde类进行处理。经过修改后的建表语句如下:


CREATE EXTERNAL TABLE csvtable2(
symbol string,
tickSequence string,
timeStamp string,
tickdata string
)
ROW FORMAT SERDE org.apache.hadoop.hive.serde2.OpenCSVSerde
WITH SERDEPROPERTIES (
"separatorChar" = ",",
"quoteChar" = "\\"",
"escapeChar" = "\\\\"
)
STORED AS TEXTFILE
LOCATION /mdtick/hk/csv;

(可左右滑动)


将tickdata字段修改为String类型


3.问题验证



1.重新创建Hive的表进行测试

Hive创建外部表CSV数据中列含有逗号问题处理_数据_02


2.使用get_json_object和json_tuple方法来解析字段的json数据

Hive创建外部表CSV数据中列含有逗号问题处理_hive_03

Hive创建外部表CSV数据中列含有逗号问题处理_数据_04



提示:代码块部分可以左右滑动查看噢


为天地立心,为生民立命,为往圣继绝学,为万世开太平。

温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。



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

Hive创建外部表CSV数据中列含有逗号问题处理_hive_05

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


以上是关于Hive创建外部表CSV数据中列含有逗号问题处理的主要内容,如果未能解决你的问题,请参考以下文章

导出hive数据,用逗号分割

如何在 csv 文件中忽略带引号的换行符以创建 Hive 外部表?

如何在使用 EMR/Hive 将数据从 S3 导入 DynamoDB 时处理包含在引号 (CSV) 中的字段

如何在greenplum的报价字段中使用逗号从csv文件创建外部表?

从 CSV 文件(逗号分隔)创建 postgres 外部表,该文件有一个电子邮件列,其中多个电子邮件地址用逗号分隔

如何跳过 Hive 外部表中的 CSV 标头?