假设我有一个文件“fruitsbought.csv”,其中包含许多包含日期字段的记录。
是否可以通过基于该文本文件创建“fruits”表来“分区”以获得更好的性能,同时创建一个分区,其中fruitsbought.txt中与该分区匹配的所有行,比如说,如果我想是不是按年月月来创建?
或者我是否必须作为单独过程的一部分,为每年创建一个目录,然后将当年筛选出的相应“.csv”文件放入 HDFS 上的目录结构中,然后再创建表黑斑羚壳?我听说您可以创建一个空表,设置分区,然后使用恰好包含该记录所在分区的“插入”语句。虽然在我目前的情况下,我已经有一个“fruitsbought.csv”,其中包含我想要的每条记录,我喜欢如何将其放入表格中(尽管它没有 parititionig)。
我是否必须开发一个单独的过程来将一个文件预拆分为在正确分区下排序的多个文件? (一个文件非常非常大)。
最佳答案
使用fruitsbought.csv示例创建外部表(id只是示例,...-表示表中的其余列):
CREATE EXTERNAL TABLE fruitsboughexternal ( id INT, .....<br/> mydate STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION 'somelocationwithfruitsboughtfile/';
创建按日期分区的表
CREATE TABLE fruitsbought(id INT, .....)
PARTITIONED BY (year INT, month INT, day INT)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
- 导入数据到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;
关于impala - 有没有一种方法可以使用 Impala 对现有文本文件进行分区,而无需将文件预先分割到分区目录中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24271163/