BIGQUERY Golang客户获取项目列表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BIGQUERY Golang客户获取项目列表相关的知识,希望对你有一定的参考价值。

如何使用我提供的serviceaccount密钥获取golang云客户端可以访问的项目列表?似乎有一个API可用:https://cloud.google.com/bigquery/docs/reference/rest/v2/projects/list

但是,Google Cloud客户端库不会公开它。

我的代码看起来像这样

client, err := bigquery.NewClient(ctx, conn.ProjectID, option.WithServiceAccountFile(fname))

我想枚举该客户端可以访问的项目列表。

答案

下面的例子可以给你一个想法 - 它是沙盒,是我们的BQ UI的一部分


enter image description here


func mainReturn() interface{} {
    bigqueryService, err := getBigqueryService() ; if(err != nil) {return "ERROR"}
    err2 := getProjects(bigqueryService)         ; if(err2 != nil) {return "ERROR"}
    return "OK"
}

func getProjects(bigqueryService *bigquery.Service)(error) {
    var buf bytes.Buffer
    var pagetoken string = ""
    ind := 0
    for {
        call := bigqueryService.Projects.List()
        if len(pagetoken) > 0 {call = call.PageToken(pagetoken)}

        list, err := call.Do() ; if err != nil {return err}

        if len(pagetoken) == 0 {
            xFprintf(&buf, "TotalItems: %v
", list.TotalItems)
        }

        for _, project := range list.Projects {
            xFprintf(&buf, "========= Projects %v ==============
", ind)
            xFprintf(&buf, "Id: %v
", project.Id)
            xFprintf(&buf, "Kind: %v
", project.Kind)
            project := project.Id
            del := strings.LastIndex(project, ".")
            if del != -1 {project = project[del+1:]}
            ind++;
        }

        pagetoken = list.NextPageToken ; if len(pagetoken) == 0 {break}
    }

    xPrintln(buf.String())
    return nil
}

请忽略一些有趣的功能,如xFprintf - 这只是我们沙箱去的方式

以上是关于BIGQUERY Golang客户获取项目列表的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery - 获取 1000000 条记录并使用 goLang 对数据进行一些处理

google-bigquery 如何使用 https 获取数据集列表?

使用 python 和 BigQuery API 获取 BigQuery 数据集中的表列表

使用 Golang 将嵌套数据插入 BigQuery

尝试从 golang 广告读取/运行对 bigquery 的查询被拒绝访问:BigQuery BigQuery:未找到具有 Google Drive 范围的 OAuth 令牌

如何获取为 Google BigQuery 连接器指定的客户端 ID