Elasticsearch 커넥터
Elasticsearch 커넥터 (Elasticsearch connector)
Elasticsearch 커넥터는 Trino에서 Elasticsearch 데이터에 접근할 수 있게 해 줘요. 이 문서는 Elasticsearch 커넥터로 카탈로그를 구성해 Elasticsearch에 대해 SQL 쿼리를 실행하는 방법을 설명해요.
출처: 문서
본문
요구사항 (Requirements)
- Elasticsearch 7.x 또는 8.x
- Trino 코디네이터와 워커에서 Elasticsearch 노드로 네트워크 접근.
설정 (Configuration)
Elasticsearch 커넥터를 구성하려면 etc/catalog/example.properties 카탈로그 속성 파일을 만들고, 속성을 환경에 맞게 바꿔 다음 내용을 넣으세요:
connector.name=elasticsearch
elasticsearch.host=localhost
elasticsearch.port=9200
elasticsearch.default-schema-name=default
배열 필드 매핑
Elasticsearch는 기본적으로 배열 요소의 타입을 추론하지 못해, 배열 필드를 식별하려면 _meta 매핑을 사용해야 해요. 예를 들어 다음과 같은 문서의 배열 필드를 매핑한다면:
{
"array_string_field": ["trino","the","lean","machine-ohs"],
"long_field": 314159265359,
"id_field": "564e6982-88ee-4498-aa98-df9e3f6b6109",
"timestamp_field": "2025-09-17T06:22:48.000Z",
"object_field": {
"array_int_field": [86,75,309],
"int_field": 2
}
}
isArray 표시로 배열 필드를 지정할 수 있어요:
curl --request PUT \
--url search.example.com:9200/doc/_mapping \
--header 'content-type: application/json' \
--data '
{
"_meta": {
"trino":{
"array_string_field":{
"isArray":true
},
"object_field":{
"array_int_field":{
"isArray":true
}
}
}
}
}'
키워드 타입의 배열 필드는 properties 매핑으로도 지정할 수 있어요:
curl --request PUT \
--url search.example.com:9200/doc/_mapping \
--header 'content-type: application/json' \
--data '
{
"properties": {
"array_string_field":{
"type": "keyword"
}
}
}'
중첩 배열이 있는 문서:
[
{
"array_string_field": "trino"
},
{
"array_string_field": ["trino","is","the","best"]
},
{
"array_string_field": ["trino",["is","the","best"]]
},
{
"array_string_field": ["trino",["is",["the","best"]]]
}
]
배열 필드를 원본 JSON으로 노출하려면 asRawJson을 쓰세요:
curl --request PUT \
--url search.example.com:9200/doc/_mapping \
--header 'content-type: application/json' \
--data '
{
"_meta": {
"trino":{
"array_string_field":{
"asRawJson":true
}
}
}
}'
쿼리 예시
공백이나 특수 문자가 있는 인덱스 이름은 큰따옴표로 감싸야 해요:
SELECT * FROM "tweets: +trino SQL^2"
와일드카드 인덱스 접근:
SELECT *
FROM example.web."page_views_*";
테이블 함수로 원시 Elasticsearch 쿼리를 보낼 수도 있어요:
SELECT
*
FROM
TABLE(
example.system.raw_query(
schema => 'sales',
index => 'orders',
query => '{
"query": {
"match": {
"name": "ALGERIA"
}
}
}'
)
);
더 알아보기 (Learn more)
다른 검색 엔진 커넥터가 궁금하다면 OpenSearch 커넥터 문서를 이어서 읽어 보세요.