我正在BigQuery中试用新的Procedures。我有3个程序
PROC1
BEGIN
CREATE TEMP TABLE tempTab AS
SELECT DISTINCT station_id, name FROM `powerful-decker-249310.Views.Stations` LIMIT 1000;
END
PROC2
BEGIN
SELECT * FROM tempTab;
END
PROC3
BEGIN
CALL `powerful-decker-249310.Procedures.PROC1`();
CALL `powerful-decker-249310.Procedures.PROC2`();
END
使用Google.Cloud.BigQuery.V2,我正在尝试执行CALL
powerful-decker-249310.Procedures.PROC3`((;
var resultsOptions = new GetQueryResultsOptions { Timeout = new TimeSpan(0, Timeout, 0) };
var queryOptions = new QueryOptions{ UseLegacySql = false };
queryOptions.DestinationTable = bqClient.GetTable("powerful-decker-249310","Tables", "StationsTmp").Reference;
results = bqClient.ExecuteQuery(query, parameters: null, queryOptions: queryOptions, resultsOptions: resultsOptions);
它抛出了一个异常
configuration.query.destinationTable不能为脚本设置
如果我注释掉queryOptions.DestinationTable,它会抛出
查询没有目标表的
如何修复此问题?
通过迁移到测试版驱动程序解决了此问题。但我面临另一个问题。即使包装过程返回多个结果集,驱动程序也只返回最终结果集。我向谷歌提出了一个问题,他们承认这是底层API的问题,并要求提出一个功能请求。https://github.com/googleapis/google-cloud-dotnet/issues/3772
脚本总是能够输出多个结果集,这就是为什么设置单个目标表不起作用的原因。
如果您可以完全控制您的过程,那么您可以将所有数据集输出到持久表中,然后删除它们,或者使它们变为短暂的(通过设置expiration_timestamp(并将它们单独保留。