带结构的Hive数组

时间:2014-10-30 01:53:07

标签: hadoop hive hiveql

您能否告诉我如何为以下dml创建数据。

create external table doc_sample(id int,topic array<struct<course:string,score:array<struct<sem:string,marks:int>>>>)
ROW FORMAT delimited
FIELDS TERMINATED BY '|'
COLLECTION ITEMS TERMINATED BY ','
map keys terminated by ':'
STORED AS TEXTFILE
location '/user/cloudera/data/isaac';

1|'english2':'sem1':80

hive>  select * from doc_sample;

1       [{"course":"'english2'","score":[{"sem":"'sem1'","marks":null}]}]

所用时间:0.095秒,提取:1行

1 个答案:

答案 0 :(得分:0)

抱歉,您的问题尚未完全清楚。 1.您是否需要知道您发布的DDL的输入文件的格式? 2.您是否需要知道如何创建表以实现SELECT查询中显示的输出?

我假设#2为我的以下回复。希望能帮助到你。 使用嵌套的复杂配置单元数据类型编辑文件非常麻烦。请参阅“收集数据类型”的配置单指南部分,它解释了默认分隔符^ A,^ B等,并进一步说明了下一行^ D等是如何用于嵌套数据类型的。无论如何,使用Ctrl字符手动编辑文件很困难。 更好的方法是使用JSON格式输入文件并使用jsonserde作为hive表。以下是我创建样本的方法,

create table doc_sample_json (id int, topic array<struct<course:string,score:array<struct<sem:string,marks:bigint>>>> ) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'

  

json.txt输入数据

     

{ “ID”:1, “主题”:[{ “课程”: “english1”, “得分”:[{ “SEM”: “SEM1”, “标记”:5}]},{“当然“:” english1" , “得分”:[{ “SEM”: “SEM1”, “标记”:10},{ “SEM”: “sem2”, “标记”:15}]}]}

     

LOAD数据本地inpath'/user/docs/json.txt'覆盖到表doc_sample_json;

hive> select * from doc_sample_json; OK 1 [{"course":"english1","score":[{"sem":"sem1","marks":5}]},{"course":"english1","score":[{"sem":"sem1","marks":10},{"sem":"sem2","marks":15}]}]