[英]How to add partition using hive by a specific date?
我正在使用配置單元(帶外部表)來處理存儲在amazon S3上的數據。
我的數據分區如下:
DIR s3://test.com/2014-03-01/
DIR s3://test.com/2014-03-02/
DIR s3://test.com/2014-03-03/
DIR s3://test.com/2014-03-04/
DIR s3://test.com/2014-03-05/
s3://test.com/2014-03-05/ip-foo-request-2014-03-05_04-20_00-49.log
s3://test.com/2014-03-05/ip-foo-request-2014-03-05_06-26_19-56.log
s3://test.com/2014-03-05/ip-foo-request-2014-03-05_15-20_12-53.log
s3://test.com/2014-03-05/ip-foo-request-2014-03-05_22-54_27-19.log
如何使用配置單元創建分區表?
CREATE EXTERNAL TABLE test (
foo string,
time string,
bar string
) PARTITIONED BY (? string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
LOCATION 's3://test.com/';
有人可以回答這個問題嗎? 謝謝!
首先從正確的表定義開始。 在你的情況下,我只會使用你寫的:
CREATE EXTERNAL TABLE test (
foo string,
time string,
bar string
) PARTITIONED BY (dt string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
LOCATION 's3://test.com/';
Hive默認情況下希望分區位於通過約定s3://test.com/partitionkey=partitionvalue命名的子目錄中。 例如
s3://test.com/dt=2014-03-05
如果遵循此約定,則可以使用MSCK添加所有分區。
如果您不能或不想使用此命名約定,則需要添加所有分區,如下所示:
ALTER TABLE test
ADD PARTITION (dt='2014-03-05')
location 's3://test.com/2014-03-05'
如果要使用日期字段進行分區,則需要s3文件夾結構,如下所述:
s3://test.com/date=2014-03-05/ip-foo-request-2014-03-05_04-20_00-49.log
在這種情況下,您可以創建具有分區列的外部表作為日期,並運行MSCK REPAIR TABLE EXTERNAL_TABLE_NAME
以更新hive元存儲。
請查看Carter Shanklin上面發布的回復。 您需要確保您的文件作為partitionkey = partitionvalue存儲在目錄結構中,即Hive默認情況下希望分區位於通過約定命名的子目錄中。
在您的示例中,它應存儲為
S3://test.com/date=20140305/ip-foo-request-2014-03-05_04-20_00-49.log。
要遵循的步驟:
i)確保上述結構中存在數據ii)創建外部表iii)現在運行msck修復表。
我認為數據存在於s3位置,並且可能未在元數據中更新(emrfs)。 為了使這首先工作,請執行emrfs導入和emrfs同步。 然后應用msck修復。
它將添加s3中存在的所有分區
如果您的現有目錄結構不符合<partition name>=<partition value>
,則必須手動添加分區。 除非您像這樣構建目錄,否則MSCK REPAIR TABLE將無法工作。
在表創建時指定位置,如:
CREATE EXTERNAL TABLE test ( foo string, time string, bar string ) PARTITIONED BY (dt string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION 's3://test.com/';
您可以添加分區而不指定完整路徑:
ALTER TABLE test ADD PARTITION (dt='2014-03-05') LOCATION '2014-03-05';
雖然我從未檢查過它,但我建議您將分區移動到存儲桶內的文件夾中,而不是直接放在存儲桶中。 例如,從s3://test.com/
到s3://test.com/data/
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.