2015-05-15 22 views
0

当我使用命令show partitions时,可以在Hive中看到日期分区。但是,当我尝试通过hadoop fs -ls/path/to /分区访问文件夹时,我收到消息没有这样的文件或目录。该表显示CLI中的Hive分区,但无法通过终端访问

我不确定这是为什么? 我不应该能去那个日期分区的文件夹,即使没有在它的数据(我也无法将数据移动到该分区)

+0

您可以提供创建表的完整步骤。你在做什么?您是否在创建分区表后添加了分区?创建表命令后,您应该添加分区命令是:ALTER TABLE tbl_name ADD PARTITION(dt ='20151505')。 –

回答

3

你有如下遵循:

创建托管/内部表

CREATE TABLE stations(number STRING, latitude INT, longitude INT, elevation INT, name STRING, country STRING) PARTITIONED BY (year int) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE; 

LOAD DATA LOCAL INPATH "/home/cloudera/Desktop/Stations_2014.csv" INTO TABLE stations PARTITION(year=2014); 

要创建外部表

CREATE EXTERNAL TABLE external_stations(number STRING, latitude INT, longitude INT, elevation INT, name STRING, country STRING) PARTITIONED BY (year int) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION '/user/hive/external/'; 

ALTER TABLE external_stations ADD PARTITION (year=2014); 

hadoop fs -put /home/cloudera/Desktop/Stations_2014.csv /user/hive/external/year=2014/ 
+0

是表已经使用外部创建表命令创建。是否可以使用hadoop命令和分区删除文件夹,以便仍然显示在Hive CLI的列表中? – user2441441

+1

您必须使用hadoop命令创建目录,然后更改分区,然后将该文件从本地移至配置单元表的hadoop位置 – Farooque

+0

谢谢。我在hdfs中创建了目录并移动了数据,并在Hive CLI中可见。我认为在外部配置单元表中创建分区时也会创建HDFS文件夹分区。 – user2441441

0

如何在蜂巢

创建一个外部分区表
CREATE EXTERNAL TABLE IF NOT EXISTS test_table (
attribute INT, 
attribute1 STRING, 
attribute2 STRING) 
PARTITIONED BY (datepart STRING) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' 
LOCATION '/user/hdfs/data/'; 

这里日期部分是你所创建的分区表,那么你需要添加partition.using ALTER TABLE您partition.Once。查询会是这样:

ALTER TABLE test_table ADD PARTITION(datepart='20150515'); 

然后做hdfs dfs -ls /user/hdfs/data/,你会得到一个名为/user/hdfs/data/目录下datepart=20150515datepart=20150515这是你的分区目录,因此你的目录结构将/user/hdfs/data/datepart=20150515/

现在,您可以将数据加载到使用从本地文件系统hdfs dfs -put命令该目录。 如果您的数据已经在HDFS位置可用,那么您可以使用LOAD DATA INPATH命令将数据加载到分区表 中,或者您可以使用hdfs dfs -mv命令将数据从hdfs位置移动到另一个hdfs位置。

假设如果你想删除一个分区,那么你可以使用这样的查询。

ALTER TABLE test_table DROP IF EXISTS PARTITION(datepart=20150515); 
相关问题