如何在没有分区的情况下将数据附加到现有的配置单元表中

5lhxktic  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(248)

我已经创建了包含过去10年历史股票数据的配置单元表。从现在起,我每天都要添加数据。
我想创建基于日期的分区,但它会导致许多分区,大约3000个分区加上每个新日期一个新分区,我认为这是不可行的。
有谁能建议一种最佳的方法来存储表中的所有历史数据,并在新数据出现时附加新数据。

pkln4tw6

pkln4tw61#

你可以使用这个命令

LOAD DATA LOCAL INPATH '<FILE_PATH>' INTO TABLE <TABLE_NAME>;

它将在Map到表名的hdfs目录下创建新文件。即使没有太多的分区,你仍然会遇到太多的文件问题。
您需要定期执行以下操作:
创建阶段表
通过运行load命令将数据从目标表移动到stage表
您可以在目标表中运行insert命令,从stage表中进行选择
现在它将加载文件数等于还原数的数据。
您可以删除阶段表
您可以定期运行此进程(可能一个月一次)。

dojqjjoe

dojqjjoe2#

对于每个分区表,如何分区表的决定主要取决于查询表的方式。另一个需要考虑的问题是每个分区将有多少数据,因为分区不应该太小。每一个都应该至少有一个hdfs块那么大的绝对最小值,否则会占用太多的目录。
也就是说,我不认为3000个分区会是个问题。在以前的工作中,我们有一个每小时一个分区的巨大表,每小时大约20GB,我们有6个月的数据,所以大约有4000个分区,它工作得很好。
在我们的例子中,大多数人最关心的是最后一周和最后一天。我建议你首先研究一下这个表是如何使用的,也就是说,这10年是全部使用的,还是大部分是最新的数据?
作为第二件事,研究数据有多大,考虑它是否会随着新的负载而增长,看看每个分区会有多大。
一旦你确定了这两点,你就可以做一个决定,你可以只使用每天的分区(这可以很好,3000个分区也不错),或者你可以每周或者每月做一次。

相关问题