【发布时间】:2014-10-14 17:03:06
【问题描述】:
我在 HDFS 中有以下文件夹结构:
- 多边形
- file1.kml
- file2.kml
- file3.kml
我想将它加载到具有以下架构的配置单元表中:
表格“多边形”:
name|kml
file1|content of file1
file2|content of file2
file3|content of file3
如何在 Hive 中做到这一点?
【问题讨论】:
我在 HDFS 中有以下文件夹结构:
我想将它加载到具有以下架构的配置单元表中:
表格“多边形”:
name|kml
file1|content of file1
file2|content of file2
file3|content of file3
如何在 Hive 中做到这一点?
【问题讨论】:
据我所知,仅使用Hive 是不可能的。但是你当然可以使用bash(我想它是一台Linux机器)。首先创建输入文件,例如:
#!/bin/bash
# the dir path to be passed as parameter
for file in $1/*
do echo "$(basename $file)|$(cat $file)" >> polygons.dat
done
赋予脚本执行权限后,运行为:
./script Polygons
现在您将在polygons.dat 文件中获得所需的数据。如果它是一台 Windows 机器,你必须找到一种方法来使用batch 脚本来做同样的事情(恐怕我无法提供帮助)。
然后使用基本的Hive 命令进行加载,例如:
hive> CREATE TABLE Polygons ( name STRING, kml STRING)
> ROW FORMAT DELIMITED
> FIELDS TERMINATED BY '|'
> STORED AS TEXTFILE;
hive> LOAD DATA LOCAL INPATH 'path/polygons.dat' OVERWRITE INTO TABLE Polygons;
【讨论】:
您可以使用 INPUT__FILE__NAME,它是 hive 中存储文件名的虚拟列
查看此link 了解有关此虚拟列的更多信息。
您可以将数据加载到表中,然后在选择查询中您可以使用 INPUT__FILE__NAME 来获取文件名。
例如,
select INPUT__FILE__NAME,your_column from your_table;
【讨论】: