O driver Go (aliyun-tablestore-go-sql-driver) implementa a interface database/sql/driver e permite acessar dados do Tablestore pelo pacote padrão database/sql.
Pré-requisitos
Par de AccessKey com a permissão
ots:SQL*(obrigatório para usuários RAM).Tabela de dados e tabela de mapeamento. Para mais informações, consulte Operações DDL.
Procedimento
Etapa 1: Instale o driver Go
Execute o comando abaixo para instalar o driver Go:
go get github.com/aliyun/aliyun-tablestore-go-sql-driver
Etapa 2: Conectar-se com o driver Go
Parâmetros
Para acessar o Tablestore com o driver Go, especifique o nome do driver e um Data Source Name (DSN).
Parâmetro | Descrição |
driverName | Nome do driver Go do Tablestore. Defina como |
dataSourceName | DSN no formato
Para outras opções de configuração, consulte Opções de configuração. |
Exemplo
import (
"database/sql"
_ "github.com/aliyun/aliyun-tablestore-go-sql-driver"
)
// Set the Go driver name and the Tablestore data source name.
db, err := sql.Open("ots", "https://access_key_id:access_key_secret@endpoint/instance_name")
if err != nil {
panic(err) // Handle the error.
}
Etapa 3: Consultar dados
Execute consultas com o método Query ou use instruções preparadas com o método Prepare.
Os tipos das variáveis devem corresponder aos tipos de dados do Tablestore. Para ver o mapeamento de tipos, consulte Mapeamento de tipos de dados.
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)
}
Exemplo completo
O exemplo abaixo conecta-se a uma instância do Tablestore e consulta todos os dados de 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...)
}
}
Opções de configuração
Configure o driver Go adicionando parâmetros de consulta ao DSN.
https://ak:sk@endpoint/instance?retryTimes=3&requestTimeout=10s
As opções baseadas em tempo usam o formato de duração do Go, como 15s e 500ms.
|
Opção |
Padrão |
Descrição |
|
|
10 |
Número máximo de tentativas. Inteiro. |
|
|
15s |
Tempo limite de conexão. |
|
|
30s |
Tempo limite da requisição. |
|
|
5s |
Intervalo máximo entre tentativas. |
|
|
2000 |
Quantidade máxima de conexões ociosas. Inteiro. |
Mapeamento de tipos de dados
Os tipos de dados do Tablestore correspondem a tipos do Go. Incompatibilidades de tipo geram erro.
|
Tipo de dado do Tablestore |
Tipo de dado do Go |
|
Integer |
int64 |
|
Binary |
[]byte |
|
String |
string |
|
Double |
float64 |
|
Boolean |
bool |