有没有一种方法可以用impala对现有的文本文件进行分区,而不必将文件预先拆分到分区目录中?

7z5jn7bk  于 2021-06-26  发布在  Impala
关注(0)|答案(1)|浏览(225)

假设我有一个文件“fruitsbound.csv”,其中包含许多包含日期字段的记录。
在创建一个分区时,是否可以通过基于该文本文件创建“fruits”表来“分区”以获得更好的性能,同时创建一个分区,其中将创建fruitsbought.txt中与该分区匹配的所有行(例如,如果我想按年份和月份执行)?
或者,在impala shell中创建表之前,我是否必须作为一个单独过程的一部分,为每年创建一个目录,然后将该年筛选的相应“.csv”文件放入hdfs上的目录结构中?
我听说您可以创建一个空表,设置分区,然后使用“insert”语句,这些语句恰好包含该记录进入的分区。尽管在我目前的例子中,我已经有了一个“fruitsbought.csv”,它包含了我想要的每一条记录,我喜欢这样的方式,我可以把它放到一个表中(尽管它没有paritionig)。
我是否必须开发一个separte进程来将一个文件预分割成在正确分区下排序的多个文件(一个文件很大)。

x8diyxa7

x8diyxa71#

使用fruitsbought.csv示例创建外部表(id只是示例,…-表中其他列的平均值): CREATE EXTERNAL TABLE fruitsboughexternal ( id INT, ..... 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 ','; 将数据导入到fruitsbough表,分区参数必须在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;

相关问题