定期更新的bigquery数据库中的记录顺序

nit*_*ous 3 google-bigquery

我将在bigquery上维护数据库的本地副本.我将使用API​​和tabledata:list.这个数据库不是我自己的,并且由维护者定期更新,附加新数据(比如说每小时).

  1. 首先,我可以假设当附加此数据时,它肯定会被添加到数据库的末尾吗?

  2. 现在,让我们假设当前数据库有1,000,000行,我现在通过分页tabledata:list下载所有这些行.另外,假设数据库在中途更新(10,000行).通过使用页面令牌,我可以放心,当我按照它们在数据库中的顺序启动时,我只会下载存在的1m行吗?

  3. 最后,现在让我说我来更新我的副本.如果我使用startIndex为1,000,000启动tabledata:list并使用maxResults为1000,那么我将获得包含我期望的更新数据的10个页面吗?

我想所有这些问题归结为bigquery是否尊重数据的顺序,tabledata:list是否使用此顺序,以及是否保证附加数据遵循先前的数据.

由于有一个列的值是唯一的,我可以执行一个简单select count(1) from table的获取表的长度,我当然可以通过比较我的本地数据库的长度和远程数据库的长度来检查我的本地副本是否完整如果以上都没有保证,并且我的数据中有漏洞,那么补救是不切实际的,因为主键不是顺序的(否则我只能填写缺失的行)并且数据库非常大.

Jor*_*ani 6

  1. 当您附加数据时,我们将追加到表数据列表的末尾,但是,bigquery可能会定期合并数据,这不符合排序.我们一直在讨论能够保留排序,或者至少有一种方法来访问最新的数据,但这还没有实现或设计.如果它对您而言非常重要,请告知我们,我们会相应地对其进行优先排序.

  2. 如果您使用页面令牌,则可以确保稳定列表.如果在分页数据的过程中更新表,您仍然只能在创建页面标记时看到表中的数据.请注意,因此,页面令牌仅在24小时内有效.

  3. 只要在更新表后没有发生合并,这应该有效.

您可以通过调用tables.get来获取表中的行数,这通常比运行查询更简单,更快捷.