我正在使用serde创建一个外部表org.apache.hive.hcatalog.data.jsonserdehdfs文件夹位置有多种文件格式,我只想导入json文件类型。我试着用
**SERDEPROPERTIES (“input.regex” = “*.json”)**
但似乎不起作用
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" 我们可以做到:
"/user/hive/mytable"
"/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”
1条答案
按热度按时间lrl1mhuk1#
配置单元具有名为input\u file\u name的虚拟列,您可以在where子句中对其进行筛选。
我不确定它是否能有效工作,因为不幸的是,这些相关的jira还没有实现:将文件修剪添加到hive中,并通过regex选择性地包含外部表源文件
如果此解决方案工作缓慢,因为Map程序将读取文件,则可能需要将所需的文件复制到单独的文件夹中,并在其上构建一个表。
我们还找到了一个可以使用的解决方案:symlinktextinputformat
用一个包含所有所需文件列表的文件创建一个新位置,并在此位置上构建一个表。
例如,表的位置是
"/user/hive/mytable"
. 有一个名为“/user/hive/mytable/myfile.txt”的文件。文件里有两行,"/user/myname/textfile1.txt"
以及"/user/myname/textfile2.txt"
我们可以做到:它将返回2个文件的内容:“/user/myname/textfile1.txt”和“/user/myname/textfile2.txt”