假设我有一个文件“fruitsbought.csv”,其中包含许多包含日期字段的记录。
是否可以通过基于该文本文件创建“fruits”表来“分区”以获得更好的性能,同时创建一个分区,其中fruitsbought.txt中的所有行都匹配该分区,如果我想要按年份和月份来创建?
或者我必须作为单独进程的一部分,为每年创建一个目录,然后将在该年份过滤掉的相应“.csv”文件放入HDFS上的目录结构中,然后再创建表格帕拉 - 壳?
我听说你可以创建一个空表,设置分区,然后使用碰巧包含该记录所在分区的“插入”语句。虽然在我目前的情况下,我已经有一个单独的“fruitsbought.csv”,其中包含我想要的所有记录,我喜欢如何将它变成一张表(尽管它没有parititionig)。
我是否必须开发一个separte进程,将一个文件预先分割为在正确分区下排序的多个文件? (一个文件非常大)。
答案 0 :(得分:2)
使用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 ',';
INSERT INTO fruitsbought PARTITION(year, month, day) SELECT id, ..., year(mydate), month(mydate), day(mydate) FROM fruitsboughexternal;