通过 SQL 查询数据

更新时间:
复制 MD 格式

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

要执行的 SELECT 语句,用于指定映射表、返回字段、查询条件和返回行数。

SearchToken(可选)

*string

多元索引映射查询使用 Token 翻页时,传入上一次响应的 NextSearchToken。首次查询不设置。

返回值

SQLQueryResponse 包含以下与查询结果直接相关的字段。

字段

类型

说明

ResultSet

SQLResultSet

结果集。通过 HasNext 和 Next 逐行读取数据。

StmtType

SQLStatementType

SQL 语句类型。SELECT 查询返回 SQL_SELECT。

SQLQueryConsumed

*SQLQueryConsumed

本次查询消耗的 CU,分别记录数据表和多元索引的消耗。

NextSearchToken

*string

多元索引映射使用 Token 翻页时的下一页标记。无后续页时为 nil。

结果集

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。