Table Store提供 Go 語言驅動(aliyun-tablestore-go-sql-driver),實現了 database/sql/driver 介面,支援通過標準 database/sql 包訪問Table Store資料。
前提條件
已擷取 AccessKey,RAM 使用者需具備
"Action": "ots:SQL*"許可權。已建立資料表和映射表,詳見DDL 操作。
使用流程
步驟一:安裝Go語言驅動
執行以下命令安裝 Go 語言驅動:
go get github.com/aliyun/aliyun-tablestore-go-sql-driver步驟二:使用Go語言驅動直連
參數說明
使用 Go 語言驅動訪問Table Store時,需要設定驅動名稱和 DSN(資料來源名稱)。參數說明如下。
參數 | 說明 |
driverName | Table Store Go 語言驅動名稱,固定取值為 |
dataSourceName | Table Store資料來源名稱。格式為
其他常用配置項的說明詳見配置項。 |
樣本
import (
"database/sql"
_ "github.com/aliyun/aliyun-tablestore-go-sql-driver"
)
// 設定Go語言驅動名稱和Table Store資料來源名稱。
db, err := sql.Open("ots", "https://access_key_id:access_key_secret@endpoint/instance_name")
if err != nil {
panic(err) // 處理錯誤。
}步驟三:查詢資料
Go 語言驅動支援使用 Query 方法直接執行查詢語句,也支援使用 Prepare 建立預先處理語句查詢。
擷取查詢結果時,接收欄位資料的變數類型必須與Table Store的欄位資料類型匹配。映射關係參見資料類型映射。
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)
}完整樣本
以下樣本用於串連Table Store執行個體並查詢 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 | 最大空閑串連數。整數。 |
資料類型映射
Table Store與 Go 語言的欄位資料類型對應關係如下。類型不符時會返回錯誤。
Table Store中欄位資料類型 | Go語言中欄位資料類型 |
Integer | int64 |
Binary | []byte |
String | string |
Double | float64 |
Boolean | bool |