Типы данных
Тип Elasticsearch | Тип Elasticsearch SQL | Тип SQL | Точность SQL |
Основные типы | |||
| NULL | 0 | |
| BOOLEAN | 1 | |
| TINYINT | 3 | |
| SMALLINT | 5 | |
| INTEGER | 10 | |
| BIGINT | 19 | |
| 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 | |
Сложные типы | |||
| 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/7.17/sql-data-types.html