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