通过从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作为工作
答案 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