创建映射关系

更新时间:
复制 MD 格式

Go SDK 可为已有数据表或多元索引创建映射关系,以便通过 SQL 访问数据。

前提条件

  • 安装Tablestore Go SDK并初始化客户端。SQL 查询功能需要 1.7.4 及以上版本,建议使用最新版本。

  • 已创建待映射的数据表或多元索引。

功能说明

调用 SQLQuery 方法执行 CREATE TABLE 语句,为已有数据表或多元索引创建映射关系。

func (client *TableStoreClient) SQLQuery(request *SQLQueryRequest) (*SQLQueryResponse, error)

为数据表创建映射关系时,映射表名称必须与数据表名称一致,字段名称不区分大小写,字段类型需要与数据表字段类型对应。为多元索引创建映射关系时,映射表名称可以自定义,并通过 ENGINEENGINE_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

要执行的 CREATE TABLE 语句,用于定义映射表名称、字段、主键和执行引擎。数据表映射和多元索引映射使用不同语法。

场景示例

为多元索引创建映射关系

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

原因:映射关系已存在。执行 DESCRIBESELECT 语句时也可能自动创建映射关系;自动创建的映射关系仅包含主键列和预定义列。

解决方案:如需避免重复创建报错,在语句中使用 IF NOT EXISTS。如需调整自动创建的映射关系,评估业务影响后先删除,再重新创建。