1

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) を取得できれば、ジョブが終了 (「完了」) するのを待つことができるはずですが、csharp API でその参照を取得する方法が見つかりません。

JobsResource.InsertMediaUpload からジョブ参照を取得することは可能ですか? (insert.Body.JobReference は null です)

または、ローカル ファイルを bigquery テーブルにアップロードする別の方法はありますか?

4

1 に答える 1

1

すべてのロード ジョブに対して、独自のジョブ参照を渡すことをお勧めします。これにより、ネットワークで問題が発生した場合に、ジョブの状態を知ることができます。ジョブ参照はプロジェクト内で一意である必要がありますが、これは乱数を作成するか、現在の時間を使用することで非常に簡単に行うことができます。

于 2013-10-29T17:57:20.257 に答える