2015-11-13 23 views
-1

我有兩個問題,請幫我解決它們。用不同結構導入Hive中的多個文件

問題1:文件結構 我有3個文件與這些列:

  • log_in.csv(REQUEST_ID,date_in,原點)
  • log_out.csv(REQUEST_ID,date_out,目的地)
  • request.csv(REQUEST_ID,date_request,用戶)

每個文件被寫入型動物的時刻,因此, 「日期」 是正同樣的。如果請求完成,request_id在所有文件中都是相同的。

例:

log_out.csv

request_id |  date_out  | destination 
    1  | 2015-11-13 01:02:02 | 192.168.0.7 
    3  | 2015-11-13 05:01:05 | 192.168.0.5 
    4  | 2015-11-13 03:09:02 | 192.168.0.10 

log_in.csv

request_id |  date_in  | origin 
    1  | 2015-11-13 01:02:03 | 192.168.0.10 
    2  | 2015-11-13 02:03:04 | 192.168.0.9 
    4  | 2015-11-13 03:09:02 | 192.168.0.3 

request.csv

request_id |  date_in  | user 
    1  | 2015-11-13 01:02:01 | user1 
    2  | 2015-11-13 02:03:01 | user2 
    3  | 2015-11-13 02:03:01 | user1 
    4  | 2015-11-13 03:09:01 | user3 

什麼是更好的方式來存儲這些文件?

問題2:目錄

我怎樣才能正確的struct我diretory,如果他們有相同的名字白天在HDFS加載文件?

爲例如:

LOGS/20151113/log_out.csv 
LOGS/20151113/log_in.csv 
LOGS/20151113/request.csv 
LOGS/20151114/log_out.csv 
LOGS/20151114/log_in.csv 
LOGS/20151114/request.csv 
. 
. 
. 

預先感謝您

+0

你究竟想達到什麼目的?您是否希望將數據存儲在3個表格中?或者嘗試以最好的方式將數據加載到hdfs中? 關於目錄結構:您是否正在將文件保存在日期目錄下。如果是,那可能! – Anil

+0

@Anil它可能是3個表,但如果你可以在其他結構中存儲在HDFS中,它也會適用於這種情況 –

+0

@Anil我想弄清楚存儲和加載這些文件的最佳方式,哪種結構應該我在HDFS中使用以及稍後訪問數據的最佳方式。關於文件結構,在日期目錄下不需要(它可能會分隔分區,我不知道它是否是更好的方法) –

回答

0

@Otavio R.羅西:你可以創建3個(外部)表,登錄,註銷,並要求如果數據已經在HDFS

喜歡的東西,

CREATE EXTERNAL TABLE login(
    request_id INT, 
    date_out TIMESTAMP, 
    destination STRING 
    ) 
    ROW FORMAT DELIMITED 
    FIELDS TERMINATED BY '|' 
    STORED AS TEXTFILE; 
    LOAD DATA INPATH 'hdfs location' 

現在這些表格可以按日期或年/月/日進行分區,具體取決於您的用途。

另外,如果您正在查找關聯,則可以考慮將所有數據加載到一個表中,方法是加入request_id上的所有3個表。希望這可以幫助 !

+0

感謝您的回答。 但是,在這種情況下,您提到過(將所有數據加載到一個表中),如果每個文件具有不同的列數,如何通過將它們加入單個表中來加載3個文件中的數據?這可能嗎?如果列數爲10(表內大量空)會怎麼樣? –

+0

是@ OtavioR.Rossi:這就是聚合的工作方式;) 在這裏加入3個表(request_id) – Anil