Table Store提供了Go語言驅動用於使用SQL訪問Table Store資料。本文介紹如何使用Go語言驅動串連Table Store。
注意事項
目前支援使用SQL查詢功能的地區有華東1(杭州)、華東2(上海)、華北2(北京)、華北3(張家口)、華北5(呼和浩特)、華北6(烏蘭察布)、華南1(深圳)、西南1(成都)、中國香港、新加坡、印尼(雅加達)、德國(法蘭克福)、沙特(利雅得)和美國(維吉尼亞)。
前提條件
如果要使用RAM使用者進行操作,請確保已建立RAM使用者,並為RAM使用者授予所有SQL操作許可權,即在自訂權限原則中配置
"Action": "ots:SQL*"
。具體操作,請參見通過RAM Policy為RAM使用者授權。已擷取AccessKey(包括AccessKey ID和AccessKey Secret)。具體操作,請參見建立AccessKey。
使用流程
步驟一:安裝Go語言驅動
進入專案目錄後,執行以下命令安裝Go語言驅動。
go get github.com/aliyun/aliyun-tablestore-go-sql-driver
步驟二:使用Go語言驅動直連
Table Store的Go語言驅動是database/sql/driver
介面的實現,匯入包後即可使用database/sql
訪問Table Store。
參數說明
使用Go語言驅動訪問Table Store時,需要設定Go語言驅動名稱和Table StoreDSN(資料來源名稱)。具體參數說明請參見下表。
參數
樣本
說明
driverName
ots
Table Store的Go語言驅動名稱。固定取值為ots。
dataSourceName
https://************************:********************************@myinstance.cn-hangzhou.ots.aliyuncs.com/myinstance
Table Store資料來源名稱。格式為
schema://accessKeyId:accessKeySecret@endpoint/instanceName[?param1=value1&...¶mN=valueN]
。主要欄位說明如下:schema(必選):Table Store驅動使用的協議,一般設定為https。
accessKeyId:accessKeySecret(必選):阿里雲帳號或者RAM使用者的AccessKey ID和AccessKey Secret。
endpoint(必選):執行個體的服務地址。更多資訊,請參見服務地址。
instanceName(必選):執行個體名稱。
其他常用配置項的說明,請參見配置項。
樣本
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) // 處理錯誤。 }
步驟三:查詢資料
Table Store的Go語言驅動支援直接使用Query方法執行查詢語句,也支援使用Prepare建立一個Stmt進行查詢。
擷取查詢結果時,接收欄位資料的變數類型必須和Table Store中欄位資料類型相匹配。關於資料類型映射的更多資訊,請參見資料類型映射。
使用Query方法查詢
// 設定SQL語句,此處以查詢test_table表中pk1列、col1列和col2列的資料為例介紹,請根據實際需要設定。
rows, err := db.Query("SELECT pk1, col1, col2 FROM test_table WHERE pk1 = ?", 3)
if err != nil {
panic(err) // 處理錯誤。
}
for rows.Next() {
var pk1 int64
var col1 float64
var col2 string
err := rows.Scan(&pk1, &col1, &col2)
if err != nil {
panic(err) // 處理錯誤。
}
}
使用Prepare建立一個Stmt查詢
// 設定SQL語句,此處以查詢test_table表中pk1列、col1列和col2列的資料為例介紹,請根據實際需要設定。
stmt, err := db.Prepare("SELECT pk1, col1, col2 FROM test_table WHERE pk1 = ?")
if err != nil {
panic(err) // 處理錯誤。
}
rows, err := stmt.Query(3)
if err != nil {
panic(err) // 處理錯誤。
}
for rows.Next() {
var pk1 int64
var col1 float64
var col2 string
err := rows.Scan(&pk1, &col1, &col2)
if err != nil {
panic(err) // 處理錯誤。
}
}
完整樣本
以下樣本用於查詢華東1(杭州)地區下myinstance執行個體中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)
}
rows, err := db.Query("SELECT * FROM test_table")
if err != nil {
panic(err)
}
for rows.Next() {
// 擷取所有列。
columns, err := rows.Columns()
if err != nil {
panic(err)
}
// 建立存放資料的數組和指標。
values := make([]interface{}, len(columns))
pointers := make([]interface{}, len(columns))
for i := range values {
pointers[i] = &values[i]
}
// 掃描資料行。
err = rows.Scan(pointers...)
if err != nil {
panic(err)
}
fmt.Println(values...)
}
rows.Close()
db.Close()
}
配置項
通過Table StoreGo語言驅動支援修改Go SDK的配置項。常用配置項的詳細說明請參見下表。
配置項 | 樣本值 | 說明 |
retryTimes | 10 | 重試次數。預設值為10。 |
connectionTimeout | 15 | 建立串連的逾時時間。預設值為15。單位為秒。0表示無限等待。 |
requestTimeout | 30 | 發送請求的逾時時間。預設值為30。單位為秒。 |
maxRetryTime | 5 | 最大觸發重試時間。預設值為5。單位為秒。 |
maxIdleConnections | 2000 | 最大空閑串連數。預設值為2000。 |
資料類型映射
Table Store和Go語言中欄位資料類型的對應關係請參見下表。如果欄位資料類型不匹配,則會產生錯誤。
Table Store中欄位資料類型 | Go語言中欄位資料類型 |
Integer | int64 |
Binary | []byte |
String | string |
Double | float64 |
Boolean | bool |
相關文檔
您還可以通過控制台、命令列工具、Table StoreSDK、JDBC等方式訪問Table Store。具體操作,請參見通過控制台使用SQL查詢、通過命令列工具使用SQL查詢、通過SDK使用SQL查詢、JDBC串連Table Store、通過Hibernate使用SQL查詢資料和通過MyBatis使用SQL查詢資料。
您還可以將Tablestore執行個體接入到DataWorks或DMS,然後使用SQL查詢與分析Tablestore資料。更多資訊,請參見接入到DataWorks和接入到DMS。
您還可以通過MaxCompute、Spark、Hive或者HadoopMR、Function Compute、Flink、PrestoDB等計算引擎實現表中資料的計算與分析。具體操作,請參見計算與分析。
如果要以圖表等形式可視化展示資料,您可以通過對接Grafana實現。更多資訊,請參見對接Grafana。