在 elasticsearch/opensearch 中翻译 SQL 查询时如何检索索引名称

how to retrieve the index name when translating SQL query in elasticsearch/opensearch

根据 elasticsearch/opendistro 的官方文档,SQL translate API 可以将 SQL 查询转换为 elasticsearch DSL。但是,它只有 returns 列、过滤器、大小和排序运算符,没有任何 index/table 名称。

例如,给定 sql 查询 SELECT * FROM library LIMIT 2,SQL 翻译 API 将响应:

{
  "size": 2,
  "_source": false,
  "fields": [
    {
      "field": "author"
    },
    {
      "field": "name"
    },
    {
      "field": "page_count"
    },
    {
      "field": "release_date",
      "format": "strict_date_optional_time_nanos"
    }
  ]
}

并且缺少索引名称 (library)。我试过opendistro,还是一样。

请注意,对于跨两个 table/index 的聚合查询,它将 return Physical PlanLogical Plan 包含 TableScan 属性。

目前 Elasticsearch 不支持翻译 API 的 return 索引名称。已经打开 Github 个问题 #41856

它会 return 你只查询源,你需要使用你在 SQL 中使用的相同索引名称执行翻译源,否则它会抛出错误或 return 意外#34594 GitHub 问题中提到的结果。