通過 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語句刪除,再重新建立。