无法在HIVE中创建表从HDFS读取CSV

时间:2014-09-23 07:19:11

标签: hadoop hive hdfs

通过从HDFS读取.csv文件在Hive中创建表时遇到问题。查询如下:

CREATE EXTERNAL TABLE testmail (memberId String , email String, sentdate String,actiontype String, actiondate String, campaignid String,campaignname String)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' 
LOCATION '/user/hadoop/cloudera/ameeth/ca_email.csv';

获取错误。 元数据错误:

  

MetaException(消息:HDFS:// PC:8020 /用户/ hadoop的/ Cloudera的/ ameeth / ca_email.csv   不是目录或无法创建目录

任何人都可以帮助我。实际上我想在.sql文件中运行这样的staments作为工作

4 个答案:

答案 0 :(得分:14)

Hive会获取您在LOCATION中指定的目录中的所有文件。您无需指定文件名。

这应该有效:

CREATE EXTERNAL TABLE testmail (memberId String , email String, sentdate String,actiontype String, actiondate String, campaignid String,campaignname String) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION '/user/hadoop/cloudera/ameeth';

答案 1 :(得分:0)

转到此路径

在cloudera中找到您的metastore_db文件夹 并删除* .lck文件

命令 sudo rm / folder_path / metastore_db / * .lck

答案 2 :(得分:0)

在HDFS上创建一个目录,并将ca_email.csv移入其中,然后将该目录指定为CREATE EXTERNAL TABLE命令的LOCATION。

答案 3 :(得分:0)

我有同样的问题。

我将csv文件更改为制表符分隔的文本文件,将文件移至hdfs,并通过加载已完成的文件创建了配置单元表。

您可以在hdfs中查看文件,以确保已按预期用制表符分隔数据并将其加载到配置单元表中

CREATE TABLE TABLE1

( column1 string,

  column2 string,

....

ROW FORMAT DELIMITTED FIELDS TERMINATED BY '\t';

)LOAD DATA INPATH <hdfs location of tab delimitted txt file> OVERWRITE INTO TABLE TABLE1