您能否告诉我如何为以下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行
答案 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}]}]