如何使用hive中的外部关键字创建表

时间:2013-12-10 11:46:11

标签: hive

我想处理hdfs中的数据,我正在尝试使用外部关键字创建表格,然后我收到以下错误,请您为此提供解决方案。

hive> create EXTERNAL table samplecv(id INT, name STRING)
      row format serde 'com.bizo.hive.serde.csv.CSVSerde'
     with serdeproperties (
        "separatorChar" = "\t",
        "quoteChar"     = "'",
       "escapeChar"    = "\\"
      )   
     LOCATION '/home/siva/jobportal/sample.csv'; 

我收到以下错误,请您为此提供解决方案

FAILED: Error in metadata: MetaException(message:Got exception: org.apache.hadoop.ipc.RemoteException java.io.FileNotFoundException: Parent path is not a directory: /home/siva/jobportal/sample.csv

4 个答案:

答案 0 :(得分:1)

请您确认此路径是否在HDFS上?

有关在Hive中创建外部表的更多信息:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-ExternalTables

答案 1 :(得分:0)

我在hive ---

中使用以下内容进行XML解析serde
CREATE EXTERNAL TABLE XYZ(
X STRING, 
Y STRING, 
Z ARRAY<STRING>
 )
ROW FORMAT SERDE 'com.ibm.spss.hive.serde2.xml.XmlSerDe'
WITH SERDEPROPERTIES (
"column.xpath.X"="/XX/@X",
"column.xpath.Y"="/YY/@Y"
)
STORED AS
INPUTFORMAT 'com.ibm.spss.hive.serde2.xml.XmlInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat'
LOCATION '/user/XXX' 
TBLPROPERTIES (
"xmlinput.start"="<xml start",
"xmlinput.end"="</xml end>"
);

答案 2 :(得分:0)

目前,Hive只允许您在添加分区时将目录设置为分区位置。您要在此处尝试将文件设置为分区位置。我使用的解决方法是首先添加一个具有虚拟/不存在目录的分区(Hive在将其设置为分区位置时不要求该目录存在),然后使用 alter表分区设置位置以将分区位置更改为所需文件。令人惊讶的是,在添加新分区时,Hive不会像设置现有分区的位置那样强制将该位置强制为目录。所以在你的情况下,它看起来像 -

alter table samplecv add partition (id='11', name='somename') location '/home/siva/jobportal/somedirectory'
alter table samplecv partition (id='11', name='somename') set location '/home/siva/jobportal/sample.csv'

答案 3 :(得分:0)

Hive总是希望位置路径中的目录名称而不是文件名。

在目录中创建您的文件,例如在/home/siva/jobportal/sample/sample.csv中,然后尝试在命令下运行以创建您的hive表。

create EXTERNAL table samplecv(id INT, name STRING)
row format serde 'com.bizo.hive.serde.csv.CSVSerde'
with serdeproperties (
"separatorChar" = "\t",
"quoteChar"     = "'",
"escapeChar"    = "\\"
)   
LOCATION '/home/siva/jobportal/sample';

如果您收到任何错误,只需将您的文件放入hdfs并尝试,它应该可以正常工作。