Trino/Presto中Elasticsearch DSL透传查询编码报错问题
解决Trino/Presto Elasticsearch透传DSL查询的base32编码错误
问题根源
你把包含GET /my_index/_search的完整HTTP请求内容拿去编码了,但官方要求只编码DSL的JSON查询部分,不需要带请求行,这才导致编码格式报错:“Elasticsearch query for '<my_index>' is not base32-encoded correctly”(Elasticsearch针对'<my_index>'的查询未正确进行base32编码)。
修复步骤
提取纯JSON查询内容
去掉GET /my_index/_search这一行,保留纯JSON结构:{ "query": { "bool": { "must": { "range": { "val": { "gte": 1 } } } } } }正确执行base32编码
对上述纯JSON字符串进行base32编码,可使用在线工具或命令行工具,比如Linux下:echo -n '{"query":{"bool":{"must":{"range":{"val":{"gte":1}}}}}' | base32提示:可以压缩JSON去掉换行和空格,编码结果更简洁,也能避免潜在的格式问题。
替换到SQL语句中
将编码后的字符串替换到<a_query_dsl>的位置,最终SQL示例:SELECT * FROM elasticsearch.default."my_index$MFRGGZDFMZTWQ2LKNNWG23TPOBYXE43UIFBQXU6JAMRQGI2LOM======"
额外注意事项
- 确保编码内容是有效的JSON,没有语法错误
- base32编码结果通常为大写字母和数字,部分工具可能生成小写,建议统一转为大写后使用
- 如果编码后长度过长,可以尝试压缩JSON(去掉所有空格、换行)再编码
内容的提问来源于stack exchange,提问作者Sow Bocar Amadou Malick
相关产品推荐
相关产品推荐

