使用Curl查询Druid SQL时WHERE子句报错求助
问题解决:Druid SQL查询INFORMATION_SCHEMA.COLUMNS报错"Column 'myTable' not found"
错误原因
你的SQL语句犯了SQL语法规范错误:用双引号包裹了字符串常量。在SQL中,双引号用于标识数据库对象(如列名、表名),单引号才是用来包裹字符串值的。
你的查询语句WHERE "TABLE_NAME"="myTable"会被解析为:"查找TABLE_NAME列的值等于myTable列的值的记录",但不存在名为myTable的列,因此抛出Column 'myTable' not found错误。
另外从你提供的无WHERE子句查询结果来看,你可能混淆了表名和列名:
- 实际表名是
apim_metrics(对应TABLE_NAME字段) myTable是该表下的一个列名(对应COLUMN_NAME字段)
正确的查询写法
根据你的需求,分两种情况给出正确的curl命令:
情况1:查询名为apim_metrics的表的所有列信息
curl -kv -H "Content-Type: application/json" -X POST http://localhost:8082/druid/v2/sql?pretty --data '{"query" : "SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE \"TABLE_NAME\"=''apim_metrics''"}'
或者使用JSON转义双引号的写法:
curl -kv -H "Content-Type: application/json" -X POST http://localhost:8082/druid/v2/sql?pretty --data '{"query" : "SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE \"TABLE_NAME\"=\"apim_metrics\""}'
情况2:查询所有表中名为myTable的列信息
curl -kv -H "Content-Type: application/json" -X POST http://localhost:8082/druid/v2/sql?pretty --data '{"query" : "SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE \"COLUMN_NAME\"=''myTable''"}'
关键注意事项
- Druid的INFORMATION_SCHEMA字段名(如
TABLE_NAME、COLUMN_NAME)是大小写敏感的,必须用双引号包裹才能正确识别 - SQL中的字符串值必须用单引号包裹,避免被解析为数据库对象名
- 在bash中使用curl发送JSON数据时,若JSON内部包含单引号,需要用两个单引号
''转义;若包含双引号,需要用\"转义
内容的提问来源于stack exchange,提问作者Christian68
相关产品推荐
相关产品推荐

