【问题标题】:Apache Hive - Complex DataType Map<string, struct> not workingApache Hive - 复杂数据类型映射<string, struct> 不工作
【发布时间】:2017-08-12 06:10:09
【问题描述】:

Hive 版本 2.1.1

问题描述:集合项终止值作为 Map Keys 插入

蜂巢表:

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 语句的实际数据:

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"**}}

【问题讨论】:

    标签: hive


    【解决方案1】:

    HIVE nested ARRAY in MAP data type 中的回答,hive 中只能覆盖前三个分隔符,而 hive 实际上支持 8 个。在嵌套数据结构中,对于每个嵌套级别,使用一个后续分隔符。

    在您的配置单元表中,address 映射内的结构中字段之间的分隔符是 \u004 (Unicode 4),它不能被覆盖。

    您应该将输入更改为:

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

    【讨论】:

    • 不工作的蜂巢> select * from test_stg; OK 1 JOHN ["abu1","abu2"] {"key1":[null],"key2":[null]} 耗时:0.126 秒,获取:1 行
    • 仍然无法正常工作:hive> 从配置文件中选择 *; OK 1000 {"first_name":"Suresh","middle_name":"","last_name":"S"} {"home":"1234567890","office":"1234567890"} {"home":{" streat":"Venkatapuram1\\u00042020\\u0004500001","appartment":null,"zip":null}} 1001 {"first_name":"Mahesh","middle_name":"X","last_name":"M "} {"home":"1234567890","office":"1234567890"} {"home":{"streat":"Venkatapuram2\\u00042021\\u0004500001","appartment":null,"zip":null }} 耗时:0.083 秒,获取:2 行 hive>
    • 您似乎添加了 \u0004 作为文本。您应该插入实际的 Unicode 字符
    • 赞赏,工作真棒 :) hive> 从配置文件中选择 *; OK 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"}} 耗时:0.051 秒,获取:2 行 hive>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多