Hive可以递归地下载到没有分区或编辑hive-site.xml的子目录中吗?

 cryy5bl-1940 发布于 2022-12-12 20:03

我有一些我想用Hive查询的Web服务器日志.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;

我已经看到其他帖子在表级设置这些属性(例如,使用tblproperties创建Hive外部表的问题):

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

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

问)有没有办法创建一个表,该表下降到子目录而不使用分区,进行站点范围的更改,或每次运行这4个命令?

1 个回答
  • 在HDInsight中使用Hive,我在Hive查询中创建外部表之前设置了以下属性,它对我有用.

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

    2022-12-12 20:09 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有