Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop 配置单元无法拾取所选列_Hadoop_Hive - Fatal编程技术网

Hadoop 配置单元无法拾取所选列

Hadoop 配置单元无法拾取所选列,hadoop,hive,Hadoop,Hive,下面的代码创建示例employee表。一切正常,但它返回整个数据,同时只选择所需的列。我不知道我哪里出错了 CREATE TABLE employees ( name STRING, salary FLOAT, subordinates ARRAY<STRING>, deductions MAP<STRING, FLOAT>, address STRUCT<street:STRING, city:STRING, state:STRING, zip:INT> )

下面的代码创建示例employee表。一切正常,但它返回整个数据,同时只选择所需的列。我不知道我哪里出错了

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;
使用的示例查询:

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

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


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

我认为问题在于数据未被解析。整行在“名称”列下。如果我没有错,其他列的值必须为空。如果我试图通过从emp中选择*来获取所有字段,则在两者之间获取空值。这确保了并非所有列都在name column下。是的,您是rite。所有字段都在name column下。您知道这里有什么问题吗?一个建议,而不是使用\001、\002。您不能指定^A、^B,^C,因为它似乎是一个简单的文本数据,应该以这种方式工作。
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