【发布时间】:2019-05-13 13:27:32
【问题描述】:
我有一个功能,每分钟查询一次 Google BigQuery,我想使用 BigQuery 结果更新另一个关系数据库中的行。
我试图做这样的事情:
BEGIN TRANSACTION
UPDATE MyTable SET MyField = BigQueryResult_Row1_MyField WHERE a_id = BigQueryResult_Row1_a_id
UPDATE MyTable SET MyField = BigQueryResult_Row2_MyField WHERE a_id = BigQueryResult_Row2_a_id
UPDATE MyTable SET MyField = BigQueryResult_Row3_MyField WHERE a_id = BigQueryResult_Row3_a_id
.
.
.
UPDATE MyTable SET MyField = BigQueryResult_RowN_MyField WHERE a_id = BigQueryResult_RowN_a_id
COMMIT TRANSACTION
这是每个 bigquery 行的 UPDATE 语句。我不能将单个 UPDATE 语句与 SELECT 语句结合使用,因为数据来自 BigQuery,而不是来自另一个数据库表。
尝试执行此事务,我得到超时错误,所以我想问:这是一次进行数百次更新的正确方法吗?在某些情况下,一次甚至可能有上千次更新。我怎样才能以更好的方式做到这一点?
【问题讨论】:
-
为什么不将数据插入临时表,使用
select更新,然后删除临时表? -
什么样的超时错误?
标签: sql tsql transactions sql-update