我在单个HDFS文件夹中有多个文件。 我想将每个文件加载到不同的hive表中,并希望将源文件保存在同一位置。
我知道我们可以创建指向目录的外部表。
是否可以创建指向特定文件的外部表?
任何人都可以帮我解决这个问题。
答案 0 :(得分:1)
如果您有预定义数量的具有预定义名称的文件,您可以尝试使用基于INPUT__FILE__NAME
虚拟列的WHERE子句的多表INSERT。
FROM some_db.some_external_table
INSERT INTO table1
SELECT a, b, c
WHERE INPUT__FILE__NAME like '%/gabuzomeu.csv'
INSERT INTO table2
SELECT a, x, d, CAST(z AS FLOAT)
WHERE INPUT__FILE__NAME like '%/wtf.csv'
...
参考:
答案 1 :(得分:0)
外部表始终拥有自己的位置(文件夹)。使用hadoop distcp <srcurl> <desturl>
命令或hdfs dfs -cp ...
将文件复制到表位置。请参阅https://hadoop.apache.org/docs/r2.4.1/hadoop-project-dist/hadoop-common/FileSystemShell.html#cp以获取参考