tencent cloud

文档反馈

SQL 支持

最后更新时间:2020-06-22 17:23:27

    腾讯云 Elasticsearch 支持使用 SQL 代替 DSL 查询语言。对于从事产品运营、数据分析等工作以及初次接触 ES 的人,使用 SQL 语言进行查询,将会降低他们使用 ES 的学习成本。

    ES 提供了两种 SQL 解析器。ES 所有的开源版本,均预装了开源社区提供的 SQL 解析插件。ES 6.4.3及以上版本,包括基础版和白金版,支持使用 ES 原生的 SQL 解析器。

    原生 SQL 解析器

    使用 SQL 的 API 进行简单的查询。

    POST /_xpack/sql?format=txt
    {
        "query": "SELECT * FROM my_index"
    }

    更多原生 SQL 解析器的 API 及使用方法请参见 官方文档

    开源 SQL 解析插件

    • 7.5.1版本:
      POST /_nlpcn/sql 
      {
      "sql":"select * from test_index"
      }
    • 其他版本:
      POST /_sql 
      {
      "sql":"select * from test_index"
      }

    更多 SQL 插件的 API 及使用方法请参见 文档

    SQL JDBC 访问

    ES 6.4.3及以上的白金版中,支持通过 JDBC 访问 ES 集群。您首先需要下载 JDBC 驱动,JDBC 驱动可以在 官网下载,或在 Maven 中添加依赖来下载:

    <dependency>
      <groupId>org.elasticsearch.plugin</groupId>
      <artifactId>x-pack-sql-jdbc</artifactId>
      <version>6.4.3</version>
    </dependency>

    SQL JDBC 访问示例代码:

    import java.sql.*;
    import java.util.Properties;
    
    public class Main {
    
        public static void main(String[] args) {
            try {
                Class.forName("org.elasticsearch.xpack.sql.jdbc.jdbc.JdbcDriver");
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
                return;
            }
            String address = "jdbc:es://http://YOUR_ES_VIP:9200";
            Properties properties = new Properties();
            properties.put("user", "elastic");
            properties.put("password", "YOUR_PASS");
    
            Connection connection = null;
            try {
                connection = DriverManager.getConnection(address, properties);
                Statement statement = connection.createStatement();
                ResultSet results = statement.executeQuery("select FlightNum from kibana_sample_data_flights limit 10");
                while (results.next()) {
                    System.out.println(results.getString(1));
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    if (connection != null && !connection.isClosed()) {
                        connection.close();
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持