有没有办法使用Impala对现有文本文件进行分区而不将文件预分割为分区目录?

时间:2014-06-17 18:45:44

标签: impala

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

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

或者我必须作为单独进程的一部分,为每年创建一个目录,然后将在该年份过滤掉的相应“.csv”文件放入HDFS上的目录结构中,然后再创建表格帕拉 - 壳?

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

我是否必须开发一个separte进程,将一个文件预先分割为在正确分区下排序的多个文件? (一个文件非常大)。

1 个答案:

答案 0 :(得分:2)

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

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

  2. 在日期创建包含分区的表

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

    1. 将数据导入到fruitsbought表中,分区参数必须是最后的选择(当然mydate必须以impala的形式理解,如2014-06-20 06:05:25)
    2. INSERT INTO fruitsbought PARTITION(year, month, day) SELECT id, ..., year(mydate), month(mydate), day(mydate) FROM fruitsboughexternal;