配置单元仅从hdfs导入某些文件类型

zlwx9yxi  于 2021-06-24  发布在  Hive
关注(0)|答案(1)|浏览(341)

我正在使用serde创建一个外部表
org.apache.hive.hcatalog.data.jsonserde
hdfs文件夹位置有多种文件格式,我只想导入json文件类型。我试着用


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

但似乎不起作用

lrl1mhuk

lrl1mhuk1#

配置单元具有名为input\u file\u 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

我不确定它是否能有效工作,因为不幸的是,这些相关的jira还没有实现:将文件修剪添加到hive中,并通过regex选择性地包含外部表源文件
如果此解决方案工作缓慢,因为Map程序将读取文件,则可能需要将所需的文件复制到单独的文件夹中,并在其上构建一个表。
我们还找到了一个可以使用的解决方案: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”

相关问题