SQL查詢
SQL查詢?yōu)楸砀翊鎯?chǔ)的多數(shù)據(jù)引擎提供統(tǒng)一的訪問接口,兼容MySQL的查詢語法,適用于在海量數(shù)據(jù)中進(jìn)行在線數(shù)據(jù)訪問類型的場景。您可以通過SQL查詢功能對(duì)表格存儲(chǔ)中的數(shù)據(jù)進(jìn)行復(fù)雜的查詢和高效的分析。
背景信息
為了滿足用戶業(yè)務(wù)平滑遷移到表格存儲(chǔ)以及使用SQL方式訪問表格存儲(chǔ)的需求,表格存儲(chǔ)在傳統(tǒng)的NoSQL結(jié)構(gòu)化存儲(chǔ)之上,提供云原生的SQL引擎能力。SQL查詢兼容MySQL的查詢語法,同時(shí)提供基礎(chǔ)的SQL DDL建表能力。對(duì)于已有數(shù)據(jù)表,通過執(zhí)行CREATE TABLE一鍵自動(dòng)建立映射關(guān)系后,您可以使用SQL方式訪問表中數(shù)據(jù)。
SQL查詢功能支持通過多元索引來快速查詢滿足查詢條件的數(shù)據(jù)。使用SQL查詢時(shí),系統(tǒng)會(huì)根據(jù)SQL語句自動(dòng)選擇合適的方式來加速SQL訪問。
SQL查詢功能適用于在海量數(shù)據(jù)中進(jìn)行在線數(shù)據(jù)訪問類型的場景,SQL訪問的延時(shí)從毫秒、秒到分鐘級(jí)別不等,包括基于數(shù)據(jù)表主鍵的Point Query (GetRow操作)、多元索引的精確查詢(TermQuery )等以及通過多元索引的統(tǒng)計(jì)聚合能力進(jìn)行查詢,例如數(shù)據(jù)表中滿足某個(gè)條件的個(gè)數(shù)、某列求和等。
基本概念
SQL的使用會(huì)涉及到很多傳統(tǒng)數(shù)據(jù)庫中的概念,此處介紹下相關(guān)概念以及與現(xiàn)有表格存儲(chǔ)概念的映射關(guān)系。
數(shù)據(jù)庫概念 | 表格存儲(chǔ)概念 | 描述 |
數(shù)據(jù)庫 | 實(shí)例 | 按照數(shù)據(jù)結(jié)構(gòu)來組織、存儲(chǔ)和管理數(shù)據(jù)的倉庫。一個(gè)數(shù)據(jù)庫中可以包含一個(gè)或者多個(gè)表。 |
表 | 表 | 由行和列組成。 |
索引 | 二級(jí)索引、多元索引 | 為加速數(shù)據(jù)查詢而創(chuàng)建的一種存儲(chǔ)結(jié)構(gòu)。 |
功能特性
SQL功能
支持單次請(qǐng)求單條SQL。
支持基礎(chǔ)的DDL語句,主要包括創(chuàng)建表的映射關(guān)系、創(chuàng)建多元索引的映射關(guān)系、更新映射表屬性列、刪除映射關(guān)系和查詢表的描述信息。
支持DQL操作,主要包括查詢數(shù)據(jù),可實(shí)現(xiàn)基礎(chǔ)數(shù)據(jù)查詢、統(tǒng)計(jì)聚合、條件過濾、分頁查詢等功能。
支持通過多元索引實(shí)現(xiàn)全文檢索、多元索引數(shù)組類型、多元索引嵌套類型、多元索引虛擬列等查詢功能。
支持使用JOIN功能將兩個(gè)表或多個(gè)表進(jìn)行連接,并返回符合連接條件和查詢條件的數(shù)據(jù)。更多信息,請(qǐng)參見Join。
支持JSON函數(shù)
->>
、JSON_UNQUOTE和JSON_EXTRACT。更多信息,請(qǐng)參見JSON函數(shù)。
字符集和排序規(guī)則
字符集:UTF-8
排序規(guī)則:二進(jìn)制排序規(guī)則
操作符
支持算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符等SQL操作符。更多信息,請(qǐng)參見SQL操作符。
存量表綁定
通過CREATE TABLE語句,您可以為存量表創(chuàng)建映射關(guān)系。創(chuàng)建映射關(guān)系時(shí),請(qǐng)確保主鍵和存量表的主鍵一致,屬性列和存量表的屬性列類型以及預(yù)定義列類型一致。關(guān)于數(shù)據(jù)類型映射關(guān)系的更多信息,請(qǐng)參見SQL數(shù)據(jù)類型映射。
注意事項(xiàng)
在使用SQL查詢時(shí),不支持事務(wù)功能。
表格存儲(chǔ)將SQL語句中的關(guān)鍵字作為保留字。如果在命名表或者列時(shí)需要使用關(guān)鍵字,則請(qǐng)?zhí)砑?span data-tag="ph" id="codeph-9iq-qxf-jdl" class="ph">
``
符號(hào)對(duì)關(guān)鍵字進(jìn)行轉(zhuǎn)義。關(guān)鍵字不區(qū)分大小寫。 更多信息,請(qǐng)參見保留字與關(guān)鍵字。表格存儲(chǔ)的SQL引擎遵循通用的SQL規(guī)范,對(duì)列名大小寫不敏感,例如操作
SELECT Aa FROM exampletable;
語句與SELECT aa FROM exampletable;
語句是等價(jià)的。由于表格存儲(chǔ)中原始表的列名大小寫敏感,當(dāng)使用SQL時(shí),原始表的列名會(huì)統(tǒng)一轉(zhuǎn)換為小寫字母進(jìn)行匹配,即如果要操作表格存儲(chǔ)表中的Aa列,在SQL中使用AA、aa、aA、Aa均可,因此表格存儲(chǔ)原始表的列名不能同時(shí)為AA、aa、aA和Aa。
目前支持SQL查詢功能的地域包括華東1(杭州)、華東2(上海)、華北2(北京)、華北3(張家口)、華北6(烏蘭察布)、華南1(深圳)、西南1(成都)、中國香港、日本(東京)、新加坡、馬來西亞(吉隆坡)、印度尼西亞(雅加達(dá))、德國(法蘭克福)、英國(倫敦)、美國(硅谷)、美國(弗吉尼亞)。
使用限制
更多信息,請(qǐng)參見SQL使用限制。
使用流程
寬表模型與時(shí)序模型的使用步驟的實(shí)現(xiàn)存在差異,請(qǐng)根據(jù)實(shí)際情況查詢相應(yīng)步驟信息。
寬表模型使用步驟說明
步驟 | 操作 | 說明 |
1 | 為表創(chuàng)建映射關(guān)系 | 使用SQL查詢數(shù)據(jù)前,您需要手動(dòng)創(chuàng)建表的映射關(guān)系。具體操作,請(qǐng)參見創(chuàng)建表的映射關(guān)系, 如果已為數(shù)據(jù)表創(chuàng)建多元索引,您還可以選擇為多元索引創(chuàng)建映射關(guān)系來實(shí)現(xiàn)通過指定多元索引查詢數(shù)據(jù)。具體操作,請(qǐng)參見創(chuàng)建多元索引的映射關(guān)系。 |
2 | 使用SQL查詢數(shù)據(jù) | 通過表的映射關(guān)系查詢表中數(shù)據(jù)。您可以通過SQL查詢實(shí)現(xiàn)如下功能:
|
3 | 使用SQL分析數(shù)據(jù) | 通過表的映射關(guān)系分析表中的數(shù)據(jù)。您可以通過GROUP BY語句對(duì)結(jié)果集按照指定條件進(jìn)行分組,并且可以使用聚合函數(shù)進(jìn)行數(shù)據(jù)的統(tǒng)計(jì)與計(jì)算。更多信息,請(qǐng)參見GROUP BY分組查詢和聚合函數(shù)。 |
時(shí)序模型使用步驟說明
步驟 | 操作 | 說明 |
1 | 為表創(chuàng)建映射關(guān)系 | 使用SQL查詢數(shù)據(jù)前,您需要為表創(chuàng)建映射關(guān)系。 您可以為時(shí)序表建立單值模型映射關(guān)系、多值模型映射關(guān)系或時(shí)間線元數(shù)據(jù)映射關(guān)系三種映射關(guān)系進(jìn)行數(shù)據(jù)查詢。 創(chuàng)建時(shí)序表后,系統(tǒng)會(huì)自動(dòng)為表創(chuàng)建單值模型映射關(guān)系和時(shí)間線元數(shù)據(jù)映射關(guān)系,無需手動(dòng)創(chuàng)建。如果要以多值模型查詢時(shí)序數(shù)據(jù),您需要手動(dòng)創(chuàng)建多值模型映射關(guān)系。具體操作,請(qǐng)參見時(shí)序表的SQL映射關(guān)系。 |
2 | 使用SQL查詢數(shù)據(jù) | 通過表的映射關(guān)系查詢表中數(shù)據(jù)。您可以使用單值模型或者多值模型查詢時(shí)序數(shù)據(jù)以及使用時(shí)間線元數(shù)據(jù)映射關(guān)系查詢時(shí)間線元數(shù)據(jù)。更多信息,請(qǐng)參見時(shí)序模型SQL查詢與分析示例。 |
3 | 使用SQL分析數(shù)據(jù) | 通過表的映射關(guān)系分析表中數(shù)據(jù)。您可以使用tag_value_at擴(kuò)展函數(shù)提取時(shí)間線標(biāo)簽(_tags)中的某個(gè)標(biāo)簽(tag)的值以及時(shí)間線屬性(_attributes)中的某個(gè)屬性值。更多信息,請(qǐng)參見時(shí)序模型SQL查詢與分析示例。 |
使用方式
您可以通過表格存儲(chǔ)控制臺(tái)、命令行工具、表格存儲(chǔ)SDK、JDBC、Go語言驅(qū)動(dòng)使用SQL查詢。
計(jì)費(fèi)說明
SQL本身不會(huì)有額外的費(fèi)用,但是使用SQL查詢數(shù)據(jù)過程中涉及到的表掃描、索引查詢等操作會(huì)產(chǎn)生費(fèi)用。更多信息,請(qǐng)參見SQL查詢計(jì)量計(jì)費(fèi)。
常見問題
相關(guān)文檔
如果要加速SQL數(shù)據(jù)查詢和計(jì)算,您可以通過創(chuàng)建二級(jí)索引或者多元索引實(shí)現(xiàn)。更多信息,請(qǐng)參見索引選擇策略和計(jì)算下推。
您還可以通過MaxCompute、Spark、Hive或者HadoopMR、函數(shù)計(jì)算、Flink、PrestoDB等計(jì)算引擎實(shí)現(xiàn)表中數(shù)據(jù)的計(jì)算與分析。具體操作,請(qǐng)參見計(jì)算與分析。
您還可以將Tablestore實(shí)例接入到DataWorks或DMS,然后使用SQL查詢與分析Tablestore數(shù)據(jù)。更多信息,請(qǐng)參見接入到DataWorks和接入到DMS。
如果要以圖表等形式可視化展示數(shù)據(jù),您可以通過對(duì)接Grafana實(shí)現(xiàn)。更多信息,請(qǐng)參見對(duì)接Grafana。
使用寬表模型可以實(shí)現(xiàn)元數(shù)據(jù)、大數(shù)據(jù)等多種場景的解決方案,例如搭建海量智能元數(shù)據(jù)管理系統(tǒng)、億量級(jí)訂單管理方案、基于多元索引搭建億量級(jí)店鋪搜索系統(tǒng)、表格存儲(chǔ)結(jié)合Spark流批處理實(shí)現(xiàn)一體化存儲(chǔ)和計(jì)算、表格存儲(chǔ)結(jié)合實(shí)時(shí)計(jì)算Flink進(jìn)行大數(shù)據(jù)分析。更多方案介紹,請(qǐng)參見快速玩轉(zhuǎn)Tablestore入門與實(shí)戰(zhàn)。
使用時(shí)序模型可以實(shí)現(xiàn)設(shè)備時(shí)序數(shù)據(jù)開發(fā)等方案。更多方案介紹,請(qǐng)參見快速玩轉(zhuǎn)Tablestore入門與實(shí)戰(zhàn)。
表格存儲(chǔ)控制臺(tái)提供了電商訂單、共享汽車、快遞軌跡追溯、店鋪搜索、地理圍欄、智能元數(shù)據(jù)等產(chǎn)品應(yīng)用場景的場景Demo。具體樣例請(qǐng)參見場景Demo。
SQL查詢可應(yīng)用在表格存儲(chǔ)物聯(lián)網(wǎng)存儲(chǔ)IoTstore解決方案中作為不同類型數(shù)據(jù)的統(tǒng)一查詢接口。更多信息,請(qǐng)參見物聯(lián)網(wǎng)存儲(chǔ)簡介。
物聯(lián)網(wǎng)存儲(chǔ)IoTstore是表格存儲(chǔ)基于物聯(lián)網(wǎng)場景中多源異構(gòu)數(shù)據(jù)存儲(chǔ)、高并發(fā)吞吐、海量數(shù)據(jù)高性價(jià)比存儲(chǔ)、多維度數(shù)據(jù)處理與分析等需求推出的一站式物聯(lián)網(wǎng)解決方案,可為物聯(lián)網(wǎng)設(shè)備元數(shù)據(jù)、消息數(shù)據(jù)、時(shí)序軌跡等海量數(shù)據(jù)提供存儲(chǔ)、查詢、檢索、分析、同步等能力。
附錄:SQL與多元索引功能對(duì)比
SQL查詢和多元索引均能實(shí)現(xiàn)一些數(shù)據(jù)查詢與分析功能,下表展示了兩者的功能對(duì)比關(guān)系。
多元索引功能 | SQL函數(shù)/語句 | |
等于(=) | ||
大于(>)、小于(<)、大于等于(>=)、小于等于(<=)、BETWEEN ... AND ... | ||
MustQueries | AND | |
MustNotQueries | != | |
ShouldQueries | OR | |
FieldSort | ORDER BY | |
SetLimit | LIMIT | |
最小值 | MIN() | |
最大值 | MAX() | |
和 | SUM() | |
平均值 | AVG() | |
統(tǒng)計(jì)行數(shù) | COUNT() | |
統(tǒng)計(jì)去重行數(shù) | COUNT(DISTINCT) | |
獲取統(tǒng)計(jì)聚合分組中的行 | ANY_VALUE() | |
字段值分組 | GROUP BY |