ROW FORMAT DELIMITED FIELDS TERMINATED BY '${database_delimiter}' LINES TERMINATED BY '\n' STORED AS TEXTFILE LOCATION '${database_location}/Person';
这里的人应该是一个目录。而person是part-m文件而不是目录。
olmpazwi1#
如果我正确理解了这个问题,那么hive确实无法在文件上创建表。它必须是一个目录位置。因此,无论您有什么过程,都需要生成所述目录。例如,无论您有什么Map程序进程,您都需要指定一个输出目录,如果您没有这样做,那么您的文件将被放置在其他文件旁边的某个位置(mapreduce应该会失败,因为目标目录已经存在。您可以做的是将所有零件文件移动到新位置
$ hdfs dfs -mkdir -p ${database_location}/Person/ $ # create hive table using that location $ hdfs dfs -mv ${database_location}/part-m* ${database_location}/Person/ $ # run hive query
或者,如果你有原始文件,你可以做类似的事情
$ hdfs dfs -mkdir -p ${database_location}/Person/ $ # create hive table using that location $ hdfs dfs -put somefile ${database_location}/Person/ $ # run hive query
或使用 LOCAL DATA INPATH 从一个hdfs位置读取到配置单元表
LOCAL DATA INPATH
1条答案
按热度按时间olmpazwi1#
如果我正确理解了这个问题,那么hive确实无法在文件上创建表。它必须是一个目录位置。
因此,无论您有什么过程,都需要生成所述目录。
例如,无论您有什么Map程序进程,您都需要指定一个输出目录,如果您没有这样做,那么您的文件将被放置在其他文件旁边的某个位置(mapreduce应该会失败,因为目标目录已经存在。
您可以做的是将所有零件文件移动到新位置
或者,如果你有原始文件,你可以做类似的事情
或使用
LOCAL DATA INPATH
从一个hdfs位置读取到配置单元表