【发布时间】:2016-07-01 19:15:10
【问题描述】:
我在单个 HDFS 文件夹中有多个文件。 我想将每个文件加载到不同的配置单元表中,并希望将源文件保存在同一位置。
我知道我们可以创建指向该目录的外部表。
是否可以创建指向特定文件的外部表?
谁能帮我解决这个问题。
【问题讨论】:
标签: hive
我在单个 HDFS 文件夹中有多个文件。 我想将每个文件加载到不同的配置单元表中,并希望将源文件保存在同一位置。
我知道我们可以创建指向该目录的外部表。
是否可以创建指向特定文件的外部表?
谁能帮我解决这个问题。
【问题讨论】:
标签: hive
如果您有预定义数量的具有预定义名称的文件,您可以尝试使用基于 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'
...
参考:
【讨论】:
外部表总是有它自己的位置(一个文件夹)。使用hadoop distcp <srcurl> <desturl> 命令或hdfs dfs -cp ... 将文件复制到表位置。参考https://hadoop.apache.org/docs/r2.4.1/hadoop-project-dist/hadoop-common/FileSystemShell.html#cp
【讨论】: