Elasticsearch SQL中能否过滤DESCRIBE/SHOW COLUMNS的输出结果?
问题
我用下面的Elasticsearch SQL查询获取索引结构:
GET /_sql?format=txt { "query" :""" DESCRIBE "index_name" """ }
这个查询能正常执行,输出如下:
column | type | mapping ----------------------------------------------------------- column_name1 | STRUCT | object column_name1.Id | VARCHAR | text column_name1.Id.keyword | VARCHAR | keyword
请问能不能通过filter或WHERE子句对上述查询的输出进行过滤?比如下面两种写法是否可行:
写法一:
GET /_sql?format=txt { "query":""" DESCRIBE "index_name" """, "filter": {"terms": {"type.keyword": ["STRUCT"]}} }
写法二:
GET /_sql?format=txt { "query":""" DESCRIBE "index_name" WHERE "type" = 'STRUCT' """ }
解答
你给出的两种写法都不可行,原因如下:
- 写法一(带filter参数):
filter参数是Elasticsearch SQL中针对索引文档数据的过滤条件,仅作用于实际存储的文档内容;而DESCRIBE返回的是索引元数据,不属于文档范畴,所以这个filter不会对结果产生任何影响。 - 写法二(DESCRIBE加WHERE子句):Elasticsearch SQL的
DESCRIBE语句语法不支持直接追加WHERE子句,这样写会触发语法错误。
如果需要过滤索引结构的输出,可以改用查询information_schema.columns系统表的方式——这是Elasticsearch SQL中获取元数据的标准方式,支持WHERE过滤:
GET /_sql?format=txt { "query":""" SELECT column_name, data_type, type_name FROM information_schema.columns WHERE table_name = 'index_name' AND data_type = 'STRUCT' """ }
这个查询会返回指定索引中类型为STRUCT的列信息,完全符合你想要的过滤需求。
内容的提问来源于stack exchange,提问作者Przemek Nawrocki
相关产品推荐
相关产品推荐

