,如何获得相同的结果?
我当前正在尝试编写一个蜂巢脚本以进入目录路径并生成一个将路径中所有不同文件组合在一起的蜂巢表。我找到了如何加载文件给定给我的直接路径,但是如何在不知道所有文件路径的情况下执行此操作?
如果我知道给定目录的路径,/combine:
LOAD DATA INPATH '/combine/file1.txt' INTO TABLE tablename;
LOAD DATA INPATH '/combine/file2.txt' INTO TABLE tablename;
但是,如果您不知道文件路径,只有目录?
只是*
符号可以将E目录下的所有文件加载到表中。
LOAD DATA INPATH '/combine/*' INTO TABLE tablename;
您可以使用外部蜂巢表。
在HDF上创建一个文件夹,然后加载两个文件:
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/
验证文件正确加载:
hadoop fs -ls /hive-data
在Hive中创建外部表格,并参考HDFS位置:
(更改架构,字段和行定界符以匹配您的数据文件。(
CREATE EXTERNAL TABLE tablename
(
id INT,
desc STRING
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LINES TERMINATED BY 'n'
LOCATION 'hdfs:///hive-data';
在Hive中验证数据:
select * from tablename;