gpt4 book ai didi

hadoop - Hive 是否可以在不分区或不编辑 hive-site.xml 的情况下递归下降到子目录?

转载 作者:可可西里 更新时间:2023-11-01 14:15:44 26 4
gpt4 key购买 nike

我有一些 Web 服务器日志,我想用 Hive 查询。 HDFS 中的目录结构如下所示:

/data/access/web1/2014/09
/data/access/web1/2014/09/access-20140901.log
[... etc ...]
/data/access/web1/2014/10
/data/access/web1/2014/10/access-20141001.log
[... etc ...]
/data/access/web2/2014/09
/data/access/web2/2014/09/access-20140901.log
[... etc ...]
/data/access/web2/2014/10
/data/access/web2/2014/10/access-20141001.log
[... etc ...]

我能够创建一个外部表:

CREATE EXTERNAL TABLE access(
host STRING,
identity STRING,
user STRING,
time STRING,
request STRING,
status STRING,
size STRING,
referer STRING,
agent STRING)
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
"input.regex" = "([^ ]*) ([^ ]*) ([^ ]*) (-|\\[[^\\]]*\\]) ([^ \"]*|\"[^\"]*\") (-|[0-9]*) (-|[0-9]*)(?: ([^ \"]*|\"[^\"]*\") ([^ \"]*|\"[^\"]*\"))?",
"output.format.string" = "%1$s %2$s %3$s %4$s %5$s %6$s %7$s %8$s %9$s")
LOCATION '/data/access/'

...尽管 Hive 不会进入子文件夹,除非我在运行 Hive 查询之前运行以下命令:

set hive.input.dir.recursive=true;
set hive.mapred.supports.subdirectories=true;
set hive.supports.subdirectories=true;
set mapred.input.dir.recursive=true;

我看到其他帖子在表级别设置这些属性(例如 Issue creating Hive External table using tblproperties ):

TBLPROPERTIES ("hive.input.dir.recursive" = "TRUE", 
"hive.mapred.supports.subdirectories" = "TRUE",
"hive.supports.subdirectories" = "TRUE",
"mapred.input.dir.recursive" = "TRUE");

不幸的是,这对我不起作用:当我查询时,该表没有返回任何记录。我知道可以在 hive-site.xml 中设置这些属性,但如果不需要,我宁愿不做任何可能影响其他用户的更改。

问)有没有一种方法可以在不使用分区、在站点范围内进行更改或每次都运行这 4 个命令的情况下创建一个下放到子目录中的表?

最佳答案

在 HDInsight 中使用 Hive,我在 Hive 查询中创建外部表之前设置了以下属性,它适用于我。

SET hive.mapred.supports.subdirectories=TRUE;
SET mapred.input.dir.recursive=TRUE;

关于hadoop - Hive 是否可以在不分区或不编辑 hive-site.xml 的情况下递归下降到子目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26767713/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com