2015-05-15 54 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); 
相關問題