データ型

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 <br>[preview]<br>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.<br> 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 データ型は Elasticsearch SQL では datetime にマッピングされています。これは、ANSI SQL タイプの DATE(日付のみ)および TIME(時間のみ)との混乱を避けるためであり、これらも Elasticsearch SQL のクエリでサポートされています(CAST/CONVERTを使用)。ただし、Elasticsearch には実際のマッピングが存在しません(以下の table を参照)。

明らかに、Elasticsearch のすべてのタイプには SQL での同等物があるわけではなく、その逆も同様です。したがって、Elasticsearch SQL は、最終的には Elasticsearch がバックストアであるため、前者のデータ型の 特性 を後者のものよりも使用します。

上記のタイプに加えて、Elasticsearch SQL は、Elasticsearch に同等物がない 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 マッピングを考慮してください:

Js

  1. {
  2. "first_name": {
  3. "type": "text",
  4. "fields": {
  5. "raw": {
  6. "type": "keyword"
  7. }
  8. }
  9. }
  10. }

次の SQL クエリ:

Sql

  1. SELECT first_name FROM index WHERE first_name = 'John'

は次のように同じです:

Sql

  1. SELECT first_name FROM index WHERE first_name.raw = 'John'

Elasticsearch SQL は自動的に raw マルチフィールドを raw から正確な一致のために 選択 します。