表显示了CLI中的Hive分区,但无法通过终端访问

时间:2015-05-15 16:00:32

标签: hadoop hive

当我使用命令show partitions时,我可以在Hive中看到日期分区。但是,当我尝试通过hadoop fs -ls / path / to / partition访问该文件夹时,我收到消息No such file或directory。

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

2 个答案:

答案 0 :(得分: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/

答案 1 :(得分:0)

如何在Hive中创建外部分区表

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/';

这里datepart是你的分区。一旦你创建了分区表,你就需要添加partition.using ALTER TABLE。查询将如下:

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

然后执行hdfs dfs -ls /user/hdfs/data/您将在datepart=20150515目录下获得名为/user/hdfs/data/的目录。 datepart=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);