Elasticsearch Connector
要求与配置
对ES的版本要求:(Elasticsearch 6.6.0 or later) or OpenSearch (1.1.0 or later) 。
connector.name=elasticsearch
elasticsearch.host=190.168.1.1,190.168.1.2,190.168.1.3
elasticsearch.port=9200
elasticsearch.default-schema-name=default
常规配置
Property name | Description | Default |
---|---|---|
elasticsearch.host |
以逗号分隔的Elasticsearch节点连接的主机名称列表。这个属性是必需的。 | |
elasticsearch.port |
要连接的Elasticsearch节点的端口。 | 9200 |
elasticsearch.default-schema-name |
包含所有没有限定模式名称的定义的表的模式。 | default |
elasticsearch.scroll-size |
设置每个Elasticsearch滚动请求所能返回的最大点击数。 | 1000 |
elasticsearch.scroll-timeout |
Elasticsearch为滚动请求保持搜索上下文的超时时长。 | 1m |
elasticsearch.request-timeout |
所有Elasticsearch请求的超时值。 | 10s |
elasticsearch.connect-timeout |
所有Elasticsearch连接尝试的超时值。 | 1s |
elasticsearch.backoff-init-delay |
对Elasticsearch的单个请求进行反压重试的最小时间间隔。设置得太低,可能会使ES集群负载过高。 | 500ms |
elasticsearch.backoff-max-delay |
对Elasticsearch的单个请求进行反压重试的最大时间。 | 20s |
elasticsearch.max-retry-time |
对Elasticsearch的单个请求,在所有重试中的最大持续时间。 | 20s |
elasticsearch.node-refresh-interval |
可用的Elasticsearch节点列表多久刷新一次。 | 1m |
elasticsearch.ignore-publish-address |
禁止使用Elasticsearch发布的地址来连接查询。 |
密码认证配置
要启用密码认证,需要将elasticsearch.security
选项设置为PASSWORD
。此外,还需要适当地配置以下选项:
Property name | Description |
---|---|
elasticsearch.auth.user |
用户登录名称 |
elasticsearch.auth.password |
用户密码 |
字段类型映射
Elasticsearch type | Trino type | Notes |
---|---|---|
BOOLEAN |
BOOLEAN |
|
DOUBLE |
DOUBLE |
|
FLOAT |
REAL |
|
BYTE |
TINYINT |
|
SHORT |
SMALLINT |
|
INTEGER |
INTEGER |
|
LONG |
BIGINT |
|
KEYWORD |
VARCHAR |
|
TEXT |
VARCHAR |
|
DATE |
TIMESTAMP |
Elasticsearch支持大量的日期格式,包括内置日期格式和自定义日期格式。Elasticsearch连接器只支持默认的日期类型。所有其他的日期格式,包括内置日期格式和自定义日期格式,都不被支持。带有格式属性的日期会被忽略。 |
IPADDRESS |
IP |
特殊情况的处理
数组类型的处理
借助索引的元信息配置(_meta.presto
)对字段进行数组标注,通过数组函数可以进行数据的处理。
curl --request PUT \
--url localhost:9200/doc/_mapping \
--header 'content-type: application/json' \
--data '
{
"_meta": {
"trino":{
"array_string_field":{
"isArray":true
},
"object_field":{
"array_int_field":{
"isArray":true
}
},
}
}
}'
样例数据
{
"array_string_field": ["trino","the","lean","machine-ohs"],
"long_field": 314159265359,
"id_field": "564e6982-88ee-4498-aa98-df9e3f6b6109",
"timestamp_field": "1987-09-17T06:22:48.000Z",
"object_field": {
"array_int_field": [86,75,309],
"int_field": 2
}
}
原始JSON(RawJson)的处理
对于在Elasticsearch支持的类型,却在Trino中不被支持,如dense_vector。或者新的类型不断出现,这可能会导致在Elasticsearch中使用这些类型的用户出现解析异常。Trino提出来原始json的方式来解决异常。借助索引的元信息配置(_meta.presto
)对字段进行原生json标注,该字段以及下面的所有嵌套字段都需要被转换为一个包含原始JSON内容的VARCHAR
字段。通过JSON函数可以进行数据的处理。
curl --request PUT \
--url localhost:9200/doc/_mapping \
--header 'content-type: application/json' \
--data '
{
"_meta": {
"presto":{
"array_string_field":{
"asRawJson":true
}
}
}
}'
⚠️ 一个字段不能同时被标注成数组和原生json
查询
全文检索
Trino SQL查询可以与Elasticsearch查询相结合,提供全文查询作为表名的一部分,用冒号分隔。
SELECT * FROM "tweets: +trino SQL^2"
select * from elasticsearch."default"."allcountries: Roc"
谓词下推
predicate push down:将数据过滤尽可能的靠近数据源,以在查询与关联的时候跳过更多的无关数据。
支持谓词下推的数据类型:
Elasticsearch | Trino | 是否支持 |
---|---|---|
binary |
VARBINARY |
NO |
boolean |
BOOLEAN |
YES |
double |
DOUBLE |
YES |
float |
REAL |
YES |
byte |
TINYINT |
YES |
short |
SMALLINT |
YES |
integer |
INTEGER |
YES |
long |
BIGINT |
YES |
keyword |
VARCHAR |
YES |
text |
VARCHAR |
NO |
date |
TIMESTAMP |
YES |
ip |
IPADDRESS |
NO |
sql支持程度
只支持数据查询和一些元数据的查询
Table functions
原生查询raw_query(varchar) -> table
raw_query
函数允许你直接查询底层数据库。这个函数需要Elastic Query DSL语法,因为完整的查询是在Elasticsearch中下推和处理。这对于访问Trino中没有的原生功能或提高查询性能是非常有用的,在这种情况下运行原生查询可能会更快。
传递给底层数据源的原生查询需要返回一个表作为结果集。只有数据源使用自己的配置为这些查询执行验证或安全检查。Trino不执行这些任务。只使用直通式查询来读取数据。
raw_query
函数需要三个参数:
-
schema
: 要执行查询的目录中的模式。 -
index
: 要搜索的Elasticsearch中的索引。 -
query
: 要执行的查询,用Elastic Query DSL编写。
一旦执行,查询就会返回一条包含Elasticsearch返回的结果JSON有效载荷的单行。(其实结果原生查询的返回结果,满足json格式的字符串)
例如,查询example
目录并使用raw_query
表函数在orders
索引中搜索国家名称为ALGERIA
的文档:
SELECT
*
FROM
TABLE(
example.system.raw_query(
schema => 'sales',
index => 'orders',
query => '{
"query": {
"match": {
"name": "ALGERIA"
}
}
}'
)
);
select
*
from
table(
elasticsearch.system.raw_query(
schema => 'default',
index => 'allcountries',
query => '{
"query": {
"match": {
"name": "China"
}
}
}'
)
);
📓查询引擎不保留这个函数的结果的顺序。如果传递的查询包含一个ORDER BY子句,函数结果可能不会像预期的那样排序。原生查询的排序也需要原生语法支持文章来源:https://www.toymoban.com/news/detail-734534.html
查询结果文章来源地址https://www.toymoban.com/news/detail-734534.html
{"took":3,"timed_out":false,"_shards":{"total":5,"successful":5,"skipped":0,"failed":0},"hits":{"total":142,"max_score":3.254666,"hits":[{"_index":"allcountries","_type":"_doc","_id":"UCLidYgBOCz7_9E9_5x3","_score":3.254666,"_source":{"name": "Canal Tancada", "geonameid": 3038965, "longitude": 1.55854, "country_code": "AD", "latitude": 42.488990000000001, "population": 0}},{"_index":"allcountries","_type":"_doc","_id":"fSLidYgBOCz7_9E9_6F7","_score":3.254666,"_source":{"name": "Canal Gran", "geonameid": 3040296, "longitude": 1.5885499999999999, "country_code": "AD", "latitude": 42.552370000000003, "population": 0}},{"_index":"allcountries","_type":"_doc","_id":"tiLidYgBOCz7_9E9_6F8","_score":3.254666,"_source":{"name": "Canal Fosca", "geonameid": 3040353, "longitude": 1.5380199999999999, "country_code": "AD", "latitude": 42.601190000000003, "population": 0}},{"_index":"allcountries","_type":"_doc","_id":"tyLidYgBOCz7_9E9_6F8","_score":3.254666,"_source":{"name": "Canal Fosca", "geonameid": 3040354, "longitude": 1.5561499999999999, "country_code": "AD", "latitude": 42.502000000000002, "population": 0}},{"_index":"allcountries","_type":"_doc","_id":"gCLidYgBOCz7_9E9_6N9","_score":3.254666,"_source":{"name": "Canal Dreta", "geonameid": 3040817, "longitude": 1.4865900000000001, "country_code": "AD", "latitude": 42.506630000000001, "population": 0}},{"_index":"allcountries","_type":"_doc","_id":"HyLidYgBOCz7_9E9_5x3","_score":3.1907582,"_source":{"name": "Canal Torta", "geonameid": 3038916, "longitude": 1.5170600000000001, "country_code": "AD", "latitude": 42.576839999999997, "population": 0}},{"_index":"allcountries","_type":"_doc","_id":"eiLidYgBOCz7_9E9_6F7","_score":3.1907582,"_source":{"name": "Canal Gran", "geonameid": 3040293, "longitude": 1.4723900000000001, "country_code": "AD", "latitude": 42.58005, "population": 0}},{"_index":"allcountries","_type":"_doc","_id":"gSLidYgBOCz7_9E9_6F7","_score":3.1907582,"_source":{"name": "Canal Gran", "geonameid": 3040300, "longitude": 1.4840100000000001, "country_code": "AD", "latitude": 42.475360000000002, "population": 0}},{"_index":"allcountries","_type":"_doc","_id":"3iLidYgBOCz7_9E9_6J9","_score":3.1907582,"_source":{"name": "Canal d’Engolasters", "geonameid": 3040652, "longitude": 1.5842799999999999, "country_code": "AD", "latitude": 42.527250000000002, "population": 0}},{"_index":"allcountries","_type":"_doc","_id":"ICLidYgBOCz7_9E9_5x3","_score":3.0922737,"_source":{"name": "Canal Torta", "geonameid": 3038917, "longitude": 1.5398000000000001, "country_code": "AD", "latitude": 42.551839999999999, "population": 0}}]}}
到了这里,关于【Trino实战】Elasticsearch Connector辅助说明的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!