簡體   English   中英

表由Timestamp字段分區

[英]Table Partitioned by Timestamp Field

為了生成一些摘要數據,我們定期將數據導入Hive。 我們目前使用的是CSV文件格式,其布局如下:

operation,item,timestamp,user,marketingkey

目前,我們有一些查詢正在執行時間戳字段的日期(yyyy-mm-dd)分組。

正在導入的文件有時會保留更多天,我想以分區方式存儲它。 有沒有辦法用Hive做,我已經基於以下DDL構建表:

CREATE TABLE 
   partitionedTable (name string) 
PARTITIONED BY (time bigint) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';

數據加載完成如下:

LOAD DATA LOCAL INPATH 
   '/home/spaeth/tmp/hadoop-billing-data/extracted/testData.csv' 
INTO TABLE partitionedTable PARTITION(time='2013-05-01');

但我希望該配置單元基於正在導入的文件中的字段以自動方式應用分區。 例如:

login,1,1370793184,user1,none --> stored to partition 2013-06-09
login,2,1360793184,user1,none --> stored to partition 2013-02-13
login,1,1360571184,user2,none --> stored to partition 2013-02-11
buy,2,1360501184,user2,key1   --> stored to partition 2013-02-10

看起來您正在尋找動態分區,Hive支持動態分區插入,如本文所述

首先,您需要創建一個臨時表,您可以在其中放置沒有分區的平面數據。 在你的情況下,這將是:

CREATE TABLE 
    flatTable (type string, id int, ts bigint, user string, key string) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';

然后,您應該將平面數據文件加載到此目錄中:

LOAD DATA LOCAL INPATH
    '/home/spaeth/tmp/hadoop-billing-data/extracted/testData.csv'
INTO TABLE flatTable;

此時,您可以使用動態分區插入。 要記住的一些事項是,您需要以下屬性:

  • hive.exec.dynamic.partition應設置為true因為我相信默認情況下禁用動態分區。
  • hive.exec.dynamic.partition.mode應設置為nonstrict ,因為你只有一個分區,並嚴格模式強制執行,你需要一個靜態分區。

因此,您可以運行以下查詢:

SET hive.exec.dynamic.partition=true;
SET hive.exec.dynamic.partition.mode=nonstrict;
FROM
    flatTable
INSERT OVERWRITE TABLE
    partitionedTable
PARTITION(time)
SELECT
    user, from_unixtime(ts, 'yyyy-MM-dd') AS time

這應該會產生2個MapReduce作業,最后你應該看到以下內容:

Loading data to table default.partitionedtable partition (time=null)
    Loading partition {time=2013-02-10}
    Loading partition {time=2013-02-11}
    Loading partition {time=2013-02-13}
    Loading partition {time=2013-06-09}

並驗證您的分區確實在這里:

$ hadoop fs -ls /user/hive/warehouse/partitionedTable/
Found 4 items
drwxr-xr-x   - username supergroup          0 2013-11-25 18:35 /user/hive/warehouse/partitionedTable/time=2013-02-10
drwxr-xr-x   - username supergroup          0 2013-11-25 18:35 /user/hive/warehouse/partitionedTable/time=2013-02-11
drwxr-xr-x   - username supergroup          0 2013-11-25 18:35 /user/hive/warehouse/partitionedTable/time=2013-02-13
drwxr-xr-x   - username supergroup          0 2013-11-25 18:35 /user/hive/warehouse/partitionedTable/time=2013-06-09

請注意,動態分區僅在Hive 0.6之后受支持,因此如果您有舊版本,則可能無法運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM