You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中连接云部署Druid并执行查询?

Druid云生产环境连接失败排查与解决

问题描述

本地Druid实例可通过Python的druid_query库正常执行查询,但连接云生产环境Druid时触发json.decoder.JSONDecodeError错误。当前在AWS机器上运行脚本,Druid部署在另一台机器,日常需通过VPN访问,用cURL调用broker API仅本地环境可行。

原代码:

from druid_query.client import Client
from druid_query.queries import Sql

client = Client(sql_endpoint='http://druid_url.vpc/console.html#query')

query = Sql('SELECT * FROM table1 LIMIT 5')

result = client.execute(query)

print(result)

报错信息:

Traceback (most recent call last):
  File "/Users/pankaj/pani/scripts/druid.py", line 8, in <module>
    result = client.execute(query)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/druid_query/client.py", line 50, in execute
    return process_response(resp, query)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/druid_query/client.py", line 94, in process_response
    return resp.json()
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/httpx/_models.py", line 742, in json
    return jsonlib.loads(self.content.decode(encoding), **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/json/__init__.py", line 346, in loads
    return _default_decoder.decode(s)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/json/decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/json/decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

核心问题与修复方案

1. 修正SQL端点地址

你错误地将Druid控制台的网页地址(console.html#query)传给了sql_endpoint参数,该参数需要的是Druid Broker的SQL API接口地址,正确格式为http://druid_broker_host:port/druid/v2/sql/。

修改后的代码:

from druid_query.client import Client
from druid_query.queries import Sql

# 替换为实际的Druid Broker地址和端口(默认端口为8888)
client = Client(sql_endpoint='http://druid_url.vpc:8888/druid/v2/sql/')

query = Sql('SELECT * FROM table1 LIMIT 5')

result = client.execute(query)

print(result)

2. 验证网络连通性

  • 确认AWS机器已成功连接VPN,可通过ping druid_url.vpc或telnet druid_url.vpc 8888测试端口连通性。
  • 若VPN正常但仍无法访问,检查Druid Broker的安全组/防火墙规则,确认是否允许AWS机器的IP访问8888端口(Druid默认Broker端口)。

3. 检查API响应格式

修正端点后若仍报错,先手动用cURL测试API是否返回合法JSON:

curl -X POST -H "Content-Type: application/json" -d '{"query":"SELECT * FROM table1 LIMIT 5"}' http://druid_url.vpc:8888/druid/v2/sql/

若返回HTML或非JSON内容,说明端点仍错误,或Druid Broker配置存在问题。

4. 认证与权限检查

若云环境Druid开启了认证(如Basic Auth),需在Client初始化时传入认证信息:

client = Client(
    sql_endpoint='http://druid_url.vpc:8888/druid/v2/sql/',
    auth=('username', 'password')
)

内容的提问来源于stack exchange,提问作者Pankaj Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 17:53:21