Apache Druid创建lookup表后查询报错Lookup [province] not found求助
问题根因
- Lookup绑定的层级(tier)不匹配:你创建的lookup归属到
hot_tier,而Druid的lookup配置是按tier分发的,只有配置了归属hot_tier的Broker、Historical节点才会加载该lookup。如果处理你的SQL查询的节点没有加入hot_tier,就无法识别到该lookup资源。 - 配置未完成集群同步:Lookup Web UI能看到配置仅代表元数据已经存入Coordinator,配置同步到所有查询节点通常需要30~60秒,同步完成前执行查询会触发找不到的错误。
- 缺少显式启用配置:你提交的lookup配置中没有声明
enabled: true,部分Druid版本中未显式启用的lookup不会被节点主动加载。 - 集群未开启Lookup SQL支持:部分自定义部署的Druid集群会默认关闭lookup的SQL调用能力,需要额外开启对应配置。
解决方案
- 修正lookup创建配置,补充启用字段并升级版本号触发同步,修改后的请求payload如下:
curl --location --request POST 'http://localhost:8888/druid/coordinator/v1/lookups/config' \ --header 'Content-Type: application/json' \ --data-raw '{ "hot_tier": { "province": { "version": "1.2", "enabled": true, "lookupExtractorFactory": { "type": "map", "map": { "10": "province1", "61": "province2" } } } } }'
- 确认查询节点的tier配置:检查Broker、Historical节点的
runtime.properties文件,确保配置项druid.server.tier=hot_tier。如果你的节点默认归属_default_tier,也可以直接把lookup创建到_default_tier下,避免tier不匹配问题。 - 等待配置同步完成后再执行查询,正确的SQL写法如下:
SELECT cityCode,cityName, LOOKUP(CAST(provinceCode AS VARCHAR), 'province') as province from cities
- 确认Broker配置中
druid.sql.planner.lookupFunctionEnabled设置为true,如果为false需要修改配置后重启Broker生效。 - 可通过Broker接口直接验证lookup是否加载完成:执行
curl http://localhost:8082/druid/broker/v1/lookups/status,返回结果中包含province则代表加载完成。
内容的提问来源于stack exchange,提问作者smbanaei
相关产品推荐
相关产品推荐

