SQL 问题

Q1. 查询报错:Failed to get scan range, no queryable replica found in tablet: xxxx

这种情况是因为对应的 tablet 没有找到可以查询的副本,通常原因可能是 BE 宕机、副本缺失等。可以先通过 show tablet tablet_id 语句,然后执行后面的 show proc 语句,查看这个 tablet 对应的副本信息,检查副本是否完整。同时还可以通过 show proc "/cluster_balance" 信息来查询集群内副本调度和修复的进度。

关于数据副本管理相关的命令,可以参阅 数据副本管理

Q2. show backends/frontends 查看到的信息不完整

在执行如show backends/frontends 等某些语句后,结果中可能会发现有部分列内容不全。比如 show backends 结果中看不到磁盘容量信息等。

通常这个问题会出现在集群有多个 FE 的情况下,如果用户连接到非 Master FE 节点执行这些语句,就会看到不完整的信息。这是因为,部分信息仅存在于 Master FE 节点。比如 BE 的磁盘使用量信息等。所以只有在直连 Master FE 后,才能获得完整信息。

当然,用户也可以在执行这些语句前,先执行 set forward_to_master=true; 这个会话变量设置为 true 后,后续执行的一些信息查看类语句会自动转发到 Master FE 获取结果。这样,不论用户连接的是哪个 FE,都可以获取到完整结果了。

Q3. invalid cluster id: xxxx

这个错误可能会在 show backends 或 show frontends 命令的结果中出现。通常出现在某个 FE 或 BE 节点的错误信息列中。这个错误的含义是,Master FE 向这个节点发送心跳信息后,该节点发现心跳信息中携带的 cluster id 和本地存储的 cluster id 不同,所以拒绝回应心跳。

Doris 的 Master FE 节点会主动发送心跳给各个 FE 或 BE 节点,并且在心跳信息中会携带一个 cluster_id。cluster_id 是在一个集群初始化时,由 Master FE 生成的唯一集群标识。当 FE 或 BE 第一次收到心跳信息后,则会将 cluster_id 以文件的形式保存在本地。FE 的该文件在元数据目录的 image/目录下,BE 则在所有数据目录下都有一个 cluster_id 文件。之后,每次节点收到心跳后,都会用本地 cluster_id 的内容和心跳中的内容作比对,如果不一致,则拒绝响应心跳。

该机制是一个节点认证机制,以防止接收到集群外的节点发送来的错误的心跳信息。

如果需要恢复这个错误。首先要先确认所有节点是否都是正确的集群中的节点。之后,对于 FE 节点,可以尝试修改元数据目录下的 image/VERSION 文件中的 cluster_id 值后重启 FE。对于 BE 节点,则可以删除所有数据目录下的 cluster_id 文件后重启 BE。

Q4. Unique Key 模型查询结果不一致

某些情况下,当用户使用相同的 SQL 查询一个 Unique Key 模型的表时,可能会出现多次查询结果不一致的现象。并且查询结果总在 2-3 种之间变化。

这可能是因为,在同一批导入数据中,出现了 key 相同但 value 不同的数据,这会导致,不同副本间,因数据覆盖的先后顺序不确定而产生的结果不一致的问题。

比如表定义为 k1, v1。一批次导入数据如下:

  1. 1, "abc"
  2. 1, "def"

那么可能副本 1 的结果是 1, "abc",而副本 2 的结果是 1, "def"。从而导致查询结果不一致。

为了确保不同副本之间的数据先后顺序唯一,可以参考 Sequence Column 功能。

Q5. 查询 bitmap/hll 类型的数据返回 NULL 的问题

在 1.1.x 版本中,在开启向量化的情况下,执行查询数据表中 bitmap 类型字段返回结果为 NULL 的情况下,

  1. 首先你要 set return_object_data_as_binary=true;

  2. 关闭向量化 set enable_vectorized_engine=false;

  3. 关闭 SQL 缓存 set [global] enable_sql_cache = false;

这里是因为 bitmap / hll 类型在向量化执行引擎中:输入均为 NULL,则输出的结果也是 NULL 而不是 0

Q6. 访问对象存储时报错:curl 77: Problem with the SSL CA cert

如果 be.INFO 日志中出现 curl 77: Problem with the SSL CA cert 错误。可以尝试通过以下方式解决:

  1. https://curl.se/docs/caextract.html 下载证书:cacert.pem

  2. 拷贝证书到指定位置:sudo cp /tmp/cacert.pem /etc/ssl/certs/ca-certificates.crt

  3. 重启 BE 节点。

Q7. 导入报错:”Message”: “[INTERNAL_ERROR]single replica load is disabled on BE.”

  1. be.conf 中增加 enable_single_replica_load = true

  2. 重启 BE 节点。