2

假设我有一个文件“fruitsbought.csv”,其中包含许多包含日期字段的记录。

是否可以通过基于该文本文件创建“fruits”表来“分区”以获得更好的性能,同时创建一个分区,其中 fruitsbought.txt 中与该分区匹配的所有行,假设我想这样做年和月,要创建吗?

或者我是否必须作为单独过程的一部分,为每年创建一个目录,然后在 impala-shell 中创建表之前,将当年过滤的适当“.csv”文件放入 HDFS 上的目录结构中?

我听说您可以创建一个空表,设置分区,然后使用恰好包含该记录进入的分区的“插入”语句。虽然在我目前的情况下,我已经有一个“fruitsbought.csv”,其中包含我想要的每条记录,我喜欢如何将它变成一个表格(尽管它没有 parititionig)。

我是否必须开发一个单独的过程来将一个文件预拆分为在正确分区下排序的多个文件?(一个文件非常非常大)。

4

1 回答 1

2
  1. 使用 fruitsbought.csv 示例创建外部表(id 只是示例,...- 表示表中的其余列):

    CREATE EXTERNAL TABLE fruitsboughexternal ( id INT, .....
    mydate STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION 'somelocationwithfruitsboughtfile/';

  2. 创建带有日期分区的表

CREATE TABLE fruitsbought(id INT, .....) PARTITIONED BY (year INT, month INT, day INT) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';

  1. 将数据导入到 fruitsbought 表,分区参数必须在 select 中最后(当然 mydate 必须是 impala 理解的格式,如 2014-06-20 06:05:25)

INSERT INTO fruitsbought PARTITION(year, month, day) SELECT id, ..., year(mydate), month(mydate), day(mydate) FROM fruitsboughexternal;

于 2014-06-20T11:26:39.770 回答