OLAP资源组支持面向宽表数据的多种查询范式,包括主键点查、非主键过滤、数据分析、全文搜索、向量检索等,并支持综合利用宽表引擎各类数据索引,实现查询自动加速。本文主要介绍访问宽表数据的多种方式。
前提条件
主键查询
主键查询是指根据主键列过滤数据的查询,可以根据全部主键列或部分主键列进行点查和范围查询。
宽表表结构示例:
-- 已建好如下宽表,宽表主键为 user_id 和 order_id
+-------------+---------------------+------+-------+---------+---------------+---------+
| Field | Type | Null | Key | Default | Extra | Comment |
+-------------+---------------------+------+-------+---------+---------------+---------+
| user_id | VARCHAR(1073741824) | No | true | NULL | partition key | |
| order_id | VARCHAR(1073741824) | No | true | NULL | partition key | |
| amount | DOUBLE | Yes | false | NULL | | |
| status | VARCHAR(1073741824) | Yes | false | NULL | | |
| region | VARCHAR(1073741824) | Yes | false | NULL | | |
| create_time | VARCHAR(1073741824) | Yes | false | NULL | | |
+-------------+---------------------+------+-------+---------+---------------+---------+数据查询:
-- 等值过滤查询
SELECT * FROM orders WHERE user_id='u001' AND order_id='o10001';
-- 非等值过滤查询
SELECT * FROM orders WHERE user_id='u001' AND order_id>='o10001';
-- 部分主键过滤查询
SELECT * FROM orders WHERE user_id>='u001';非主键查询
非主键查询是指根据非主键列过滤数据的查询。
宽表表结构示例:
-- 已建好如下宽表,宽表主键为 user_id 和 order_id
+-------------+---------------------+------+-------+---------+---------------+---------+
| Field | Type | Null | Key | Default | Extra | Comment |
+-------------+---------------------+------+-------+---------+---------------+---------+
| user_id | VARCHAR(1073741824) | No | true | NULL | partition key | |
| order_id | VARCHAR(1073741824) | No | true | NULL | partition key | |
| amount | DOUBLE | Yes | false | NULL | | |
| status | VARCHAR(1073741824) | Yes | false | NULL | | |
| region | VARCHAR(1073741824) | Yes | false | NULL | | |
| create_time | VARCHAR(1073741824) | Yes | false | NULL | | |
+-------------+---------------------+------+-------+---------+---------------+---------+数据查询:
-- 等值过滤查询
SELECT * FROM orders WHERE region='Beijing';
-- 非等值过滤查询
SELECT * FROM orders WHERE create_time>='2026-02-26 10:30:00';
-- 字符串模糊匹配
SELECT * FROM orders WHERE status LIKE 'SH%';向量检索
如果宽表引擎数据已经构建了向量索引,可通过OLAP资源组发起对该表的向量检索——基于向量相似度完成数据召回。
查询格式:
SELECT /*+ _l_force_vector_index_(k=${K}) */ ${SELECT_LIST}
FROM ${TABLE_NAME}
WHERE ${CONDITION}
ORDER BY l2_distance(${EMBEDDING_COLUMN}, ${TARGET_VECTOR})
LIMIT ${K}语法说明:
变量含义:
变量名
变量含义
${SELECT_LIST}
查询目标列
${TABLE_NAME}
目标表
${CONDITION}
标量过滤条件
${EMBEDDING_COLUMN}
构建向量索引列
${TARGET_VECTOR}
目标向量 (字符串表达的浮点数组)
${K}
返回最相似的 K 个数据
距离函数:支持
l2_distance。Hint:通过
/*+ _l_force_vector_index_(...) */查询向量索引和配置向量查询参数,支持的参数如下:参数
是否必填
说明
k
是
返回最相似的K个数据,请注意参数
k和 LIMIT 需要保持一致。lvector.min_score
否
相似度阈值,要求返回的向量得分大于该值。返回的向量得分范围为[0,1]。
取值范围:[0,+inf]。默认值为
0。其他参数
否
可参考基础特性。
宽表表结构示例:
-- 已建好如下宽表,已对 item_embedding 列创建向量索引
+----------------+---------------------+------+-------+---------+---------------+---------+
| Field | Type | Null | Key | Default | Extra | Comment |
+----------------+---------------------+------+-------+---------+---------------+---------+
| user_id | VARCHAR(1073741824) | No | true | NULL | partition key | |
| order_id | VARCHAR(1073741824) | No | true | NULL | partition key | |
| amount | DOUBLE | Yes | false | NULL | | |
| status | VARCHAR(1073741824) | Yes | false | NULL | | |
| region | VARCHAR(1073741824) | Yes | false | NULL | | |
| create_time | VARCHAR(1073741824) | Yes | false | NULL | | |
| item_embedding | VARCHAR(1073741824) | Yes | false | NULL | | |
+----------------+---------------------+------+-------+---------+---------------+---------+数据查询:
-- 根据输入特征向量,检索最相似的前 10 个商品订单
SELECT /*+ _l_force_vector_index_(k=10, lvector.min_score=0) */
user_id,
order_id
FROM orders
WHERE region='Beijing'
ORDER BY l2_distance(item_embedding, '[0.077, 0.941, 0.917, 0.347, 0.331, 0.309, 0.127, 0.990]')
LIMIT 10;复杂分析
对海量数据进行复杂过滤、关联计算、聚合分析,支持SQL语法参考中的各类SQL算子。
宽表表结构示例:
-- 已建好如下宽表
+----------------+---------------------+------+-------+---------+---------------+---------+
| Field | Type | Null | Key | Default | Extra | Comment |
+----------------+---------------------+------+-------+---------+---------------+---------+
| user_id | VARCHAR(1073741824) | No | true | NULL | partition key | |
| order_id | VARCHAR(1073741824) | No | true | NULL | partition key | |
| amount | DOUBLE | Yes | false | NULL | | |
| status | VARCHAR(1073741824) | Yes | false | NULL | | |
| region | VARCHAR(1073741824) | Yes | false | NULL | | |
| create_time | VARCHAR(1073741824) | Yes | false | NULL | | |
| item_embedding | VARCHAR(1073741824) | Yes | false | NULL | | |
+----------------+---------------------+------+-------+---------+---------------+---------+数据查询:
大范围数据聚合
SELECT region, COUNT(*) AS order_cnt, SUM(amount) AS gmv, AVG(amount) AS aov FROM orders WHERE region IN ('Shanghai', 'Beijing') GROUP BY region ORDER BY gmv DESC;可创建列存索引,OLAP 资源组将自动完成查询优化加速。
UNION 查询
( -- 非主键数据查询 SELECT user_id, order_id, amount, status, region, create_time FROM orders WHERE region='Beijing' ) UNION ALL ( -- 非主键数据检索 SELECT user_id, order_id, amount, status, region, create_time FROM orders WHERE status LIKE 'SH%' );
参数说明
在索引构建完成后,OLAP 资源组默认开启索引自动优化,查询时会自动选择合适的索引加速查询,如果您需要强制使用或不使用索引,可以在查询时添加 Hint。如果您需要关闭索引的自动优化,可以配置会话参数。
索引名称 | Hint | 会话参数 |
/*+ _l_force_secondary_index_*/ /*+ _l_disable_secondary_index_*/ | enable_lindorm_secondary_index | |
/*+ _l_force_search_index_*/ /*+ _l_disable_search_index_*/ | enable_lindorm_search_index | |
/*+ _l_force_columnar_index_*/ /*+ _l_disable_columnar_index_*/ | enable_lindorm_columnar_index | |
/*+ _l_force_vector_index_*/ /*+ _l_disable_vector_index_*/ | enable_lindorm_vector_index |
Hint l_force为强制使用索引,l_disable为强制不使用索引,会话参数可以通过 SET {variable_name}=true/false配置,配置为 true 时开启索引自动优化,配置为 false 时关闭索引自动优化。