Hive无法获取所选列

时间:2014-08-06 06:48:20

标签: hadoop hive

以下代码创建了示例员工表。一切正常,但它只返回所需的列,返回整个数据。我不明白我哪里出错了。

CREATE TABLE employees (
name STRING,
salary FLOAT,
subordinates ARRAY<STRING>,
deductions MAP<STRING, FLOAT>,
address STRUCT<street:STRING, city:STRING, state:STRING, zip:INT>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\001'
COLLECTION ITEMS TERMINATED BY '\002'
MAP KEYS TERMINATED BY '\003'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE;

使用的样本数据:

John Doe^A100000.0^AMary Smith^BTodd Jones^AFederal Taxes^C.2^BState
Taxes^C.05^BInsurance^C.1^A1 Michigan Ave.^BChicago^BIL^B60600

使用的示例查询:

SELECT name FROM emp;

返回结果:

John Doe^A100000.0^AMary Smith^BTodd Jones^AFederal Taxes^C.2^BState
Taxes^C.05^BInsurance^C.1^A1 Michigan Ave.^BChicago^BIL^B60600

1 个答案:

答案 0 :(得分:0)

您遇到的问题是,通过输入数据的外观,控制字符已被写为纯文本,因此“^ A”将不会被识别为字符\ 001。您可以尝试使用十六进制查看器打开输入文件,看看它是否正确。

但是,如果这是正确的,您需要告诉Hive用字符串而不是字符分隔字段。这不是那么简单,因为您需要使用RegexSerDe,这不允许使用MAPARRAY等列类型。最简单的解决方案是修改输入数据并将分隔符更改为单个字符。