我正在使用Serde创建外部表
org.apache.hive.hcatalog.data.JsonSerde
Hdfs文件夹位置具有多种文件格式,我只想导入 json 文件类型。我尝试使用
**SERDEPROPERTIES (“input.regex” = “*.json”)**
但似乎不起作用
答案 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 Hive和Selectively 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”