无法让 golang 和包 bigquery 工作以加载到大查询

我想弄清楚如何获得一个简单的 bq 加载命令来使用https://godoc.org/cloud.google.com/go/bigquery#Table.LoaderFrom


手动运行它看起来像这样:


bq load --source_format=AVRO --ignore_unknown_values --replace=true mydataset.mytable gs://mybucket/table/*

在我的 golang 中使用 exec.Command() 成功运行它看起来像这样:


exec.Command("bq", "load", "--source_format=AVRO", "--ignore_unknown_values",

             "--replace=true", "mydataset.mytable",

             "gs://mybucket/table/*")

但是,在尝试加载和 job.wait 成功运行时,我无法让这个程序在没有分段错误的情况下运行它似乎在程序的 job.wait 行出现分段违规


package main


import (

    "context"

        "log"

        "cloud.google.com/go/bigquery"

)


func main(){

    ctx := context.Background()

    client, err := bigquery.NewClient(ctx, "my-project-id")

    if err != nil {

        // TODO: Handle error.

    }

    gcsRef := bigquery.NewGCSReference("gs://mybucket/table/*")

    gcsRef.SourceFormat = "AVRO"

    gcsRef.IgnoreUnknownValues = true

    // TODO: set other options on the GCSReference.

    ds := client.Dataset("mydataset")

    loader := ds.Table("mytable").LoaderFrom(gcsRef)

    // TODO: set other options on the Loader.

    job, err := loader.Run(ctx)

    if err != nil {

        // TODO: Handle error.

    }

    status, err := job.Wait(ctx) //seg faults right here

    if err != nil {

        // TODO: Handle error.

    }

    if status.Err() != nil {

        // TODO: Handle error.

    }

}


婷婷同学_
浏览 88回答 1
1回答

手掌心

恐慌可能来自对作业变量的 nil 指针引用。我建议包括一个log.Fatal(err)在你所有的err!= nil街区。这将帮助您更清楚地了解工作分配不正确的原因。当你在 go log 中编写像这样的脚本时。Fatal 是退出程序并准确打印问题所在的好方法。使用 go,你总是试图将错误冒泡到堆栈中,以确定代码是否应该继续执行,是否可以恢复,或者它是否只是一个致命的事情,你应该结束程序。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go