通过 Java SDK 为已有数据表或多元索引创建映射关系,以便通过 SQL 访问数据。
前提条件
安装Tablestore Java SDK并初始化客户端。
使用 5.13.0 及以上版本的 Tablestore Java SDK。
功能说明
调用 sqlQuery 方法执行 CREATE TABLE 语句,为已有数据表或多元索引创建映射关系。
SQLQueryResponse sqlQuery(SQLQueryRequest request)
为数据表创建映射关系时,映射表名称必须与数据表名称一致,字段名称不区分大小写,字段类型需要与数据表字段类型对应。为多元索引创建映射关系时,映射表名称可以自定义,并通过 ENGINE 和 ENGINE_ATTRIBUTE 指定数据表和多元索引。
有关 CREATE TABLE 语句的语法、字段类型和参数说明,请参见DDL 操作。
以下示例为 example_table 数据表创建映射关系。该数据表包含一个字符串主键列和四个属性列。
String query = "CREATE TABLE example_table ("
+ "pk VARCHAR(1024), "
+ "long_value BIGINT, "
+ "double_value DOUBLE, "
+ "string_value MEDIUMTEXT, "
+ "bool_value BOOL, "
+ "PRIMARY KEY(pk))";
SQLQueryRequest request = new SQLQueryRequest(query);
client.sqlQuery(request);
参数说明
SQLQueryRequest 包含以下参数。
|
名称 |
类型 |
说明 |
|
query(必选) |
String |
|
场景示例
为多元索引创建映射关系
创建多元索引的映射关系时,将 ENGINE 设置为 searchindex,并在 ENGINE_ATTRIBUTE 中指定数据表和多元索引名称。以下示例为 example_table 数据表的 example_index 多元索引创建名为 example_search_table 的映射关系。
String tableName = "example_table";
String indexName = "example_index";
String mappingTableName = "example_search_table";
String query = String.format(
"CREATE TABLE %s (pk MEDIUMTEXT, long_value BIGINT, "
+ "double_value DOUBLE, string_value MEDIUMTEXT, "
+ "bool_value BOOL) ENGINE='searchindex' "
+ "ENGINE_ATTRIBUTE='{\"index_name\":\"%s\","
+ "\"table_name\":\"%s\"}'",
mappingTableName, indexName, tableName);
SQLQueryRequest request = new SQLQueryRequest(query);
client.sqlQuery(request);
常见问题
创建映射关系时提示 Table 'instance.table' doesn't exist
原因:指定的数据表或多元索引不存在。CREATE TABLE 语句仅为已有数据表或多元索引创建映射关系,不会创建实际的数据表或多元索引。
解决方案:检查数据表或多元索引名称是否正确,并确保相应的数据表或多元索引已创建,然后重新执行 CREATE TABLE 语句。
创建映射关系时提示 Table 'instance.table' already exists
原因:映射关系已存在。该映射关系可能由 CREATE TABLE 语句创建,也可能在未显式创建映射关系的情况下执行 DESCRIBE 或 SELECT 语句时自动创建。自动创建的映射关系仅包含数据表的主键列和预定义列。
解决方案:
如果只需避免重复创建报错,请在
CREATE TABLE语句中使用IF NOT EXISTS。如果需要调整映射关系的结构,请先使用
DESCRIBE语句查看映射关系。通过CREATE TABLE语句创建的映射关系可以使用ALTER TABLE语句修改;自动创建的映射关系无法修改,需要评估业务影响后使用DROP MAPPING TABLE语句删除,再重新创建。