时空内存索引

Lindorm Ganos时空服务在Lindorm流引擎中实现了基于内存的RTree索引,即时空内存索引。时空内存索引能够在进行流表JOIN操作时显著提升针对时空数据的查询效率。在使用Lindorm流引擎处理计算任务时,您可以在连接器(Connector)中设置相关参数的值,选择是否构建时空内存索引。本文介绍时空内存索引的使用限制及使用方法。

使用限制

一张表仅支持构建一个时空内存索引,且参与索引构建的数据必须满足以下条件:

  • 点坐标:经度在[-180°,180°]范围内,纬度在[-90°,90°]范围内。

  • 面或线段:时空对象不能为空。

使用方法

您可以通过以下两种方式开启时空内存索引:

  • 在Lindorm流引擎的宽表连接器中配置相关参数开启时空内存索引,语句如下:

    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'
    );

    geomHintgeomIndexcacheTTLMs为时空内存索引参数,其中'geomIndex'='true'表示构建索引。更多介绍,请参见配置流引擎的宽表连接器

  • 通过SQL HINT动态指定时空宽表连接器的参数。

    如果在宽表连接器中未设置时空内存索引参数,可以在创建查询任务时通过SQL HINT来动态添加配置。

    假设已创建流表carData,包含车辆编码carID、车辆经度lng、车辆纬度lat三列。在地理围栏过滤查询时,启用时空内存索引的语句如下:

    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);