2015-11-13 38 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