如何通过DORIS REST API用HTTP协议实现流式查询?PyMysql连9030可行吗?
Doris 流式查询与PyMysql连接问题解答
一、HTTP协议(8030端口)实现流式查询
8030是Doris FE的HTTP端口,默认的/api/sql接口会一次性返回全量结果,大数据量下易出现内存溢出或超时。要实现流式查询,需调整请求参数:
- 发送POST请求到
http://<FE_HOST>:8030/api/sql时,添加请求头X-Stream-Result: true,开启流式返回模式。 - 在请求体的JSON参数中设置
fetch_size(例如{"sql": "SELECT * FROM large_table", "fetch_size": 10000}),控制每次返回的数据行数。 - 客户端需支持解析分块响应(
Transfer-Encoding: chunked),逐块读取并处理数据,避免一次性加载全量结果到内存。
二、PyMysql连接Doris 9030端口的可行性
完全可行,9030是Doris FE的MySQL协议兼容端口,Doris实现了标准MySQL协议,可直接用PyMysql连接:
- 核心是使用**服务器端游标(SSCursor)**实现流式查询,避免客户端内存过载,示例代码:
import pymysql # 建立连接 conn = pymysql.connect( host="<FE_HOST>", port=9030, user="your_username", password="your_password", db="your_database" ) # 使用服务器端游标,逐行获取数据 with conn.cursor(pymysql.cursors.SSCursor) as cursor: cursor.execute("SELECT * FROM large_table") # 逐行处理数据 for row in cursor: # 替换为你的数据处理逻辑 print(row) conn.close()
- 注意:Doris对MySQL语法的兼容并非100%,部分MySQL特有语法(如存储过程)暂不支持,需根据Doris官方文档调整SQL语句。
内容的提问来源于stack exchange,提问作者MEGALO
相关产品推荐
相关产品推荐

