BigQuery:写后读取一致性(流插入)



正如标题所述,BigQuery在流插入方面的一致性保证是什么?在使用流式插入插入行后,我是否能够保证一致的读取?

这取决于您正在使用的流API和您期望运行的DML:

  • 当使用传统流API时;在BigQuery成功确认表Data.insertAll请求之后,数据可立即用于使用标准SQL查询的实时分析
  • 使用新的Storage Write API,行为是可配置的:根据您的要求,您可以在默认流、提交模式、挂起模式和缓冲模式之间进行选择:
    • 提交模式和默认流:";记录可在您将它们写入流时立即读取";。不同的是,默认流没有一次保证,因此可能会有更高的吞吐量
    • 挂起模式:";在提交流之前,记录将以挂起状态进行缓冲。一旦一个流被提交,写入该流的所有数据都可用于读取"数据流">
    • 缓冲模式:";在刷新流之前,会缓冲记录。刷新使光标前进到指定的偏移量,并使到达该偏移量的所有记录可见
  • 然而,";最近通过使用流(tabledata.insertall方法或Storage Write API(写入表的行不能用UPDATE、DELETE或MERGE语句来修改;以及";某些最近流式传输的行可能在几分钟内无法用于表复制。在极少数情况下,这可能需要长达90分钟的时间
  • "由于BigQuery的流式API是为高插入率而设计的,因此当与流式系统交互时,对底层表元数据的修改最终是一致的

因此,一般来说,当使用默认流时,在确认的流插入后,数据可以立即用于读取查询。

是和否!!

  • 是的,如果您在流插入后立即获得数据,则读取是一致的
  • 如果您使用分区,则不会,因为流数据存储在缓冲区中,BigQuery可能需要长达2小时的时间才能将数据存储在正确的分区中

因此,这取决于您如何使用数据。

最新更新