Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 4.0 将CSV上传到C中的BigQuery#_C# 4.0_Google Bigquery - Fatal编程技术网

C# 4.0 将CSV上传到C中的BigQuery#

C# 4.0 将CSV上传到C中的BigQuery#,c#-4.0,google-bigquery,C# 4.0,Google Bigquery,基本上,我想做的是将作业提交到BigQuery(异步),在提交后检查作业状态,并打印出相应的状态信息或错误信息。我创建了一个框架,如下所示。但我需要以下方面的帮助: GoogleApiException:调用“BigQueryService.Jobs.Get(jobReference.ProjectId,jobReference.JobId).Execute()”时未找到作业异常。我的直觉是这份工作没有正确提交,但我不知道如何正确提交 我应该如何处理GoogleApiExceptions 第一步

基本上,我想做的是将作业提交到BigQuery(异步),在提交后检查作业状态,并打印出相应的状态信息或错误信息。我创建了一个框架,如下所示。但我需要以下方面的帮助:

  • GoogleApiException:调用“BigQueryService.Jobs.Get(jobReference.ProjectId,jobReference.JobId).Execute()”时未找到作业异常。我的直觉是这份工作没有正确提交,但我不知道如何正确提交

  • 我应该如何处理GoogleApiExceptions

  • 第一步:创建一个作业(将CSV文件上传到BigQuery),返回JobReference

            TableReference DestTable = new TableReference();
            DestTable.ProjectId = project;
            DestTable.DatasetId = dataset;
            DestTable.TableId = tableId;
    
            Job Job = new Job();
            JobConfiguration Config = new JobConfiguration();
            JobConfigurationLoad ConfigLoad = new JobConfigurationLoad();
    
    
            ConfigLoad.Schema = schema;
            ConfigLoad.DestinationTable = DestTable;
            ConfigLoad.Encoding = "ISO-8859-1";
            ConfigLoad.CreateDisposition = "CREATE_IF_NEEDED";
            ConfigLoad.WriteDisposition = createDisposition;
            ConfigLoad.FieldDelimiter = delimiter.ToString();
            ConfigLoad.AllowJaggedRows = true;
            Config.Load = ConfigLoad;
            Job.Configuration = Config;
    
            //set job reference (mainly job id)
            JobReference JobRef = new JobReference();
            JobRef.JobId = GenerateJobID("Upload");
            JobRef.ProjectId = project;
            Job.JobReference = JobRef;
    
            using(FileStream fileStream = new FileStream(filePath,FileMode.Open)){
                var JobInfo = BigQueryService.Jobs.Insert(Job,project,fileStream,"text/csv");//application/octet-stream
                JobInfo.UploadAsync();
                Console.WriteLine(JobInfo.GetProgress().Status.ToString());
            }
            return JobRef;
    
    然后,使用第一步返回的JobReference中的projectId和jobId提取作业状态:

         while (true)
            {
                  pollJob = BigQueryService.Jobs.Get(jobReference.ProjectId, jobReference.JobId).Execute();
                    i = 0;
                    Console.WriteLine("Job status" + jobReference.JobId + ": " + pollJob.Status.State);
                    if (pollJob.Status.State.Equals("DONE"))
                    {
                        return pollJob;
                    }
                    // Pause execution for pauseSeconds before polling job status again,
                    // to reduce unnecessary calls to the BigQuery API and lower overall
                    // application bandwidth.
                    Thread.Sleep(pauseSeconds * 1000);
    
            }
    

    几乎没有任何有用的示例代码显示如何将本地CSV文件上载到Bigquery表。我终于找到了工作。这可能不是最好的解决方案,但至少是可行的。这是可以改进的

    private JobReference JobUpload(string project, string dataset, string tableId, string filePath, TableSchema schema, string createDisposition, char delimiter)
        {
    
            TableReference DestTable = new TableReference();
            DestTable.ProjectId = project;
            DestTable.DatasetId = dataset;
            DestTable.TableId = tableId;
    
            Job Job = new Job();
            JobConfiguration Config = new JobConfiguration();
            JobConfigurationLoad ConfigLoad = new JobConfigurationLoad();
    
    
            ConfigLoad.Schema = schema;
            ConfigLoad.DestinationTable = DestTable;
            ConfigLoad.Encoding = "ISO-8859-1";
            ConfigLoad.CreateDisposition = "CREATE_IF_NEEDED";
            ConfigLoad.WriteDisposition = createDisposition;
            ConfigLoad.FieldDelimiter = delimiter.ToString();
            ConfigLoad.AllowJaggedRows = true;
            ConfigLoad.SourceFormat = "CSV";
            Config.Load = ConfigLoad;
            Job.Configuration = Config;
    
            //set job reference (mainly job id)
            JobReference JobRef = new JobReference();
            JobRef.JobId = GenerateJobID("Upload");
            JobRef.ProjectId = project;
            Job.JobReference = JobRef;
    
            using(FileStream fileStream = new FileStream(filePath,FileMode.Open)){
                JobsResource.InsertMediaUpload InsertMediaUpload = new  JobsResource.InsertMediaUpload(BigQueryService,Job,Job.JobReference.ProjectId,fileStream,"application/octet-stream");
                var JobInfo = InsertMediaUpload.UploadAsync();
                Console.WriteLine(JobInfo.Status);
                while (!JobInfo.IsCompleted)
                {
                   //wait for the job to be activated and run 
                    Console.WriteLine(JobInfo.Status);
                }
            }
            return JobRef;
        }
    
    在此之后,您实际上可以使用返回的JobRef来获取作业状态,这与我们使用Java API所做的几乎相同:

    while(true)
    {
         PollJob = BigQueryService.Jobs.Get(jobReference.ProjectId, jobReference.JobId).Execute();
    
         Console.WriteLine("Job status" + jobReference.JobId + ": " + PollJob.Status.State);
         if (PollJob.Status.State.Equals("DONE"))
         {
           return PollJob;
         }
    }
    

    如果您发布了您尝试的java端口,以便更熟悉java方式的人可以帮助您,则最好使用此页面上的示例以及此官方文档页面上的所有链接: