使用Spark計算引擎訪問Table Store時,您可以通過E-MapReduce SQL或者DataFrame編程方式對錶格儲存中資料進行複雜的計算和高效的分析。
功能特性
對於批次計算,除了基礎功能外,Tablestore On Spark提供了如下核心最佳化功能:
索引選擇:資料查詢效率的關鍵在於選擇合適的索引方式,根據過濾條件選擇最匹配的索引方式增加查詢效率。Table Store的索引方式可選全域二級索引或者多元索引。
說明全域二級索引和多元索引的更多資訊請參見海量結構化資料存放區技術揭秘:Tablestore儲存和索引引擎詳解。
表分區裁剪:根據過濾條件進行邏輯分區(Split)的細化匹配,提前篩選出無效的Split,降低服務端的資料出口量。
Projection和Filter下推:將Projection列和Filter條件下推到服務端,降低每個分區的資料出口量。
動態指定Split大小:支援調整每個邏輯分區(Split)中的資料量和分區數,每個Split會和RDD(Resilient Distributed DataSet)的Partition綁定,可用於加速Spark任務的執行。
說明通過ComputeSplitsBySize介面可以擷取邏輯分區(Split),該介面將全表資料在邏輯上劃分成若干接近指定大小的分區,並返回這些分區之間的分割點以及分區所在機器的提示。一般用於計算引擎規劃並發度等執行計畫。
對於Realtime Compute,基於通道服務,利用CDC(資料變更捕獲)技術完成Spark的mini batch流式消費和計算,同時提供了at-least-once一致性語義。在Realtime Compute中每個分區和RDD的Partition一一綁定,通過擴充表的分區,可以完成資料輸送量的線性擴充。
使用方式
根據業務情境可以選擇通過E-MapReduce SQL或者DataFrame編程方式使用Spark訪問Table Store。
E-MapReduce SQL方式
此方式使用標準的SQL語句進行商務資料執行和訪問,操作便捷,可以將已有的商務邏輯進行無縫遷移。
DataFrame方式
此方式需要一定的編程基礎,但可以組合實現複雜的商務邏輯,適用於比較複雜和靈活的情境。
資料訪問方式
Table Store為Spark批次計算提供KV查詢(資料表或全域二級索引)和多元索引查詢兩種資料訪問方式,以支援海量結構化資料快速讀寫和豐富的查詢分析能力。
兩種資料訪問方式的區別如下:
KV查詢方式在過濾欄位是主鍵的情境下效率較高,但不適合過濾欄位變動較大且過濾欄位中非主鍵列較多的情境,KV查詢方式也不支援地理位置查詢。
多元索引查詢方式適用於如下資料訪問情境:
說明多元索引基於倒排索引和列式儲存,可以解決巨量資料的複雜查詢難題,提供類似於Elasticsearch的全文檢索索引、模糊查詢、地理位置查詢、統計彙總等查詢和分析功能。
少量且對延時要求較高的即時資料分析情境。
非主鍵的過濾欄位較多,過濾欄位無法被全域二級索引主鍵或者資料表主鍵包含。
過濾欄位的篩選效率較高,可以通過某一欄位條件過濾掉大部分資料。
例如
select * from table where col = 1000;
中,col是非主鍵列,且col = 1000欄位條件可以過濾掉大部分資料。查詢條件中包含地理位置查詢。
結合下圖以select * from table where col1 like '阿%' or col2 = 'a';
SQL語句為例介紹兩種查詢方式的使用範例。
通過多元索引方式訪問資料時,在多元索引的col1中可以擷取col1的值為'阿%'的一行資料pk1 = 1,在多元索引的col2中可以擷取col2的值為'a'的兩行資料pk1 = 1和pk1 = 2,然後將兩次中間結果的資料進行union,即可得到滿足條件的資料
pk1 = 1,col1 = '阿里雲',col2 = 'a'
。通過KV查詢方式訪問資料時,查詢主體是Table Store的資料表,資料表只能通過主鍵查詢。如果查詢的SQL語句中的過濾欄位不是資料表的主鍵,則需要進行全表掃描。
由於col1不是資料表的主鍵,Table Store會進行全表掃描找到col1的值為'阿%'的一行資料;由於col2不是資料表的主鍵,Table Store會再次進行全表掃描找到col2的值為'a'的兩行資料,然後將兩次中間結果的資料進行union。
此時也可以通過構建一個主鍵為col1、col2的索引表支援該查詢,但此種方式的靈活性較低。