データ型
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
{
"first_name": {
"type": "text",
"fields": {
"raw": {
"type": "keyword"
}
}
}
}
次の SQL クエリ:
Sql
SELECT first_name FROM index WHERE first_name = 'John'
は次のように同じです:
Sql
SELECT first_name FROM index WHERE first_name.raw = 'John'
Elasticsearch SQL は自動的に raw
マルチフィールドを raw
から正確な一致のために 選択 します。