Go SDK 可执行 SELECT 语句,查询数据表或多元索引映射中的数据。
前提条件
安装Tablestore Go SDK并初始化客户端。SQL 查询功能需要 1.7.4 及以上版本,建议使用最新版本。
已为待操作的数据表或多元索引创建映射关系。
功能说明
调用 SQLQuery 方法执行 SELECT 语句,查询数据表或多元索引映射中的数据。
func (client *TableStoreClient) SQLQuery(request *SQLQueryRequest) (*SQLQueryResponse, error)
以下示例查询 example_table 中分区键为 tenant_id=1 的数据,并按字段类型读取返回值。
request := &tablestore.SQLQueryRequest{Query: `
SELECT tenant_id, pk, name, score
FROM example_table
WHERE tenant_id = 1
LIMIT 10`}
response, err := client.SQLQuery(request)
if err != nil {
log.Fatalf("SQLQuery failed: %v", err)
}
for response.ResultSet.HasNext() {
row := response.ResultSet.Next()
tenantID, err := row.GetInt64ByName("tenant_id")
if err != nil {
log.Fatalf("Read tenant_id failed: %v", err)
}
pk, err := row.GetStringByName("pk")
if err != nil {
log.Fatalf("Read pk failed: %v", err)
}
name, err := row.GetStringByName("name")
if err != nil {
log.Fatalf("Read name failed: %v", err)
}
score, err := row.GetInt64ByName("score")
if err != nil {
log.Fatalf("Read score failed: %v", err)
}
fmt.Printf("%d, %s, %s, %d\n", tenantID, pk, name, score)
}
参数说明
SQLQueryRequest 包含以下参数。
|
名称 |
类型 |
说明 |
|
Query(必选) |
string |
要执行的 |
|
SearchToken(可选) |
*string |
多元索引映射查询使用 Token 翻页时,传入上一次响应的 |
返回值
SQLQueryResponse 包含以下与查询结果直接相关的字段。
|
字段 |
类型 |
说明 |
|
ResultSet |
SQLResultSet |
结果集。通过 |
|
StmtType |
SQLStatementType |
SQL 语句类型。 |
|
SQLQueryConsumed |
*SQLQueryConsumed |
本次查询消耗的 CU,分别记录数据表和多元索引的消耗。 |
|
NextSearchToken |
*string |
多元索引映射使用 Token 翻页时的下一页标记。无后续页时为 |
结果集
ResultSet 的类型为 SQLResultSet,包含以下方法。
|
方法 |
返回类型 |
说明 |
|
Columns() |
[]*SQLColumnInfo |
返回结果集的字段名称和类型。 |
|
HasNext() |
bool |
结果集中是否还有未读取的数据行。 |
|
Next() |
SQLRow |
返回下一行数据,并移动游标。 |
|
Reset() |
无 |
将游标重置到结果集起始位置。 |
结果行
ResultSet.Next() 返回 SQLRow,可按字段下标或字段名称读取值。
|
方法 |
返回类型 |
适用 SQL 类型 |
|
GetString / GetStringByName |
string |
字符串类型。 |
|
GetInt64 / GetInt64ByName |
int64 |
整数类型。 |
|
GetFloat64 / GetFloat64ByName |
float64 |
浮点数类型。 |
|
GetBool / GetBoolByName |
bool |
布尔类型。 |
|
GetBytes / GetBytesByName |
[]byte |
二进制类型。 |
|
GetDateTime / GetDateTimeByName |
time.Time |
DATETIME。 |
|
GetTime / GetTimeByName |
time.Duration |
TIME。 |
|
GetDate / GetDateByName |
time.Time |
DATE。 |
|
IsNull / IsNullByName |
bool |
判断字段值是否为 SQL NULL。 |