我有一小段代码可以将 CSV 文件发送到 bigquery 表。CSV 文件位于本地 HD 上(不在 Google 云存储上)。
这是 csharp 代码的简化版本(使用 bigquery csharp API 的 2.1.5.0.122 版本)。
BigqueryService bq = someMethodToGetABigqueryServiceInstance();
JobConfigurationLoad loadJobCfg = new JobConfigurationLoad();
loadJobCfg.SourceFormat = "CSV";
.
.
.
Job job = new Job();
JobConfiguration config = new JobConfiguration();
config.Load = loadJobCfg;
job.Configuration = config;
FileStream fs = new FileStream(@"c:\temp\onecol.csv", FileMode.Open, FileAccess.Read, FileShare.Read);
JobsResource.InsertMediaUpload insert = bq.Jobs.Insert(job, projectId, fs, "application/octet-stream");
var progress = insert.Upload();
// wait for Google.Apis.Upload.UploadStatus.Completed
.
.
问题是当我收到 Completed 状态时,文件已上传,但数据尚未在目标表中(即:作业仍在运行)。
通常,如果我可以获得它的引用(或 ID),我应该能够等待作业完成('DONE'),但我找不到在 csharp API 中获取该引用的方法。
是否可以从 JobsResource.InsertMediaUpload 获取工作参考?(插入.Body.JobReference 为空)
还是有另一种方法可以将本地文件上传到 bigquery 表?