時空內(nèi)存索引
Lindorm Ganos時空服務(wù)在Lindorm流引擎中實現(xiàn)了基于內(nèi)存的RTree索引,即時空內(nèi)存索引。時空內(nèi)存索引能夠在進行流表JOIN操作時顯著提升針對時空數(shù)據(jù)的查詢效率。在使用Lindorm流引擎處理計算任務(wù)時,您可以在連接器(Connector)中設(shè)置相關(guān)參數(shù)的值,選擇是否構(gòu)建時空內(nèi)存索引。本文介紹時空內(nèi)存索引的使用限制及使用方法。
使用限制
一張表僅支持構(gòu)建一個時空內(nèi)存索引,且參與索引構(gòu)建的數(shù)據(jù)必須滿足以下條件:
點坐標:經(jīng)度在[-180°,180°]范圍內(nèi),緯度在[-90°,90°]范圍內(nèi)。
面或線段:時空對象不能為空。
使用方法
您可以通過以下兩種方式開啟時空內(nèi)存索引:
在Lindorm流引擎的寬表連接器中配置相關(guān)參數(shù)開啟時空內(nèi)存索引,語句如下:
CREATE TABLE lindorm_table ( c1 INT, c2 VARCHAR, c3 GEOMETRY, PRIMARY KEY (c1, c2) NOT ENFORCED ) WITH ( 'connector'='lindorm', 'seedServer'='ld-bp17pwu1541ia****-proxy-lindorm.lindorm.rds.aliyuncs.com:30020', 'userName'='yourUser', 'password'='yourPassword', 'tableName'='yourTableName', 'namespace'='yourNamespace', 'geomHint'='c3:st_contains', 'geomIndex'='true', 'cacheTTLMs'='1800000' );
geomHint、geomIndex和cacheTTLMs為時空內(nèi)存索引參數(shù),其中
'geomIndex'='true'
表示構(gòu)建索引。更多介紹,請參見配置流引擎的寬表連接器。通過SQL HINT動態(tài)指定時空寬表連接器的參數(shù)。
如果在寬表連接器中未設(shè)置時空內(nèi)存索引參數(shù),可以在創(chuàng)建查詢?nèi)蝿?wù)時通過SQL HINT來動態(tài)添加配置。
假設(shè)已創(chuàng)建流表
carData
,包含車輛編碼carID、車輛經(jīng)度lng、車輛緯度lat三列。在地理圍欄過濾查詢時,啟用時空內(nèi)存索引的語句如下:SELECT A.carID, B.c1, B.c2 FROM carData AS A JOIN lindorm_table /*+ OPTIONS('geomHint'='c3:st_contains','geomIndex'='true','cacheTTLMs'='1800000') */ FOR SYSTEM_TIME AS A.proctime AS B ON B.c3=ST_MakePoint(A.lng, A.lat);