Hive仅从HDFS导入某些文件类型

时间:2019-06-17 17:37:34

标签: hive hdfs hiveql hive-serde

我正在使用Serde创建外部表

  

org.apache.hive.hcatalog.data.JsonSerde

Hdfs文件夹位置具有多种文件格式,我只想导入 json 文件类型。我尝试使用

**SERDEPROPERTIES (“input.regex” = “*.json”)** 

但似乎不起作用

1 个答案:

答案 0 :(得分:0)

配置单元具有名为INPUT__FILE__NAME的虚拟列,您可以在where子句中对其进行过滤。

select * from --do everything else on this level
(select * from your_table --do filtering in the subquery wrapper
where INPUT__FILE__NAME rlike '\\.json$' --ends with .json
)s

我不确定它是否会有效运行,因为不幸的是尚未实现以下相关的Jiras:Add file pruning into HiveSelectively include EXTERNAL TABLE source files via REGEX

如果由于映射器将读取文件而导致该解决方案无法正常运行,则可能需要将所需的文件复制到单独的文件夹中,并在该文件夹上构建一个表。

找到了另一种可以使用的解决方案:SymlinkTextInputFormat

使用包含所有必需文件列表的文件创建一些新位置,并在该位置顶部构建一个表。

例如,表的位置为"/user/hive/mytable"。 有一个名为“ /user/hive/mytable/myfile.txt”的文件。 在文件内部,有两行"/user/myname/textfile1.txt""/user/myname/textfile2.txt"

我们可以做到:

CREATE TABLE mytable (...) STORED AS INPUTFORMAT 'org.apache.hadoop.hive.io.SymlinkTextInputFormat' LOCATION '/user/hive/mytable';
SELECT * FROM mytable;

这将返回2个文件的内容:“ / user / myname / textfile1.txt”和“ /user/myname/textfile2.txt”