Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Guide [8.17] ›SQL ›Язык SQL

Типы данных

Тип Elasticsearch

Тип Elasticsearch SQL

Тип SQL

Точность SQL

Основные типы

null

null

NULL

0

boolean

boolean

BOOLEAN

1

byte

byte

TINYINT

3

short

short

SMALLINT

5

integer

integer

INTEGER

10

long

long

BIGINT

19

unsigned_long

[preview] This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. unsigned_long

BIGINT

20

double

double

DOUBLE

15

float

float

REAL

7

half_float

half_float

FLOAT

3

scaled_float

scaled_float

DOUBLE

15

keyword type family

keyword

VARCHAR

32 766

text

text

VARCHAR

2 147 483 647

binary

binary

VARBINARY

2 147 483 647

date

datetime

TIMESTAMP

29

ip

ip

VARCHAR

39

version

version

VARCHAR

32 766

Сложные типы

object

object

STRUCT

0

nested

nested

STRUCT

0

Неподдерживаемые типы

не указанные выше типы

unsupported

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

date

29

time

18

interval_year

7

interval_month

7

interval_day

23

interval_hour

23

interval_minute

23

interval_second

23

interval_year_to_month

7

interval_day_to_hour

23

interval_day_to_minute

23

interval_day_to_second

23

interval_hour_to_minute

23

interval_hour_to_second

23

interval_minute_to_second

23

geo_point

52

geo_shape

2 147 483 647

shape

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API