Hive Apache配置单元-复杂数据类型映射<;字符串,结构>;不起作用

Hive Apache配置单元-复杂数据类型映射<;字符串,结构>;不起作用,hive,Hive,配置单元版本2.1.1 问题描述:集合项终止值作为映射键插入 蜂巢表: CREATE TABLE profiles( id int, name struct<first_name: string, middle_name: string, last_name: string>, phone struct<home: string, office: string>, address map<string,struct<streat:string, appartm

配置单元版本2.1.1

问题描述:集合项终止值作为映射键插入

蜂巢表:

CREATE TABLE profiles(
id int,
name struct<first_name: string, middle_name: string, last_name: string>,
phone struct<home: string, office: string>,
address map<string,struct<streat:string, appartment:int, zip:string>>
) 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY '-'
MAP KEYS TERMINATED BY '='
LINES TERMINATED BY '\n'
STORED AS TEXTFILE;
1000,Suresh--S,1234567890-1234567890,home=Venkatapuram1-2020-500001
1001,Mahesh-X-M,1234567890-1234567890,home=Venkatapuram2-2021-500001
load data inpath '/handson/profiles_data.txt' overwrite into table profiles;
SELECT * FROM profiles; 

1000        
{"first_name":"Suresh","middle_name":"","last_name":"S"}        
{"home":"1234567890","office":"1234567890"}     
{"home": 
{"streat":"Venkatapuram1",**"appartment":null,"zip":null},"2020":null, 
"500001": null}

1001        
{"first_name":"Mahesh","middle_name":"X","last_name":"M"}        
{"home":"1234567890","office":"1234567890"}
{"home": 
{"streat":"Venkatapuram2",**"appartment":null,"zip":null},"2021":null, 
"500001": null}
1000        
{"first_name":"Suresh","middle_name":"","last_name":"S"}        
{"home":"1234567890","office":"1234567890"}
{"home":{"streat":"Venkatapuram1",**"appartment":2020,"zip":"500001"}**}

1001        
{"first_name":"Mahesh","middle_name":"X","last_name":"M"}        
{"home":"1234567890","office":"1234567890"} 
{"home": {"streat":"Venkatapuram2",**"appartment":2021,"zip":"500001"**}}
数据加载:

CREATE TABLE profiles(
id int,
name struct<first_name: string, middle_name: string, last_name: string>,
phone struct<home: string, office: string>,
address map<string,struct<streat:string, appartment:int, zip:string>>
) 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY '-'
MAP KEYS TERMINATED BY '='
LINES TERMINATED BY '\n'
STORED AS TEXTFILE;
1000,Suresh--S,1234567890-1234567890,home=Venkatapuram1-2020-500001
1001,Mahesh-X-M,1234567890-1234567890,home=Venkatapuram2-2021-500001
load data inpath '/handson/profiles_data.txt' overwrite into table profiles;
SELECT * FROM profiles; 

1000        
{"first_name":"Suresh","middle_name":"","last_name":"S"}        
{"home":"1234567890","office":"1234567890"}     
{"home": 
{"streat":"Venkatapuram1",**"appartment":null,"zip":null},"2020":null, 
"500001": null}

1001        
{"first_name":"Mahesh","middle_name":"X","last_name":"M"}        
{"home":"1234567890","office":"1234567890"}
{"home": 
{"streat":"Venkatapuram2",**"appartment":null,"zip":null},"2021":null, 
"500001": null}
1000        
{"first_name":"Suresh","middle_name":"","last_name":"S"}        
{"home":"1234567890","office":"1234567890"}
{"home":{"streat":"Venkatapuram1",**"appartment":2020,"zip":"500001"}**}

1001        
{"first_name":"Mahesh","middle_name":"X","last_name":"M"}        
{"home":"1234567890","office":"1234567890"} 
{"home": {"streat":"Venkatapuram2",**"appartment":2021,"zip":"500001"**}}
select语句中的实际数据:

CREATE TABLE profiles(
id int,
name struct<first_name: string, middle_name: string, last_name: string>,
phone struct<home: string, office: string>,
address map<string,struct<streat:string, appartment:int, zip:string>>
) 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY '-'
MAP KEYS TERMINATED BY '='
LINES TERMINATED BY '\n'
STORED AS TEXTFILE;
1000,Suresh--S,1234567890-1234567890,home=Venkatapuram1-2020-500001
1001,Mahesh-X-M,1234567890-1234567890,home=Venkatapuram2-2021-500001
load data inpath '/handson/profiles_data.txt' overwrite into table profiles;
SELECT * FROM profiles; 

1000        
{"first_name":"Suresh","middle_name":"","last_name":"S"}        
{"home":"1234567890","office":"1234567890"}     
{"home": 
{"streat":"Venkatapuram1",**"appartment":null,"zip":null},"2020":null, 
"500001": null}

1001        
{"first_name":"Mahesh","middle_name":"X","last_name":"M"}        
{"home":"1234567890","office":"1234567890"}
{"home": 
{"streat":"Venkatapuram2",**"appartment":null,"zip":null},"2021":null, 
"500001": null}
1000        
{"first_name":"Suresh","middle_name":"","last_name":"S"}        
{"home":"1234567890","office":"1234567890"}
{"home":{"streat":"Venkatapuram1",**"appartment":2020,"zip":"500001"}**}

1001        
{"first_name":"Mahesh","middle_name":"X","last_name":"M"}        
{"home":"1234567890","office":"1234567890"} 
{"home": {"streat":"Venkatapuram2",**"appartment":2021,"zip":"500001"**}}
期望值:

CREATE TABLE profiles(
id int,
name struct<first_name: string, middle_name: string, last_name: string>,
phone struct<home: string, office: string>,
address map<string,struct<streat:string, appartment:int, zip:string>>
) 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY '-'
MAP KEYS TERMINATED BY '='
LINES TERMINATED BY '\n'
STORED AS TEXTFILE;
1000,Suresh--S,1234567890-1234567890,home=Venkatapuram1-2020-500001
1001,Mahesh-X-M,1234567890-1234567890,home=Venkatapuram2-2021-500001
load data inpath '/handson/profiles_data.txt' overwrite into table profiles;
SELECT * FROM profiles; 

1000        
{"first_name":"Suresh","middle_name":"","last_name":"S"}        
{"home":"1234567890","office":"1234567890"}     
{"home": 
{"streat":"Venkatapuram1",**"appartment":null,"zip":null},"2020":null, 
"500001": null}

1001        
{"first_name":"Mahesh","middle_name":"X","last_name":"M"}        
{"home":"1234567890","office":"1234567890"}
{"home": 
{"streat":"Venkatapuram2",**"appartment":null,"zip":null},"2021":null, 
"500001": null}
1000        
{"first_name":"Suresh","middle_name":"","last_name":"S"}        
{"home":"1234567890","office":"1234567890"}
{"home":{"streat":"Venkatapuram1",**"appartment":2020,"zip":"500001"}**}

1001        
{"first_name":"Mahesh","middle_name":"X","last_name":"M"}        
{"home":"1234567890","office":"1234567890"} 
{"home": {"streat":"Venkatapuram2",**"appartment":2021,"zip":"500001"**}}
如中所述,您只能覆盖配置单元中的前三个分隔符,而配置单元实际上支持8。在嵌套数据结构中,对于每个嵌套级别,都使用一个结果分隔符

在配置单元表中,
地址
映射内的结构中的字段之间的分隔符为\u004(Unicode 4),不能重写

您应该将输入更改为:

1000,Suresh--S,1234567890-1234567890,home=Venkatapuram1\u00042020\u0004500001 
1001,Mahesh-X-M,1234567890-1234567890,home=Venkatapuram2\u00042021\u0004500001

不工作配置单元>从测试中选择*;OK 1 JOHN[“abu1”,“abu2”]{“key1”:[null],“key2”:[null]}所用时间:0.126秒,获取:1行仍不工作:配置单元>从配置文件中选择*;OK 1000{“第一名”:“Suresh”,“中间名”:“姓氏”:“S”{“家”:“1234567890”,“办公室”:“1234567890”{“家”:“Venkatapuram1\\u00042020\\u0004500001”,“公寓”:null,“zip”:null}}1001{“第一名”:“Mahesh”,“中间名”:“X”,“姓氏”:“M”{“家”:“1234567890”,“办公室”:“1234567890”{“家”:“1234567890”{“家”::“Venkatapuram2\\u00042021\\u0004500001”,“装置”:null,“zip”:null}}所用时间:0.083秒,获取:2行配置单元>似乎您添加了\u0004作为文本。您应该插入实际的Unicode字符:)配置单元>从配置文件中选择*;OK 1000{“名字”:“Suresh”,“中间名”:“姓氏”:“S”{“家”:“1234567890”,“办公室”:“1234567890”{“家”:“街道”:“Venkatapuram1”,“公寓”:2020,“zip”:“500001”}1001{“名字”:“Mahesh”,“中间名”:“X”,“姓氏”:“M”{“家”:“1234567890”,“办公室”:“1234567890”{“家”:“Venkatapuram2”,“办公室”:“1234567890”},“Apartment”:2021,“zip”:“500001”}所用时间:0.051秒,获取:2行蜂巢>