Типы данных
Тип Elasticsearch | Тип Elasticsearch SQL | Тип SQL | Точность SQL |
Основные типы | |||
| NULL | 0 | |
| BOOLEAN | 1 | |
| TINYINT | 3 | |
| SMALLINT | 5 | |
| INTEGER | 10 | |
| BIGINT | 19 | |
| BIGINT | 20 | |
| DOUBLE | 15 | |
| REAL | 7 | |
| FLOAT | 3 | |
| DOUBLE | 15 | |
| VARCHAR | 32 766 | |
| VARCHAR | 2 147 483 647 | |
| VARBINARY | 2 147 483 647 | |
| TIMESTAMP | 29 | |
| VARCHAR | 39 | |
| VARCHAR | 32 766 | |
Сложные типы | |||
| STRUCT | 0 | |
| STRUCT | 0 | |
Неподдерживаемые типы | |||
не указанные выше типы |
| OTHER | 0 |
Большинство типов данных Elasticsearch доступны в Elasticsearch SQL, как указано выше. Как видно, все типы данных Elasticsearch сопоставляются с типом данных с тем же именем в Elasticsearch SQL, за исключением типа данных date, который сопоставляется с datetime в Elasticsearch SQL. Это сделано для того, чтобы избежать путаницы с типами ANSI SQL DATE (только дата) и TIME (только время), которые также поддерживаются Elasticsearch SQL в запросах (с использованием CAST/CONVERT), но не соответствуют фактическому отображению в Elasticsearch (см. table ниже).
Очевидно, что не все типы в Elasticsearch имеют эквивалент в SQL и наоборот, поэтому Elasticsearch SQL использует особенности типов первого, а не второго, поскольку в конечном итоге Elasticsearch является хранилищем.
Помимо указанных выше типов, Elasticsearch SQL также поддерживает типы SQL, специфичные для среды выполнения, которые не имеют эквивалента в Elasticsearch. Такие типы не могут загружаться из Elasticsearch (поскольку он о них не знает), однако могут использоваться в запросах или результатах Elasticsearch SQL.
В таблице ниже показаны эти типы:
Тип SQL | Точность SQL |
| 29 |
| 18 |
| 7 |
| 7 |
| 23 |
| 23 |
| 23 |
| 23 |
| 7 |
| 23 |
| 23 |
| 23 |
| 23 |
| 23 |
| 23 |
| 52 |
| 2 147 483 647 |
| 2 147 483 647 |
SQL и многопольные данные
Ключевое понятие в Elasticsearch — это поле analyzed, представляющее собой полное текстовое значение, интерпретируемое для эффективной индексации. Эти поля имеют тип text и не используются для сортировки или агрегаций, так как их фактическое значение зависит от используемого analyzer. Именно поэтому Elasticsearch также предлагает тип keyword для хранения точного значения.
В большинстве случаев, по умолчанию, для строк используются оба типа, что поддерживается Elasticsearch с помощью многопольных индексов, то есть возможности индексировать одну и ту же строку несколькими способами; например, индексировать её как text для поиска, но также и как keyword для сортировки и агрегаций.
Поскольку SQL требует точных значений, при встрече с полем text Elasticsearch SQL будет искать точный многопольный индекс, который он может использовать для сравнений, сортировки и агрегаций. Для этого он будет искать первый keyword, который не нормализован, и использовать его как точное исходное значение поля.
Рассмотрим следующую схему string маппинга:
{
"first_name": {
"type": "text",
"fields": {
"raw": {
"type": "keyword"
}
}
}
} Следующий SQL-запрос:
SELECT first_name FROM index WHERE first_name = 'John'
эквивалентен:
SELECT first_name FROM index WHERE first_name.raw = 'John'
так как Elasticsearch SQL автоматически выбирает многопольный индекс raw из raw для точного сопоставления.
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/sql-data-types.html