【问题标题】:Can't get golang and the package bigquery to work for loading to big query无法让 golang 和包 bigquery 用于加载到大查询
【发布时间】:2018-10-26 15:48:16
【问题描述】:

我试图弄清楚如何让一个简单的 bq load 命令与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.
    }
}

【问题讨论】:

    标签: go google-bigquery gcloud


    【解决方案1】:

    恐慌可能来自对作业变量的零指针引用。

    我建议包括log.Fatal(err)

    在您的所有 err!= nil 块中。

    这将帮助您更深入地了解未正确分配工作的原因。

    当您在 go log 中编写类似这样的脚本时。Fatal 是退出程序并准确打印问题所在的好方法。

    使用 go,您总是试图将错误冒泡到堆栈中,以确定代码是否应该继续执行,是否可以恢复,或者它是否只是一个致命的事情,您应该结束程序。

    在此处查看有关日志记录包的更多信息:https://golang.org/pkg/log/

    如果您刚刚开始学习,请访问这里的一些很棒的资源,可以帮助您了解如何设计不同类型的程序。

    https://github.com/dashpradeep99/https-github.com-miguellgt-books/tree/master/go

    最好的,

    克里斯托弗

    【讨论】:

    • 嘿@christopher 非常感谢!这是一个巨大的帮助。在我试图 log.Print(err) 之前,这并没有真正给我同样的东西。对不起,现在也只是学习 golang。这实际上可能已经为我解决了。看起来是权限错误
    猜你喜欢
    • 2018-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多