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

Hive 配置单元仅从hdfs导入某些文件类型,hive,hdfs,hiveql,hive-serde,Hive,Hdfs,Hiveql,Hive Serde,我正在使用Serde创建一个外部表 org.apache.hive.hcatalog.data.JsonSerde Hdfs文件夹位置有多种文件格式,我只想导入json文件类型。我试着用 **SERDEPROPERTIES (“input.regex” = “*.json”)** 但似乎不起作用配置单元具有名为INPUT\u FILE\u NAME的虚拟列,您可以在where子句中对其进行筛选 select * from --do everything else on this level

我正在使用Serde创建一个外部表

org.apache.hive.hcatalog.data.JsonSerde

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

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

但似乎不起作用

配置单元具有名为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
我不确定它是否能有效工作,因为不幸的是,这些相关的Jiras还没有实现:而且

如果此解决方案工作缓慢,因为映射程序将读取文件,则可能需要将所需文件复制到单独的文件夹中,并在其上构建一个表

您还找到了一个可以使用的解决方案:

使用包含所有所需文件列表的文件创建一些新位置,并在此位置上构建一个表

例如,表的位置是
“/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;

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

配置单元具有名为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
我不确定它是否能有效工作,因为不幸的是,这些相关的Jiras还没有实现:而且

如果此解决方案工作缓慢,因为映射程序将读取文件,则可能需要将所需文件复制到单独的文件夹中,并在其上构建一个表

您还找到了一个可以使用的解决方案:

使用包含所有所需文件列表的文件创建一些新位置,并在此位置上构建一个表

例如,表的位置是
“/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;
这将返回两个文件的内容:“/user/myname/textfile1.txt”和“/user/myname/textfile2.txt”