# TD Native Data Types

Treasure AI は、多くの異なるデータのソースとターゲットをサポートしています。プラットフォーム全体でスキーマの一貫性を保つため、Treasure AI は table schema に特定の native data types を使用します。

Treasure Data (TD) は、Trino や Hive などの異なる query engine を使用してクエリを処理します。各エンジンには独自の data type system があり、TD native data types は query engine で使用可能な型にマッピングされます。

[TD native data types と query engine、storage の関係](#td-native-data-types-%E3%81%A8-query-enginestorage-%E3%81%AE%E9%96%A2%E4%BF%82)を理解することが重要です。理解していない場合、期待とは異なる query result や data type が表示されることがあります。

サポートされていない data type を保存する場合は、`cast()` を使用して TD が natively supported data type に変換することを検討してください。

## サポートされている TD native data types

次の TD native data types は table schema で使用できます。

| Data type | 説明 |
|  --- | --- |
| `string` | テキスト値。 |
| `int` | 整数値。 |
| `long` | long 整数値。 |
| `float` | 浮動小数点値。 |
| `double` | 倍精度浮動小数点値。 |
| `array of strings` | 要素が strings の array。 |
| `array of ints` | 要素が integers の array。 |
| `array of longs` | 要素が long integers の array。 |
| `array of floats` | 要素が floating-point values の array。 |
| `array of doubles` | 要素が double-precision floating-point values の array。 |
| `array of arrays of strings` | inner array の要素が strings である nested array。 |
| `array of arrays of ints` | inner array の要素が integers である nested array。 |
| `array of arrays of longs` | inner array の要素が long integers である nested array。 |
| `array of arrays of floats` | inner array の要素が floating-point values である nested array。 |
| `array of arrays of doubles` | inner array の要素が double-precision floating-point values である nested array。 |


Schema edit UI では、array types は `array of strings`、`array of ints`、`array of longs`、`array of floats`、`array of doubles`、または nested `array of arrays of ...` types として選択します。

## TD native data types と query engine、storage の関係

TD native data types は、ユーザーが table schema に選択する schema type です。query engine と storage にはそれぞれ独自の type system があるため、同じ column でも確認する場所によって異なる型として表現されることがあります。

### Query engine type mapping

| **Treasure Data**  | **Trino**  | **Hive**  |
|  --- | --- | --- |
| `int` | `bigint` | `smallint` |
| `int` | `bigint` | `int` |
| `long` | `bigint` | `bigint` |
| `double` | `double` | `decimal` |
| `float` | `double` | `float` |
| `double` | `double` | `double` |
| `string` または `int` に変換 | `boolean` | `boolean` |
| `string` | `varchar` | `string` または `varchar` |
| `string` または `long` に変換 | `date` | `string` |
| `string` または `long` に変換 | `timestamp` | `timestamp` |


Array types は、各 query engine の対応する array type にマッピングされます。

| **TD native data type**  | **Query engine representation**  |
|  --- | --- |
| `array of strings` | string values の array。 |
| `array of ints`、`array of longs` | integer または bigint values の array。 |
| `array of floats`、`array of doubles` | floating-point values の array。 |
| `array of arrays of ...` | nested array values。 |


query engine によって type syntax の表示が異なる場合があります。query engine の data types については、OSS ドキュメントを参照してください。

* [Trino](https://trino.io/docs/423/language/types.html)
* [Hive](https://hive.apache.org/docs/latest/language/languagemanual-types/)


### Storage format

TD は table data を MessagePack mpc1 format で保存します。MessagePack mpc1 は内部 storage format であり、ユーザーが Schema edit UI で選択する TD native data types とは異なります。

### Query result type behavior

一部の query result path では、table schema で選択した TD native data type そのものではなく、マッピング後の型が表示されることがあります。たとえば、ResultWorker の Hive query result では、`float` data type は `double` data type になります。

| **TD primitive data types**  | **ResultWorker の Hive query result**  | **Trino result msgpack ValueType**  |
|  --- | --- | --- |
| `int` | `int` > `int` | Integer |
| `long` | `bigint` > `long` | integer |
| `float` | `float` > `double` | float |
| `double` | `double` > `double` | float |
| `string` | `string` > `string` | string |