在Golang中无法使用ODBC连接到Dremio

oymdgrw7  于 2023-01-15  发布在  Go
关注(0)|答案(1)|浏览(134)

我是Golang的新手,我尝试在Golang中使用ODBC连接到Dremio,包括Dremio主机、端口、用户名和密码。
2022年4月19日17:36:42用户名和密码缺失
退出状态1

import (
    "database/sql"
    "fmt"
    "gographqlservice/graph/model"
    "log"

    _ "github.com/pinpt/go-dremio/driver"
)

const (
    host     = "dremio.xyz.abc.com"
    user     = "user1"
    password = "user_password"
    port     = 32010
)
    
func GetAsset(id string) (*model.Asset, error) {

    drminfo := fmt.Sprintf("host=%s port=%d user=%s password=%s sslmode=disable",
        host, port, user, password)

    db, err := sql.Open("dremio", drminfo)

    if err != nil {
        log.Fatal("error occurred")
        log.Fatal(err)
    }

    rows, err := db.Query("SELECT * FROM space.xyz.\"assets\" WHERE ASSET_ID = ?", id)
    if err != nil {
        log.Fatal(err)
    }

    var asset model.Asset

    defer rows.Close()
    for rows.Next() {

        // some code goes here
    }

    err = rows.Err()
    if err != nil {
        log.Fatal(err)
    }

    defer db.Close()

    return &asset, err
}
ws51t4hk

ws51t4hk1#

看起来您正在使用“Pinpoint”中的驱动程序代码,该代码记录在以下位置:https://pkg.go.dev/github.com/pinpt/go-dremio#section-readme
您可以看到它们的连接字符串应采用以下形式:

db, err := sql.Open("dremio", "https://user:pass@dremio.example.com")

您的代码格式如下:

drminfo := fmt.Sprintf("host=%s port=%d user=%s password=%s sslmode=disable",
    host, port, user, password)

要允许精确定位代码解析此连接字符串并提取用户名和密码,请尝试以下操作:

drminfo := fmt.Sprintf("http://%s:%s@%s",
        user, password, host)

您看到的错误消息来自Pinpoint代码中的以下行。在这种情况下,这意味着他们无法从提供的连接字符串中找出用户名。https://github.com/pinpt/go-dremio/blob/master/driver/driver.go#L187

if u.User == nil {
        return nil, fmt.Errorf("missing username and password")
    }

相关问题