Apache配置单元为给定结构创建表

时间:2015-07-22 11:58:10

标签: hive

我的csv文件包含如下数据结构:

99999,{k1:v1,k2:v2,k3:v3},9,1.5,http://www.asd.com

此结构的创建表查询是什么?

在将csv文件加载到表之前,我不必对其进行任何处理。

1 个答案:

答案 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字段的示例。

参考文献:

  1. http://documentation.altiscale.com/using-csv-serde-with-hive
  2. http://thornydev.blogspot.in/2013/07/querying-json-records-via-hive.html
  3. PS:Json Tuple是访问json元素的更快方法,但我发现get_json_object的语法更具吸引力。