访问宽表数据

更新时间:
复制为 MD 格式

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 资源组将自动完成查询优化加速。

向量检索

如果宽表引擎数据已经构建了向量索引,可通过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}

语法说明:

  1. 变量含义:

    变量名

    变量含义

    ${SELECT_LIST}

    查询目标列

    ${TABLE_NAME}

    目标表

    ${CONDITION}

    标量过滤条件

    ${EMBEDDING_COLUMN}

    构建向量索引列

    ${TARGET_VECTOR}

    目标向量 (字符串表达的浮点数组)

    ${K}

    返回最相似的 K 个数据

  2. 距离函数:支持 l2_distance 。

  3. 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    |               |         |
+----------------+---------------------+------+-------+---------+---------------+---------+

数据查询:

  1. 大范围数据聚合

    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 资源组将自动完成查询优化加速。

  2. 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 资源组将自动完成查询优化加速。

参数说明

在索引构建完成后,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 时关闭索引自动优化。