Elasticsearch:通过 JDBC 使用 SQL 来查询索引 - DBeaver

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

    DBeaver Microsoft Excel Microsoft Power BI Qlik Sense Desktop Tableau SQL Workbench

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

安装及下载

    我们首先按照 “” 安装好自己的 Elasticsearch 及 Kibana。我们安装 Elastic Stack 8.x。 我也按照 下载 macOS 的 DBeaver。

我们接下来在地址 下载 JDBC client,并保存于自己的电脑目录中。

启动白金试用

试用许可证必须处于活动状态才能使用 SQL JDBC 连接到 Elasticsearch; 它可以在 Kibana 中的 Stack Management 下轻松设置 | Licence Management。 这也可以通过执行以下 API 调用来完成:

POST /_license/start_trial?acknowledge=true&pretty

连接 Elasticsearch

我们将使用以下步骤通过 DBeaver 查询我们的数据:

1)启动 DBeaver:

我们需要配置一个新的数据库连接。 在 DBMS 的全文部分下选择 Elasticsearch:

由于我的版本是最新的 Elastic Stack 8.3.3,所以我们删除上面已经有的版本。我们添加在上面下载的最新的驱动 x-pack-sql-jdbc-8.3.3.jar。

由于我们的 Elasticsearxh 是 HTTPS 的安装,所以,我们需要重新修改上面的 host 为 https://localhost。

如果这个时候,我们点击 Test Connection,我们会发现如下的结果:

显然,我们遇到了一个证书的问题。因为我们的安装是自签名的,我们必须为 DBeaver 安装这个访问 Elasticsearch 的证书。

我们先来看看 Elasticsearch 安装目录:

$ pwd
/Users/liuxg/test/elasticsearch-8.3.3
$ ls config/certs/
http.p12      http_ca.crt   transport.p12

接下来,我们需要把 http.p12 这个证书配置到 Dbeaver 的 truststore 里:

在上面所示的 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 ... 按钮:

上面显示我们的连接是成功的。

针对如果只有 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: 3

Extensions: 

#1: ObjectId: 2.5.29.35 Criticality=false
AuthorityKeyIdentifier [
KeyIdentifier [
0000: 6A 5A 41 A0 84 BA C2 A2   9F DD 49 DC 56 A6 E0 EC  jZA.......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 A2   9F DD 49 DC 56 A6 E0 EC  jZA.......I.V...
0010: CE 30 47 FE                                        .0G.
]
]

Trust this certificate? [no]:  yes
Certificate was added to keystore
$ ls
LICENSE.txt       bin               elasticsearch.p12 lib               plugins
NOTICE.txt        config            http_ca.crt       logs
README.asciidoc   data              jdk.app           modules
$ 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 中做如下的配置:

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

准备索引 

我们接下来使用 Kibana 自带的索引数据。我们需要加载:

这样我们就加载了一个叫做 kibana_sample_data_flights 的索引。

我们可以看到最新被摄入的 kibana_sample_data_flights 索引的数据。我们可以选择 Data 来查看数据:

Elasticsearch 的 SQL JDBC 驱动程序使用标准 Elasticsearch 端口 9200,它将来自不同应用程序的所有连接包装在标准 JDBC 查询和 ResultSet 中,从而允许与 Elasticsearch 无缝集成。

更多关于 Elasticsearch SQL 的文章请参阅文章:

参考:

【1】

经验分享 程序员 微信小程序 职场和发展