当我使用命令show partitions时,我可以在Hive中看到日期分区。但是,当我尝试通过hadoop fs -ls / path / to / partition访问该文件夹时,我收到消息No such file或directory。
我不确定为什么会这样? 即使没有数据,我也不应该去那个日期分区文件夹(我也无法将数据移动到这个分区)
答案 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);