一堆Avro文件中大约有11年的数据。我想按每行的日期进行分区,但是从文档看来,我不能,因为有太多不同的日期吗?
集群是否对此有所帮助?我的数据的自然簇键仍然会有一些4000天以上的数据。
答案 0 :(得分:0)
我看到的两种解决方案:
1) 根据您的列,将表分片(每年)与时间分区结合起来。我从来没有亲自测试过,但是应该工作,因为每个分片在BQ中都被视为一个新表。 这样一来,您就可以轻松地使用一个通配符/变量来解决分片和分区。
2) 一个不错的解决方法是用您要分隔的日期字段创建一个额外的列。 对于早于9年的每个数据条目(例如:DATE_DIFF(current_date(),DATE('2009-01-01'),YEAR)),将日期格式设置为特定月份的第一天。
因此,您可以再创建29年的数据。
请注意,您无法使用日期过滤器基于该列进行过滤,例如在DataStudio中。但是对于查询它是有效的。
最佳托马斯
答案 1 :(得分:0)
当前,仅文档分区表支持doc集群。将来可能会支持非分区表。
您可以每年将旧数据放在单个分区中。 您需要在表中添加额外的列以进行分区。
说,2011年的所有数据都将进入分区20110101。 对于较新的数据(2019年),每个日期可以有单独的分区。
这不是解决问题的干净方法,但是使用此方法,可以通过使用群集提供最小的表扫描来进一步优化。
答案 2 :(得分:0)
按周/月/年而不是天进行分区可能很有意义-取决于您每天有多少数据。
在这种情况下,请参阅:
答案 3 :(得分:-1)
4,000个每日分区仅是10年以上的数据。如果您需要一个具有10年以上数据的“表”,一种解决方法是使用视图:
这将产生一个具有4,000多个分区的视图,业务用户可以查询该分区而不必担心他们需要使用哪个版本的表或自己合并这些表。