【发布时间】:2016-05-01 18:21:58
【问题描述】:
我有一个包数据,其中一些字段如下:
packageid-->string
status--->string
status_type--->string
scans--->record(repeated)
scanid--->string
status--->string
scannedby--->string
每天,我有 100 000 个包裹的数据。每天的总包数据大小变为 100 MB(大约),1 个月变为 3GB。对于每个包,可以进行 3-4 次更新。那么每次包更新(例如,只是状态字段的更改)时,我是否必须覆盖包表?
假设我在表中有 3 个包的数据,现在第二个包的更新来了,我是否必须覆盖整个表(删除和添加整个数据需要 2 个事务每个包更新)?对于 100 000 个包裹,总交易量将为 10^5 * 10^5 * 2/2。
还有其他方法可以在不覆盖表的情况下进行原子更新吗? (如果表包含 100 万个条目,然后包更新来了,那么覆盖整个表将是一个开销。)
【问题讨论】:
-
您知道 BQ 在设计上是只能附加的吗?这会改变你的方法吗?您的数据不是基于事件的,例如更新实际上是一个新事件吗?
-
嗨,奔腾,我的数据是基于事件的。对于包 id 说。 140654070001 我的状态为待处理,然后在下一次事件更新中,状态更改为完成。现在为此我有一个新行,具有相同的数据,只是一个字段更改。因此,每当对现有软件包进行任何更新时,我都会删除重复项。你是说我应该继续追加而不重复删除吗?这对我来说似乎也很好,但后来我的关注点转移到了数据存储上。会有很多冗余。
-
我们拥有相同的东西,并且我们保留实体生命周期的所有版本。存储成本低。还是对你来说很高?
标签: sql-update google-bigquery overwrite