从C#调用过程时发生Bigquery错误



我正在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,我正在尝试执行CALLpowerful-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(并将它们单独保留。

相关内容

最新更新