我的csv文件包含如下数据结构:
99999,{k1:v1,k2:v2,k3:v3},9,1.5,http://www.asd.com
此结构的创建表查询是什么?
在将csv文件加载到表之前,我不必对其进行任何处理。
答案 0 :(得分:0)
您需要使用Opencsv serde来向/从hive表读取/写入csv数据。在此处下载:https://drone.io/github.com/ogrodnek/csv-serde/files/target/csv-serde-1.1.2-0.11.0-all.jar
将serde添加到Hive的库路径。 - 可以跳过,但是会将其上传到您的hive服务器正在运行的hdfs群集。我们稍后会用它来查询。
创建表格
CREATE TABLE my_table(a int, b string, c int, d double, url string)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
"separatorChar" = ",",
"quoteChar" = "'",
"escapeChar" = "\\"
)
STORED AS TEXTFILE;
请注意,如果您使用openCSV serde,无论您提供什么类型,它都将被hive视为String。但不用担心,因为Hive是松散的类型语言。它会在运行时将字符串转换为int,json等。
<强>查询强>
要在配置单元提示符处查询,请先添加库(如果未添加到配置单元的库路径
)add jar hdfs:///user/hive/aux_jars/opencsv.jar;
现在您可以查询:
select a, get_json_object(b, '$.k1') from my_table where get_json_object(b, '$.k2') > val;
以上是从Hive表访问JSON字段的示例。
参考文献:
PS:Json Tuple是访问json元素的更快方法,但我发现get_json_object的语法更具吸引力。