すべてのプロダクト
Search
ドキュメントセンター

Dataphin:データ型

最終更新日:Feb 06, 2025

Dataphin は現在、コンピュートエンジンとして MaxCompute 2.0 を使用しています。このトピックでは、Dataphin 内で MaxCompute 2.0 がサポートするデータ型について概要を説明します。

シナリオ

MaxCompute V2.0 データ型エディションは、プロジェクトに 2020 年 4 月より前に生成されたデータが含まれておらず、MaxCompute V2.0 データ型エディションをサポートするコンポーネントに依存しているシナリオに適しています。

基本データ型

定数の例

説明

TINYINT

1Y および -127Y

8 ビット符号付き整数型です。

有効値の範囲は -128 ~ 127 です。

SMALLINT

32767S および -100S

16 ビット符号付き整数型です。

有効値の範囲は -32768 ~ 32767 です。

INT

1000 および -15645787

32 ビット符号付き整数型です。

有効値の範囲は -231 ~ 231-1 です。

BIGINT

100000000000L および -1L

64 ビット符号付き整数型です。

有効値の範囲は -263+1 ~ 263 -1 です。

BINARY

  • unhex('FA34E10293CB42848573A4E39937F479')

  • X'616263'

最大長が 8 MB のバイナリ数値です。

説明
  • X'num [...]' 形式では、num は 16 進数で、0~9 または A~F を使用できます。たとえば、X'616263'abc を表します。これは、a の ASCII エンコーディングが 0x61b0x62c0x63 であるためです。X'616263'unhex('616263') と同等です。

  • 文字列の長さが奇数の場合は、システムによって 0 が前に追加されます。たとえば、X'616'X'0616' と同等です。

  • 単一引用符を使用します。二重引用符は無効です。たとえば、X"616263" は BINARY 定数として認識されません。

FLOAT

3.14F および cast(3.14159261E+7 as float)

32 ビットのバイナリ浮動小数点型です。

説明

FLOAT データ型の計算では、コンピューターのストレージと内部計算ロジックにより、精度が低下する可能性があります。高精度の要件の場合は、FLOAT データを DECIMAL データに変換することを検討してください。

DOUBLE

3.14D および 3.14159261E+7

64 ビットのバイナリ浮動小数点型です。

説明

DOUBLE データ型の計算では、コンピューターのストレージと内部計算ロジックにより、精度が低下する可能性があります。高精度の要件の場合は、DOUBLE データを DECIMAL データに変換することを検討してください。

DECIMAL(precision,scale)

3.5BD および 99999999999.9999999BD

10 進数に基づく正確な数値型です。

  • precision は、表現可能な最大桁数を定義します。有効値: 1 <= precision <= 38

  • scale は、小数点以下の桁数を定義します。有効値: 0 <= scale <= 18

精密度とスケールが指定されていない場合、デフォルトは decimal(38,18) です。

説明
  • 異なるエディションの DECIMAL 型を同じテーブルに共存させることはできません。

  • setproject odps.sql.hive.compatible=true; コマンドで Hive 互換モードを有効にすると、トンネルアップロード操作と SQL 操作中に Decimal(precision, scale) 型の小数点以下の桁数が scale を超えた場合、その桁数が四捨五入されます。整数部分が制限を超えた場合は、エラーが報告されます。

  • odps.sql.decimal.tostring.trimzerotrue に設定すると、小数点以下の末尾のゼロが削除されます。 false に設定すると、末尾のゼロが保持されます。デフォルトは true です。このパラメーターは、テーブルから読み取られたデータのみに影響し、静的値には適用されません。

VARCHAR(n)

なし

可変長文字型。n は長さを指定します。

有効値: 1 ~ 65535。

CHAR(n)

なし

固定長文字型。n によって長さが定義されます。最大 255 文字です。長さが足りない場合は、パディングのためにスペースが追加されます。ただし、これらのスペースは比較時には考慮されません。

STRING

"abc"、'bcd'、"alibaba"、'inc'

最大長が 8 MB の文字列型です。

DATE

DATE'2017-11-11'

yyyy-mm-dd 形式の日付型です。

有効値の範囲は 0001-01-01 ~ 9999-12-31 です。

DATETIME

DATETIME'2017-11-11 00:00:00'

DATETIME 型です。

有効値の範囲は 0001-01-01 00:00:00.000 ~ 9999-12-31 23:59:59.999 で、ミリ秒単位の精度です。

TIMESTAMP

TIMESTAMP'2017-11-11 00:00:00.123456789'

TIMESTAMP データ型です。

有効値の範囲は 0001-01-01 00:00:00.000000000 ~ 9999-12-31 23:59:59.999999999 で、ナノ秒単位の精度です。

説明

タイムスタンプはタイムゾーンに依存しません。すべてのタイムゾーンで一貫性のある、エポック (UTC 1970-01-01 00:00:00) からの日付オフセットが格納されます。TIMESTAMP データは、ビルトイン関数を使用してタイムゾーン計算用に操作できます。たとえば、cast(<タイムスタンプ> as string) を使用して、現在のタイムゾーンに基づいて TIMESTAMP を STRING データに変換できます。

TIMESTAMP_NTZ

TIMESTAMP_NTZ '2017-11-11 00:00:00.123456789'

タイムゾーンを考慮しない TIMESTAMP データ型です。

有効値の範囲は 0000-01-01 00:00:00.000000000 ~ 9999-12-31 23:59:59.999999999 です。TIMESTAMP_NTZ データ型の詳細については、「MaxCompute TIMESTAMP_NTZ データ型のドキュメント」をご参照ください。

BOOLEAN

True および False

BOOLEAN 型です。

有効値: True および False。

以下の点にご注意ください。

  • 上記のすべてのデータ型は、NULL 値をサポートしています。

  • SQL 文の INT キーワードは、32 ビット整数型を指します。

    -- a を 32 ビット整数に変換します。
    CAST(a AS INT)
  • デフォルトでは、整数定数は INT 型として処理されます。たとえば、SELECT 1 + a; の整数定数 1 は、INT 型として処理されます。定数が INT 型の値の範囲を超えていても、BIGINT 型の値の範囲を超えていない場合は、定数は BIGINT 型として処理されます。定数が BIGINT 型の値の範囲を超えている場合は、定数は DOUBLE 型として処理されます。

  • 暗黙的な変換

    • 一部の暗黙的な変換は無効になっています。データ型が STRING から BIGINT、STRING から DATETIME、DOUBLE から BIGINT、DECIMAL から DOUBLE、または DECIMAL から BIGINT に変換されると、精度が低下したり、エラーが発生したりする可能性があります。CAST 関数を使用して、データ型の変換を強制できます。

    • VARCHAR 型の定数は、STRING 型に暗黙的に変換できます。

  • テーブル、ビルトイン関数、ユーザー定義関数 (UDF)

    • MaxCompute V2.0 データ型エディションを必要とするビルトイン関数を実行できます。

    • UDF で定義されたデータ型は、MaxCompute V2.0 データ型エディションに基づいて解析およびオーバーロードされます。

    • パーティションキー列のデータ型は、STRING、VARCHAR、CHAR、TINYINT、SMALLINT、INT、または BIGINT にすることができます。

  • STRING 型の定数は連結をサポートしています。2 つ以上の文字列は、自動的に 1 つの文字列に連結されます。たとえば、select 'abc' 'efg' 'ddt'; を実行すると、戻り値は abcefgddt になります。

  • 定数が DECIMAL 型のフィールドに挿入される場合、定数の式は定数定義の形式に準拠している必要があります。例: 次のサンプルコードの 3.5BD

    INSERT INTO test_tb(a) VALUES (3.5BD)
  • DATETIME 値にはミリ秒は含まれません。ミリ秒単位の精度で時間形式を指定するには、-dfp パラメーターをトンネルコマンドで使用します (tunnel upload -dfp 'yyyy-MM-dd HH:mm:ss.SSS' など)。詳細については、「トンネルコマンドのドキュメント」をご参照ください。

複合データ型

データ型定義コンストラクター
ARRAY
  • array<int>
  • array<struct<a:int, b:string>>
  • array(1, 2, 3)
  • array(array(1, 2), array(3, 4))
MAP
  • map<string, string>
  • map<smallint, array<string>>
  • map("k1", "v1", "k2", "v2")
  • map(1S, array('a', 'b'), 2S, array('x', 'y'))
STRUCT
  • struct<x:int, y:int>
  • struct<field1:bigint, field2:array<int>, field3:map<int, int>>
  • named_struct('x', 1, 'y', 2)
  • named_struct('field1', 100L, 'field2', array(1, 2), 'field3', map(1, 100, 2, 200))
説明

MaxCompute は、ネストされた構造を含む複合データ型をサポートしています。ビルトイン関数の詳細については、「ARRAY」、「MAP」、および「STRUCT」をご参照ください。