Configuration

POSIX Environment RC

Vonng Tools Github Repo

GOODPS

ODPS SQL Driver for golang

MaxCompute(ODPS) 非官方Golang SDK

作者:墨航

当前版本:0.0.3


提供了了与Go标准库database/sql兼容的ODPS SQL执行查询接口。采用原生HTTP API。

Install

go get github.com/Vonng/goodps

Usage

因为我只需要执行SQL的功能,最多加上一个下载上传,所以其他乱七八糟的功能看情况慢慢加吧。

连接串

这里因为Go要求使用一个字符串表示连接信息,通常就是数据库的URL。所以这里ODPS连接串的格式是以endpoint为基础URL,将access_id,access_key,project分别作为Username,Password,QueryParam填入,拼成的一整个URL。

例如,办公网的endpoint是http://service-corp.odps.aliyun-inc.com/api,那么应当使用的ODPS URL格式就是:http://<access_id>:<access_key>@service-corp.odps.aliyun-inc.com/api?curr_project=<project>

这里给一个测试用例,其他例子test里都有(或者慢慢补吧)

	// cred is my secret, define your own credential somewhere
	db, err := sql.Open("goodps", cred)
	if err != nil {
		t.Error(err)
	}

	const sql = `SELECT
					cast('1'                   AS BIGINT)  AS a,
					cast(TRUE                  AS BOOLEAN) AS b,
					cast('hi'                  AS STRING)  AS c,
					cast('3.14'                AS DOUBLE)  AS d,
					cast('2017-11-11 03:12:11' AS DATETIME) AS e,
					cast('100.01' AS DECIMAL)  AS f;`
	rows, err := db.Query(sql)
	if err != nil {
		t.Error(err)
		return
	}
	defer rows.Close()

	for rows.Next() {
		var (
			a Bigint
			b Boolean
			c String
			d Double
			e Datetime
			f Decimal
		)

		err := rows.Scan(&a, &b, &c, &d, &e, &f)
		if err != nil {
			t.Error(err)
		}

		if a.V != 1 {
			t.Errorf("bigint a should be 1, got %d", a.V)
		}

		if b.V != true {
			t.Errorf("boolean b should be true, got %v", b.V)
		}

		if c.V != "hi" {
			t.Errorf("string c should be `hi`, got `%s`", c.V)
		}

		if d.V != 3.14 {
			t.Errorf("double d should be 3.14, got `%v`", d.V)
		}

		if e.V.Format(StdTimeFmt) != "2017-11-11 03:12:11" {
			t.Errorf("datetime e should be `2017-11-11 03:12:11`, got `%s`", e.V)
		}

		if f.V != 100.01 {
			t.Errorf("decimal f should be `100.01`, got `%v`", f.V)
		}
	}

	if err := rows.Err(); err != nil {
		t.Error(err)
	}

很多和Project,Instance,Table相关的API虽然包装了一些,但因为还不稳定,就不写文档了。