【发布时间】:2022-01-17 03:24:00
【问题描述】:
我正在对大约 120 个表进行一系列计算。
算法:读取最终表,找到 where day=something 并将结果附加到现有表中
For table2 in tablearray
{
query = "SELECT * " +
" FROM (SELECT * FROM tablefinal where day=someday) AS tmp " +
"WHERE NOT EXISTS (" +
"SELECT * FROM table2 t2 where t2.user_id=tmp.user_id AND t2.day=tmp.day);"
then append rows to table2...
QueryJobConfiguration queryConfig =
QueryJobConfiguration.newBuilder(query).setDestinationTable(destinationTable)
.setWriteDisposition(JobInfo.WriteDisposition.WRITE_APPEND).build();
....
bigquery.query(queryConfig);
}
使用 120 表仍然使用 finaltable 作为数据源。
问题。耗时太长。像 700 秒。 540 秒后,谷歌功能消失。 结果是对的,就是太慢了……
问题如何加快速度(这些表很小~100K 行)? 我可以并行发送一堆查询吗?
【问题讨论】:
-
是同步计算吗?或者您可以异步执行计算吗? (例如,如果您使用 Cloud Scheduler 运行您的函数,它是异步的,在用户操作之外并等待答案)
-
纪尧姆,感谢您的回答。我相信它是异步的,我可以独立运行这些查询。
标签: java google-bigquery google-cloud-pubsub