我在hdfs文件路径中有avro格式的数据,如: /data/logs/[foldername]/[filename].avro
. 我想在所有这些日志文件(即窗体的所有文件)上创建一个配置单元表 /data/logs/*/*
. (它们都基于相同的avro模式。)
我正在用flag运行下面的查询 mapred.input.dir.recursive=true
:
CREATE EXTERNAL TABLE default.testtable
ROW FORMAT SERDE
'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'
LOCATION 'hdfs://.../data/*/*'
TBLPROPERTIES (
'avro.schema.url'='hdfs://.../schema.avsc')
如果我不换table,table就空了 LOCATION
少嵌套,即 'hdfs://.../data/[foldername]/'
有一个特定的文件夹名。这对于嵌套较少的路径没有问题 LOCATION
.
我希望能够从所有这些不同的[foldername]文件夹中获取数据。如何在嵌套目录中进一步进行递归输入选择?
2条答案
按热度按时间wljmcqd81#
解决问题的方法之一是将文件夹名作为分区列添加到外部表中。然后就可以在数据目录上创建表。或者你可以把这些嵌套的文件放在一个目录中。
我不认为你能要求hive将所有这些文件夹的输入视为一个表,否则。
这个问题似乎解决了一个类似的问题:在hive中创建外部表时,我能否将位置指向direcotry中的特定文件?
在同样的背景下,还有一个公开的jira问题:https://issues.apache.org/jira/browse/hive-951
浏览更多我看到这个帖子建议你使用simlinkinputtextformat作为替代。我不知道这将如何与你的avro格式飞行。https://hive.apache.org/javadocs/r0.10.0/api/org/apache/hadoop/hive/ql/io/symlinktextinputformat.html
yrwegjxp2#
使用此配置单元设置启用递归目录:
创建外部表并指定根目录作为位置:
您将能够从表位置和所有子目录查询数据