1、MaxCompute索引優化實踐分享阿里云高級專家戴謝寧MaxCompute 2.0MaxCompute的數據模型分區下沒有定義數據組織方式。MaxCompute 2.0能否通過定義數據分片、排序和索引提高效率?MaxCompute 2.0哈希分片 Hash ClusteringCREATE TABLE table_nameCLUSTERED BY(col_name,col_name,.)SORTED BY(col_name ASC|DESC)INTO number_of_buckets BUCKETSMaxCompute 2.0區域分片 Range ClusteringCREATE TABL
2、E table_nameRANGE CLUSTERED BY(col_name,col_name,.)SORTED BY(col_name ASC|DESC)MaxCompute 2.0基于索引的查詢優化SELECT from table_nameWHERE id 3;MaxCompute 2.0基于索引的查詢優化SELECT from table_nameWHERE id 3;MaxCompute 2.0基于索引的查詢優化SELECT from table_nameWHERE id=1994-01-01 and l_shipdate=0.05 and l_discount=0.07and l
3、_quantity 24;020406080100120w/clusteringw/o clusteringQuery Execution Time(s)01234567w/clusteringw/o clusteringCPU Usage(cores*minute)01E+092E+093E+094E+095E+096E+097E+098E+09w/clusteringw/o clusteringIO Usage(bytes)MaxCompute 2.0Join優化SELECT t1.id,t1.name,t2.nameFROM t1,t2 WHERE t1.id=t2.id;MaxComp
4、ute 2.0Join優化MaxCompute 2.0TPC-H Q4select o_orderpriority,count(*)as order_count from tpch_orders o join(select distinct l_orderkey from(select*from tpch_lineitem where l_commitdate=1993-07-01 and o.o_orderdate 1993-10-01 group byo_orderpriority order by o_orderpriority limit999999;05010015020025030
5、0350400450w/clusteringw/o clusteringQuery Execution Time(s)0510152025w/clusteringw/o clusteringCPU Usage(cores*minute)051015202530354045w/clusteringw/o clusteringMemory Usage(GB*minutes)MaxCompute 2.0應用實例 淘寶交易記錄查詢基于用戶ID查詢數日內交易記錄。掃描數據量非常大,3TB,400億條記錄。數據選取率非常低。結果集通常為幾十到近百條記錄。篩選率小于億分之一。QPS低,但要求低延遲以支持準實
6、時查詢場景。原有系統使用全表掃描方式,1100個Worker,需要約2分鐘完成。MaxCompute 2.0應用實例 淘寶交易記錄查詢使用Hash Clustering進行改造。以用戶ID為主鍵,對表進行數據哈希切分和排序同樣查詢只需要4個Mapper,掃描10000條記錄,6秒完成。MaxCompute 2.0應用實例 淘系交易表增量更新淘系核心交易表需要周期性增量更新。以增量表數據插入或者更新(如果交易記錄在全量表中已存在)全量表。類似關系數據庫的INSERT UPDATE操作。全量表數據量巨大,記錄數在百億、千億級別。增量表相對很小,為原表的十分之一,甚至百分之一。每次更新需要對原表和增
7、量表進行Shuffle,以便進行Join去重,資源消耗巨大。MaxCompute 2.0應用實例 淘系交易表增量更新對核心交易表進行Hash Clustering改造,以交易記錄ID作為主鍵切片。更新時,只需要按全量表的方式shuffle增量表,然后做Join。避免了對全量表的多次Shuffle操作。整個Join執行時間從60分鐘降低到25分鐘,快了一倍,完全省掉了全量表的Shuffle操作。MaxCompute 2.0總結通過對數據進行分片和排序,并建立索引,MaxCompute可以更好的理解數據。查詢條件謂詞下推,減少了表掃描的IO量,以及運行時過濾操作的時間。利用數據分片和排序特性,直接避免了多次對數據Shuffle的操作,簡化了執行計劃,節約資源,節省時間。MaxCompute 2.0