我目前正在尝试编写Hive脚本以获取目录路径并生成将路径中的所有不同文件组合在一起的Hive表。我已经找到了如何加载文件,因为我知道它们的直接路径,但是如何在不知道所有文件路径的情况下执行此操作?
如果我知道给定目录的路径,/ combine:
,我就会这样做LOAD DATA INPATH '/combine/file1.txt' INTO TABLE tablename;
LOAD DATA INPATH '/combine/file2.txt' INTO TABLE tablename;
但如果你不知道文件路径,只知道目录?
,你会得到相同的结果答案 0 :(得分:0)
您可以使用外部Hive表。
在HDFS上创建一个文件夹并在其中加载这两个文件:
#!/bin/ksh
while read rec
do
while read line
do
firstname=`echo $line | sed -n -e 's/^.*\(full-name\)/\1/p' | cut -f3 -d'"'`
id=`echo $line | sed -n -e 's/^.*\(id\)/\1/p' | cut -f3 -d'"'`
echo "${firstname}'|'${id}"
done < `echo $rec | nawk 'gsub("}}}}", "\n")' | sed 's/{"results"//g'`
done < /var/tmp/Cloud_test.txt
或者,指定从中加载所有文件的目录:
hadoop fs -mkdir /hive-data
hadoop fs -put file1.txt /hive-data/file1.txt
hadoop fs -put file2.txt /hive-data/file2.txt
验证文件是否已正确加载:
hadoop fs -put directory-with-files/* /hive-data/
在Hive中创建外部表并参考HDFS位置:
(更改架构,字段和行分隔符以匹配您的数据文件。)
hadoop fs -ls /hive-data
验证Hive中的数据:
CREATE EXTERNAL TABLE tablename
(
id INT,
desc STRING
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
LOCATION 'hdfs:///hive-data';
答案 1 :(得分:0)
只需*
符号就可以将e目录下的所有文件加载到表中。
LOAD DATA INPATH '/combine/*' INTO TABLE tablename;