BigQuery数据集位置上的奇怪行为



我使用BigQuery和VM实例注意到Google Cloud Compute引擎中的一种奇怪行为。

我有一个将数据流到bigquery的Java过程。

我希望通过为BigQuery数据集和VM实例选择同一区域,但我的测试表现出意外的行为。

case1:在US-CENTRAL1-A上的VM和数据集位置插入bigquery响应的平均时间:150毫秒

案例2:欧洲 - west1-c和数据集位置的VM 插入大Query响应的平均时间:700毫秒

case3:在US-CENTRAL1-A和DATASET位置eu 上的VM插入大Query响应的平均时间:1200毫秒

案例4:欧洲 - west1-c和数据集位置的VM eu 平均插入BigQuery响应时间:1700毫秒

我可以理解case2和case3中的性能下降,但是案例4?

测试表明,如果BigQuery数据集位置是"欧盟"的性能,即使VM区域为欧洲 - west1-c。

我的结论是:切勿在欧盟使用BigQuery(当然,除了数据位置的要求外!

)!

我的注意事项有什么问题?

感谢您的报告。

看起来帖子中提到的延迟包括两个table.get() tabledata.insertall()。延迟差主要由表引起。get()。

我们知道,呼叫元数据相关的API(例如表。Get)比我们慢。它是由一些现有的基础架构限制引起的,不幸的是,它有短期修复。但是我们正在积极进行一些后端更改,以最大程度地减少长期的潜伏期差异。

您可能会考虑一些减轻这种情况的事情:

  • 提前创建您的桌子,因此无需每次插入之前检查表
  • 如果是每天的表,也许可以尝试使用分区?然后,您只需要创建一次表即可。https://cloud.google.com/bigquery/docs/partitioned-tables https://cloud.google.com/bigquery/docs/querying-partition-partitioned-tables
  • 如果新创建的表具有与基表相同的架构,请尝试流到模板表。https://cloud.google.com/bigquery/streaming-data-into-bigquery#template-tables

最新更新