Go SDK 可为已有数据表或多元索引创建映射关系,以便通过 SQL 访问数据。
前提条件
安装Tablestore Go SDK并初始化客户端。SQL 查询功能需要 1.7.4 及以上版本,建议使用最新版本。
已创建待映射的数据表或多元索引。
功能说明
调用 SQLQuery 方法执行 CREATE TABLE 语句,为已有数据表或多元索引创建映射关系。
func (client *TableStoreClient) SQLQuery(request *SQLQueryRequest) (*SQLQueryResponse, error)
为数据表创建映射关系时,映射表名称必须与数据表名称一致,字段名称不区分大小写,字段类型需要与数据表字段类型对应。为多元索引创建映射关系时,映射表名称可以自定义,并通过 ENGINE 和 ENGINE_ATTRIBUTE 指定数据表和多元索引。
有关两类映射关系的 SQL 语法、字段类型和参数说明,请参见DDL 操作。
以下示例为 example_table 数据表创建映射关系。
request := &tablestore.SQLQueryRequest{Query: `
CREATE TABLE example_table (
tenant_id BIGINT,
pk VARCHAR(1024),
name MEDIUMTEXT,
score BIGINT,
PRIMARY KEY(tenant_id, pk)
)`}
if _, err := client.SQLQuery(request); err != nil {
log.Fatalf("SQLQuery failed: %v", err)
}
参数说明
SQLQueryRequest 包含以下参数。
|
名称 |
类型 |
说明 |
|
Query(必选) |
string |
要执行的 |
场景示例
为多元索引创建映射关系
将 ENGINE 设置为 searchindex,并在 ENGINE_ATTRIBUTE 中指定数据表和多元索引名称。以下示例为 example_table 数据表的 example_index 多元索引创建名为 example_search_table 的映射关系。
request := &tablestore.SQLQueryRequest{Query: `
CREATE TABLE example_search_table (
tenant_id BIGINT,
pk MEDIUMTEXT,
name MEDIUMTEXT,
score BIGINT
) ENGINE='searchindex'
ENGINE_ATTRIBUTE='{"index_name":"example_index","table_name":"example_table"}'`}
if _, err := client.SQLQuery(request); err != nil {
log.Fatalf("SQLQuery failed: %v", err)
}
常见问题
创建映射关系时提示 Table 'instance.table' doesn't exist
原因:指定的数据表或多元索引不存在。CREATE TABLE 语句仅创建映射关系,不会创建实际的数据表或多元索引。
解决方案:检查名称并确保数据表或多元索引已创建,然后重新执行语句。
创建映射关系时提示 Table 'instance.table' already exists
原因:映射关系已存在。执行 DESCRIBE 或 SELECT 语句时也可能自动创建映射关系;自动创建的映射关系仅包含主键列和预定义列。
解决方案:如需避免重复创建报错,在语句中使用 IF NOT EXISTS。如需调整自动创建的映射关系,评估业务影响后先删除,再重新创建。