Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hive 如何从子目录将所有数据提取到配置单元中_Hive_Partition - Fatal编程技术网

Hive 如何从子目录将所有数据提取到配置单元中

Hive 如何从子目录将所有数据提取到配置单元中,hive,partition,Hive,Partition,我将数据以特定格式组织在目录中(如下所示),并希望将这些数据添加到配置单元表中。我想添加2012目录的所有数据。 下面所有的名称都是目录名,最里面的目录(第三级)有实际的数据文件。 是否有任何方法可以直接拾取数据,而无需更改此dir结构。 任何指点都很感激 /2012/ | |---------2012-01 |---------2012-01-01 |---------2012-01-02 |...

我将数据以特定格式组织在目录中(如下所示),并希望将这些数据添加到配置单元表中。我想添加2012目录的所有数据。 下面所有的名称都是目录名,最里面的目录(第三级)有实际的数据文件。 是否有任何方法可以直接拾取数据,而无需更改此dir结构。 任何指点都很感激

/2012/
|
|---------2012-01
            |---------2012-01-01
            |---------2012-01-02
            |...
            |...
            |---------2012-01-31
|
|---------2012-02
            |---------2012-02-01
            |---------2012-02-02
            |...
            |...
            |---------2012-02-28
|
|---------2012-03
|...
|...
|---------2012-12
到目前为止还没有成功:

CREATE EXTERNAL TABLE sampledata
(datestr string, id string, locations string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '|'
LOCATION '/path/to/data/2012/*/*'; 

CREATE EXTERNAL TABLE sampledata
(datestr string, id string, locations string)
partitioned by (ystr string, ymstr string, ymdstr string) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY '|';

ALTER TABLE sampledata
ADD 
PARTITION (ystr ='2012') 
LOCATION '/path/to/data/2012/';
解决方案: 这个小参数解决了我的问题。此外,还有一个问题是,这可能对其他人有利:

SET mapred.input.dir.recursive=true;

用适合我的案例的解决方案回答我自己的问题。设置mapred.input.dir.recursive=true

以下是霍顿作品

SET hive.mapred.supports.subdirectories=true;
SET mapred.input.dir.recursive=true;
alter table .... set blproperties (
    "hive.input.dir.recursive" = "TRUE",
    "hive.mapred.supports.subdirectories" = "TRUE",
    "hive.supports.subdirectories" = "TRUE",
    "mapred.input.dir.recursive" = "TRUE");

这将仅提供2012-01-01目录的数据。我需要super parent dir 2012中2012年所有日期的所有数据。当您查询
select*from sampledata where ystr='2012'
,配置单元将使用所有子目录作为输入。上面哪一种创建表语法帮助您实现了这一点。我也面临同样的问题。我的数据分布在多个目录中。使用第一个create查询最顶端的数据目录通配符,位置是否适合您?我不能让它工作。当我查询表时,它会创建模式,但不会为我检索任何结果。并且(配置单元1.2):set-Hive.mapred.supports.subdirectories=true;这将如何更改CREATEEXTERNAL table语句?你还在这个地方使用地球仪吗?请花点时间读一下。只发代码不是最好的答案。
alter table .... set blproperties (
    "hive.input.dir.recursive" = "TRUE",
    "hive.mapred.supports.subdirectories" = "TRUE",
    "hive.supports.subdirectories" = "TRUE",
    "mapred.input.dir.recursive" = "TRUE");