Elasticsearch|Elasticsearch(通过 JDBC 使用 SQL 来查询索引 - DBeaver)

Elasticsearch 的 SQL 访问层能够通过两种最常用的数据库管理系统 (DBMS) 协议提供数据访问,Java 数据库连接 (JDBC) 和开放数据库连接 (ODBC)。 这些驱动程序可以安装在客户端应用程序中,以便轻松地将 Elasticsearch 与最流行的工具集成,例如:

  • DBeaver
  • Microsoft Excel
  • Microsoft Power BI
  • Qlik Sense Desktop
  • Tableau
  • SQL Workbench
在我之前的文章 “Elasticsearch:使用 JDBC client 连接到 Elasticsearch” 详细描述了如何使用 JDBC 来连接 Elasticsearch 并使用 SQL 来查询 Elasticsearch。在那篇文章中,我使用了 SQL Workbench 来进行展示。在今天的文章中,我将使用 DBeaver 来进行展示。 我展示的版本是最新的 Elastic Stack 8.3.3。

安装及下载
  • 我们首先按照 “Elastic:开发者上手指南” 安装好自己的 Elasticsearch 及 Kibana。我们安装 Elastic Stack 8.x。
  • 我也按照Download | DBeaver Community下载 macOS 的 DBeaver。
我们接下来在地址 Download JDBC Client | Elastic下载 JDBC client,并保存于自己的电脑目录中。

启动白金试用 试用许可证必须处于活动状态才能使用 SQL JDBC 连接到 Elasticsearch; 它可以在 Kibana 中的 Stack Management 下轻松设置 | Licence Management。 这也可以通过执行以下 API 调用来完成:
POST /_license/start_trial?acknowledge=true&pretty

【Elasticsearch|Elasticsearch(通过 JDBC 使用 SQL 来查询索引 - DBeaver)】Elasticsearch|Elasticsearch(通过 JDBC 使用 SQL 来查询索引 - DBeaver)
文章图片


连接 Elasticsearch 我们将使用以下步骤通过 DBeaver 查询我们的数据:
1)启动 DBeaver:
Elasticsearch|Elasticsearch(通过 JDBC 使用 SQL 来查询索引 - DBeaver)
文章图片

我们需要配置一个新的数据库连接。 在 DBMS 的全文部分下选择 Elasticsearch:
Elasticsearch|Elasticsearch(通过 JDBC 使用 SQL 来查询索引 - DBeaver)
文章图片

Elasticsearch|Elasticsearch(通过 JDBC 使用 SQL 来查询索引 - DBeaver)
文章图片

Elasticsearch|Elasticsearch(通过 JDBC 使用 SQL 来查询索引 - DBeaver)
文章图片

由于我的版本是最新的 Elastic Stack 8.3.3,所以我们删除上面已经有的版本。我们添加在上面下载的最新的驱动 x-pack-sql-jdbc-8.3.3.jar。
Elasticsearch|Elasticsearch(通过 JDBC 使用 SQL 来查询索引 - DBeaver)
文章图片

Elasticsearch|Elasticsearch(通过 JDBC 使用 SQL 来查询索引 - DBeaver)
文章图片

由于我们的 Elasticsearxh 是 HTTPS 的安装,所以,我们需要重新修改上面的 host 为 https://localhost。
Elasticsearch|Elasticsearch(通过 JDBC 使用 SQL 来查询索引 - DBeaver)
文章图片

如果这个时候,我们点击 Test Connection,我们会发现如下的结果:
Elasticsearch|Elasticsearch(通过 JDBC 使用 SQL 来查询索引 - DBeaver)
文章图片

显然,我们遇到了一个证书的问题。因为我们的安装是自签名的,我们必须为 DBeaver 安装这个访问 Elasticsearch 的证书。
我们先来看看 Elasticsearch 安装目录:
$ pwd /Users/liuxg/test/elasticsearch-8.3.3 $ ls config/certs/ http.p12http_ca.crttransport.p12

接下来,我们需要把 http.p12 这个证书配置到Dbeaver 的 truststore 里:
Elasticsearch|Elasticsearch(通过 JDBC 使用 SQL 来查询索引 - DBeaver)
文章图片

在上面所示的 ssl.truststore.pass,我们可以通过如下的方法来得到:
$ pwd /Users/liuxg/test/elasticsearch-8.3.3 $ ./bin/elasticsearch-keystore list keystore.seed xpack.security.http.ssl.keystore.secure_password xpack.security.transport.ssl.keystore.secure_password xpack.security.transport.ssl.truststore.secure_password $ ./bin/elasticsearch-keystore show xpack.security.http.ssl.keystore.secure_password wbyn1r52TQa3dyZnET3wEA

我们再次点击上面的 Test Connection ... 按钮:
Elasticsearch|Elasticsearch(通过 JDBC 使用 SQL 来查询索引 - DBeaver)
文章图片

上面显示我们的连接是成功的。
针对如果只要 crt 格式的证书,我们可以使用如下的方法来得获得:
$ pwd /Users/liuxg/test/elasticsearch-8.3.3 $ keytool -import -keystore elasticsearch.p12 -file /Users/liuxg/test/elasticsearch-8.3.3/config/certs/http_ca.crt Enter keystore password: Owner: CN=Elasticsearch security auto-configuration HTTP CA Issuer: CN=Elasticsearch security auto-configuration HTTP CA Serial number: 5b6094cc0214d5b519a823ed4249cfacc31d7348 Valid from: Fri Jul 29 16:51:11 CST 2022 until: Mon Jul 28 16:51:11 CST 2025 Certificate fingerprints: SHA1: 53:3C:0A:0B:78:D0:E5:E4:84:70:5B:AD:40:79:35:8B:C5:97:CF:EA SHA256: 8D:CE:0B:68:03:1C:AD:F1:D0:61:BB:ED:1B:AF:61:3E:29:3E:62:13:76:B6:A8:D5:9F:1A:03:98:61:A3:E7:B7 Signature algorithm name: SHA256withRSA Subject Public Key Algorithm: 4096-bit RSA key Version: 3Extensions: #1: ObjectId: 2.5.29.35 Criticality=false AuthorityKeyIdentifier [ KeyIdentifier [ 0000: 6A 5A 41 A0 84 BA C2 A29F DD 49 DC 56 A6 E0 ECjZA.......I.V... 0010: CE 30 47 FE.0G. ] ]#2: ObjectId: 2.5.29.19 Criticality=true BasicConstraints:[ CA:true PathLen: no limit ]#3: ObjectId: 2.5.29.14 Criticality=false SubjectKeyIdentifier [ KeyIdentifier [ 0000: 6A 5A 41 A0 84 BA C2 A29F DD 49 DC 56 A6 E0 ECjZA.......I.V... 0010: CE 30 47 FE.0G. ] ]Trust this certificate? [no]:yes Certificate was added to keystore $ ls LICENSE.txtbinelasticsearch.p12 libplugins NOTICE.txtconfighttp_ca.crtlogs README.asciidocdatajdk.appmodules $ pwd /Users/liuxg/test/elasticsearch-8.3.3 $ ls /Users/liuxg/test/elasticsearch-8.3.3/elasticsearch.p12 /Users/liuxg/test/elasticsearch-8.3.3/elasticsearch.p12

如上所示,它利用 http_ca.crt 文件来生成了一个叫做 elasticsearch.p12 的证书。在生产证书时,它需要我们输入一个密码。我设置它为 123456。接下来,我们可以在 DBeaver 中做如下的配置:
Elasticsearch|Elasticsearch(通过 JDBC 使用 SQL 来查询索引 - DBeaver)
文章图片

Elasticsearch|Elasticsearch(通过 JDBC 使用 SQL 来查询索引 - DBeaver)
文章图片

同样我们可以看到连接是成功的。

准备索引我们接下来使用 Kibana 自带的索引数据。我们需要加载:
Elasticsearch|Elasticsearch(通过 JDBC 使用 SQL 来查询索引 - DBeaver)
文章图片

Elasticsearch|Elasticsearch(通过 JDBC 使用 SQL 来查询索引 - DBeaver)
文章图片

Elasticsearch|Elasticsearch(通过 JDBC 使用 SQL 来查询索引 - DBeaver)
文章图片

这样我们就加载了一个叫做 kibana_sample_data_flights 的索引。
Elasticsearch|Elasticsearch(通过 JDBC 使用 SQL 来查询索引 - DBeaver)
文章图片

我们可以看到最新被摄入的 kibana_sample_data_flights 索引的数据。我们可以选择 Data 来查看数据:
Elasticsearch|Elasticsearch(通过 JDBC 使用 SQL 来查询索引 - DBeaver)
文章图片

Elasticsearch 的 SQL JDBC 驱动程序使用标准 Elasticsearch 端口 9200,它将来自不同应用程序的所有连接包装在标准 JDBC 查询和 ResultSet 中,从而允许与 Elasticsearch 无缝集成。
在 DBeaver 中创建连接后,Elasticsearch 可以用作其他最常见的 DBMS(以及 MySQL、PostgreSQL、Oracle 和 Microsoft SQL Server), 你可以简单地使用标准 SQL SELECT 来执行查询。 结果以标准 SQL ResultSet 的形式返回,如以下屏幕截图所示:
Elasticsearch|Elasticsearch(通过 JDBC 使用 SQL 来查询索引 - DBeaver)
文章图片

更多关于 Elasticsearch SQL 的文章请参阅文章:
  • Elasticsearch:Elasticsearch SQL介绍及实例 (一)
  • Elasticsearch:Elasticsearch SQL介绍及实例(二)
参考:
【1】DBeaver | Elasticsearch Guide [8.3] | Elastic

    推荐阅读