常见问题

更新时间:
复制 MD 格式

本文介绍 Lindorm 列存索引的常见问题。

计费与容量

Q:创建列存索引后是否会产生额外费用?

A:会。费用主要包含两部分:

  • 列存索引数据的存储费用

  • 主表与列存索引之间数据同步实际使用的 CU 费用

Q:宽表中的数据因 TTL 过期被清除后,列存索引数据是否会被自动清除?

A:不会。列存索引不感知宽表的 TTL 策略。如需清理列存索引数据,请在业务侧显式处理。

分区策略

Q:分区表达式中是否可以包含非主键字段?

A:不可以。普通分区表达式Bucket 分区表达式中的字段必须全部为宽表主键字段。

Q:Bucket 分区表达式是否可以包含复杂计算?

A:不可以。Bucket 分区表达式仅接受 bucket(bucket_num, column_name) 形式,column_name 需为主键字段。

Q:分区数目过大或过小会有什么影响?

A:

  • 过大:元数据膨胀,影响查询效率。建议单分区数据量 ≥ 50 MB,Bucket 数目 ≤ 1024

  • 过小:影响数据读写吞吐或造成倾斜。建议单分区数据量 ≤ 512 MB

索引管理

Q:一张宽表能否创建多个列存索引?

A:可以。同一张宽表支持多个列存索引,同时可以由多个不同的引擎模式承载(例如一个 OLAP 模式索引 + 一个 Lake 模式索引)。

Q:列存索引创建失败了,再次创建为什么会报错?

A:一张宽表不允许创建同名列存索引,无论该索引当前状态是否为失败。请先执行 DROP INDEX 删除失败的索引,再重新创建。详见 DROP INDEX

Q:是否可以通过 Lindorm 计算引擎直接访问列存索引数据?

A:可以。您需要先自定义索引表的名称(lindorm_columnar.user.index.database / lindorm_columnar.user.index.table),然后通过计算引擎访问。具体操作请参见访问列存数据

请谨慎执行列存索引表的手工修改操作(例如 ALTER TABLEDROP TABLE),可能导致数据同步失败。如需修改,请联系 Lindorm 技术支持(钉钉号:s0s3eg3)。

OLAP 模式相关

Q:为什么创建 OLAP 模式的列存索引后,主表的 WAL_EDIT_WITH_FULL_ROW 属性被自动开启了?

A:这是 OLAP 模式的必要前置。为保证 OLAP 引擎主键表能拿到完整的行数据完成 UPSERT,Lindorm 会自动开启 FULL_WAL 让 WAL 中始终携带完整行内容。该操作幂等,不会影响主表已有的业务写入语义。

Q:OLAP 模式的列存表中,__timestamp 列有何用途?

A:__timestamp 是 Lindorm 自动写入的隐式列,用于让 OLAP 引擎主键表判定记录版本(值越大越新)。业务 SQL 通常无需感知该列。

Q:能否将已存在的 Lake 模式列存索引在线切换为 OLAP 模式?

A:目前不支持在线切换。建议使用热重建方案:创建一个 OLAP 模式的新索引,等 ACTIVE 后删除旧索引并切换列存表名。

Q:OLAP 模式下 sr.resourceGroup 报错 does not exist for current instance,如何排查?

A:请检查:

  1. 参数拼写是否正确(不区分大小写,但推荐使用与控制台一致的小写)。

  2. 该资源组是否存在于当前实例,且类型为 OLAP(Lindorm 只允许将 OLAP 类型的资源组作为列存索引后端)。

  3. 当前 Token 是否具备该资源组的访问权限。

如无法定位问题,请联系 Lindorm 技术支持。

JSON 与 Schema

Q:一个 JSON 字段可以同时配置静态展开和动态展开吗?

A:不可以。同一个 JSON 字段只能配置在 jsonMapping.dynamicJsonColumns 中的一处。

Q:为什么我配置了 dynamicJsonColumns,存量数据中的 JSON 展开字段是空的?

A:动态 JSON 展开仅在增量同步阶段生效,对存量数据构建阶段不生效。这是当前实现的已知限制。如果您需要对存量 JSON 数据展开,请使用静态展开jsonMapping.)。

Q:主表启用了通配符列,我在 OLAP 模式下建了 dynamicSchema=true 的索引,为什么通配符列没有同步?

A:通配符列同步当前仅在 Lake 模式下支持。OLAP 模式会跳过通配符列并记录警告日志。若您强依赖通配符列同步,请使用 Lake 模式。

其他

Q:如何联系技术支持?

A:Lindorm 技术支持钉钉号:s0s3eg3