表格存储提供 Go 语言驱动(aliyun-tablestore-go-sql-driver),实现了 database/sql/driver 接口,支持通过标准 database/sql 包访问表格存储数据。
前提条件
已获取 AccessKey,RAM 用户需具备
"Action": "ots:SQL*"权限。已创建数据表和映射表,详见DDL 操作。
使用流程
步骤一:安装Go语言驱动
执行以下命令安装 Go 语言驱动:
go get github.com/aliyun/aliyun-tablestore-go-sql-driver步骤二:使用Go语言驱动直连
参数说明
使用 Go 语言驱动访问表格存储时,需要设置驱动名称和 DSN(数据源名称)。参数说明如下。
参数 | 说明 |
driverName | 表格存储 Go 语言驱动名称,固定取值为 |
dataSourceName | 表格存储数据源名称。格式为
其他常用配置项的说明详见配置项。 |
示例
import (
"database/sql"
_ "github.com/aliyun/aliyun-tablestore-go-sql-driver"
)
// 设置Go语言驱动名称和表格存储数据源名称。
db, err := sql.Open("ots", "https://access_key_id:access_key_secret@endpoint/instance_name")
if err != nil {
panic(err) // 处理错误。
}步骤三:查询数据
Go 语言驱动支持使用 Query 方法直接执行查询语句,也支持使用 Prepare 创建预处理语句查询。
获取查询结果时,接收字段数据的变量类型必须与表格存储的字段数据类型匹配。映射关系参见数据类型映射。
Query
rows, err := db.Query("SELECT pk1, col1, col2 FROM test_table WHERE pk1 = ?", 3)
if err != nil {
panic(err)
}
defer rows.Close()
for rows.Next() {
var pk1 int64
var col1 float64
var col2 string
if err := rows.Scan(&pk1, &col1, &col2); err != nil {
panic(err)
}
fmt.Println(pk1, col1, col2)
}Prepare
stmt, err := db.Prepare("SELECT pk1, col1, col2 FROM test_table WHERE pk1 = ?")
if err != nil {
panic(err)
}
defer stmt.Close()
rows, err := stmt.Query(3)
if err != nil {
panic(err)
}
defer rows.Close()
for rows.Next() {
var pk1 int64
var col1 float64
var col2 string
if err := rows.Scan(&pk1, &col1, &col2); err != nil {
panic(err)
}
fmt.Println(pk1, col1, col2)
}完整示例
以下示例用于连接表格存储实例并查询 test_table 表的所有数据:
package main
import (
"database/sql"
"fmt"
_ "github.com/aliyun/aliyun-tablestore-go-sql-driver"
)
func main() {
db, err := sql.Open("ots", "https://************************:********************************@myinstance.cn-hangzhou.ots.aliyuncs.com/myinstance")
if err != nil {
panic(err)
}
defer db.Close()
rows, err := db.Query("SELECT * FROM test_table")
if err != nil {
panic(err)
}
defer rows.Close()
columns, _ := rows.Columns()
for rows.Next() {
values := make([]interface{}, len(columns))
pointers := make([]interface{}, len(columns))
for i := range values {
pointers[i] = &values[i]
}
if err := rows.Scan(pointers...); err != nil {
panic(err)
}
fmt.Println(values...)
}
}配置项
通过 DSN 查询参数可修改 Go 语言驱动的配置项。
https://ak:sk@endpoint/instance?retryTimes=3&requestTimeout=10s常用配置项说明如下。时间类配置项均使用 Go duration 格式(如 15s、500ms)。
配置项 | 默认值 | 说明 |
| 10 | 最大重试次数。整数。 |
| 15s | 建立连接的超时时间。 |
| 30s | 发送请求的超时时间。 |
| 5s | 最大触发重试时间。 |
| 2000 | 最大空闲连接数。整数。 |
数据类型映射
表格存储与 Go 语言的字段数据类型对应关系如下。类型不匹配时会返回错误。
表格存储中字段数据类型 | Go语言中字段数据类型 |
Integer | int64 |
Binary | []byte |
String | string |
Double | float64 |
Boolean | bool |