【发布时间】:2015-12-19 10:49:38
【问题描述】:
我创建了包含过去 10 年历史股票数据的配置单元表。从现在开始,我必须在每日基础上附加数据。
我想根据日期创建分区,但它导致许多分区大约 3000 加上每个新日期的新分区,我认为这是不可行的。
谁能提出一种将所有历史数据存储在表中并在新数据出现时附加的最佳方法。
【问题讨论】:
我创建了包含过去 10 年历史股票数据的配置单元表。从现在开始,我必须在每日基础上附加数据。
我想根据日期创建分区,但它导致许多分区大约 3000 加上每个新日期的新分区,我认为这是不可行的。
谁能提出一种将所有历史数据存储在表中并在新数据出现时附加的最佳方法。
【问题讨论】:
对于每个分区表,如何分区表的决定主要取决于您将如何查询表。 另一个考虑因素是每个分区将拥有多少数据,因为分区不应该太小。每一个都至少应至少与一个 HDFS 块一样大,否则会占用太多目录。
这就是说,我认为 3000 个分区不会有问题。在之前的工作中,我们有一个巨大的表,每小时有一个分区,每小时大约 20GB,我们有 6 个月的数据,所以大约有 4000 个分区,它工作得很好。
在我们的案例中,大多数人最关心上周和最后一天。 我建议您首先研究该表将如何使用,也就是说,是使用所有 10 年的数据,还是仅使用最近的数据?
第二件事,研究数据有多大,考虑它是否会随着新的负载而增长,看看每个分区会有多大。
一旦确定了这两点,你就可以做出决定,你可以只使用每日分区(可以,3000 个分区也不错),或者你可以每周或每月进行。
【讨论】:
你可以使用这个命令
LOAD DATA LOCAL INPATH '<FILE_PATH>' INTO TABLE <TABLE_NAME>;
它将在映射到表名的 HDFS 目录下创建新文件。即使没有太多的分区,你仍然会遇到文件太多的问题。
您需要定期这样做:
您可以定期运行此过程(可能每月一次)。
【讨论】: