使用SQL查詢資料時,您可以通過表的映射關係或者多元索引的映射關係進行資料查詢,請根據實際情境選擇合適的查詢方式。
背景資訊
Table Store作為結構化巨量資料儲存,支援不同的索引結構,便於在不同情境的查詢分析加速使用。索引結構包括通過資料表主鍵進行的單行讀(GetRow)和範圍讀(GetRange)、自訂配置主鍵的二級索引表以及支援倒排索引和多維空間索引的多元索引。
使用SQL查詢功能時,您可以通過顯式訪問二級索引表查詢資料。對於多元索引,Table Store提供了自動多元索引選擇策略和顯式訪問多元索引兩種方式查詢資料。更多資訊,請參見索引選擇策略。
範例情境
假設資料表exampletable包括主鍵列id(整型)以及屬性列name(String類型)和context(String類型),且已為該資料表建立了多元索引exampletable_searchindex,該多元索引包括id(Integer類型)和context(Text類型)兩列。
本文以該範例情境為例介紹通過SQL使用不同索引結構進行資料查詢的實踐操作。
使用表的映射關係
請根據實際情境選擇合適的使用方式。使用表的映射關係時支援設定資料是否要滿足強一致性以及是否允許犧牲統計彙總精準度來提升查詢效能。
關於建立表的映射關係的更多資訊,請參見建立表的映射關係。
方式一:查詢資料時要求資料滿足最終一致,且允許犧牲統計彙總精準度
為資料表exampletable建立映射關係,映射表名稱為exampletable,其他參數保持預設即可。
CREATE TABLE `exampletable` (`id` BIGINT, `name` MEDIUMTEXT, `context` MEDIUMTEXT, PRIMARY KEY(id)) ENGINE='Tablestore';
查詢資料。
當執行以下SQL語句查詢資料時,由於id、name和context未全部包括在多元索引exampletable_searchindex中,因此Table Store會自動選擇資料表進行資料查詢。
SELECT * FROM exampletable LIMIT 10;
當執行以下SQL語句查詢資料時,由於id和context均包括在多元索引exampletable_searchindex中,因此Table Store會自動選擇該多元索引進行資料查詢。
SELECT id,context FROM exampletable LIMIT 10;
方式二:查詢資料時要求保證資料強一致性
為資料表exampletable建立映射關係,映射表名稱為exampletable以及設定data_consistency為strong。
CREATE TABLE `exampletable` (`id` BIGINT, `name` MEDIUMTEXT, `context` MEDIUMTEXT, PRIMARY KEY(id)) ENGINE='Tablestore', ENGINE_ATTRIBUTE='{"data_consistency": "strong"}';
查詢資料。更多資訊,請參見查詢資料。
由於多元索引是滿足資料最終一致,並不保證強一致性,因此Table Store不會通過任何多元索引進行資料查詢。
方式三:查詢資料時要求資料滿足最終一致,但不允許犧牲統計彙總精準度
為資料表exampletable建立映射關係,映射表名稱為exampletable,設定data_consistency為eventual以及設定allow_inaccurate_aggregation為false。
CREATE TABLE `exampletable` (`id` BIGINT, `name` MEDIUMTEXT, `context` MEDIUMTEXT, PRIMARY KEY(id)) ENGINE='Tablestore', ENGINE_ATTRIBUTE='{"data_consistency": "eventual", "allow_inaccurate_aggregation": false}';
查詢資料。更多資訊,請參見查詢資料。
由於多元索引的統計彙總操作非絕對精確的結果,因此Table Store不會選擇任何多元索引進行資料查詢。
使用多元索引的映射關係
當要使用指定多元索引進行資料查詢時,您可以通過為該多元索引建立映射關係來實現。
關於建立多元索引的映射關係的更多資訊,請參見建立多元索引的映射關係。
建立多元索引的映射關係,映射表名稱為exampletable_searchindex_test。
CREATE TABLE `exampletable_searchindex_test` (`id` BIGINT, `context` MEDIUMTEXT) ENGINE='searchindex' ENGINE_ATTRIBUTE='{"index_name": "exampletable_searchindex", "table_name": "exampletable"}'
查詢資料。
SELECT id,context FROM exampletable_searchindex_test WHERE text_match(context, "tablestore cool") LIMIT 10;