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

MaxCompute:MaxCompute V2.0 データ型エディション

最終更新日:Sep 16, 2025

このトピックでは、MaxCompute V2.0 データ型エディションの定義、シナリオ、サポートされているデータ型、およびこのエディションと他のデータ型エディションの違いについて説明します。

定義

プロジェクトで MaxCompute V2.0 データ型エディションを使用する場合、データ型は次のコードに基づいて定義されます。

setproject odps.sql.type.system.odps2=true; -- MaxCompute V2.0 データ型エディションを有効にします。
setproject odps.sql.decimal.odps2=true; -- MaxCompute V2.0 で DECIMAL データ型を有効にします。
setproject odps.sql.hive.compatible=false; -- Hive 互換データ型エディションを無効にします。

シナリオ

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

100000000000 L および -1L

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

有効値:-263 + 1 ~ 263 -1。

BINARY

  • unhex('FA34E10293CB42848573A4E39937F479')

  • X'616263'

2 進数。最大長は 8 MB です。

説明
  • X'num [...]'num は 16 進数値で、0 ~ 9 または A ~ F を使用できます。たとえば、X'616263'abc を表します。これは、ASCII で a0x61b0x62c0x63 であるためです。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 進数に基づく正確な数値型。このデータ型のデフォルトの式は decimal(38,18) です。精度とスケールの値を指定できます。

  • precision: 値の最大桁数を示します。有効値:1 ~ 38

  • scale: 値の小数点以下の桁数を示します。有効値:0 ~ 18

    より高いスケールが必要な場合は、set odps.sql.decimal2.extended.scale.enable=true; コマンドを実行して、スケール値の範囲を拡張できます。このフラグ パラメーターを true に設定すると、スケール値の範囲は 0 ~ 38 になります。

説明
  • 新旧エディションの DECIMAL は、同じテーブルに共存できません。

  • Hive 互換データ型エディションは、setproject odps.sql.hive.compatible=true; コマンドを実行することで有効になります。この場合、Tunnel ベースのデータ アップロードまたは SQL 操作中に、Decimal(precision,scale) 型の値の小数点以下の桁数が scale パラメーターの値を超えると、値は四捨五入されます。整数部分が制限を超えてもエラーは報告されませんが、入力データは NULL 値になります。

  • odps.sql.decimal.tostring.trimzero パラメーターが true に設定されている場合、小数点以下の末尾のゼロは削除されます。このパラメーターが 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、ナノ秒単位の精度。

説明

タイムスタンプはタイムゾーンに依存しません。どのタイムゾーンでも、タイムスタンプは Epoch(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。

BOOLEAN

True および False

BOOLEAN 型。

有効値:True および False。

INTERVAL

  • INTERVAL '2021' YEAR

  • INTERVAL '1' DAY

  • INTERVAL '2000-1' YEAR TO MONTH

  • INTERVAL '-1 23:59:59.999' DAY TO SECOND

INTERVAL 型は期間を表し、2 つの日付または時刻の間隔を表すために使用されます。INTERVAL_YEAR_MONTH と INTERVAL_DAY_TIME の 2 つの型があります。

MaxCompute V2.0 データ型エディションを使用する場合は、次の点に注意してください。

  • 上記のすべてのデータ型は、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 コマンドに追加して、ミリ秒単位の精度を持つ時間形式を指定できます。例:tunnel upload -dfp 'yyyy-MM-dd HH:mm:ss.SSS'。Tunnel コマンドの詳細については、「Tunnel コマンド」をご参照ください。

複合データ型

データ型

カスタムメソッド

構築メソッド

ARRAY

  • array<int>

  • array<struct<a:int, b:string>>

  • array(1, 2, 3)

  • array(struct(1, 2), struct(3, 4))

MAP

  • map<string, string>

  • map<smallint, array<string>>

  • map("k1", "v1","k2","v2")

  • map(1S, array("a", "b"), 2S, array('z','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))

JSON

JSON

JSON '123'

説明
  • MaxCompute の複合データ型のデータはネストでき、最大 20 レベルのネストをサポートしています。関連するビルトイン関数の詳細については、「ARRAY」、「MAP」、「構造体」、または「JSON」をご参照ください。

  • MaxCompute の複合データ型のデータの最大サイズは 1 MB を超えないようにすることをお勧めします。そうしないと、計算プロセス中にメモリ不足(OOM)エラーが発生する可能性があります。

MaxCompute V2.0 データ型エディションと他のデータ型エディションの違い

  • DML 実行ルールが異なります。

    • SET 操作の LIMIT 文の実行ルールが異なります。

      この例では、SELECT * FROM t1 UNION ALL SELECT * FROM t2 10; 文が使用されています。

      • MaxCompute V1.0 データ型エディションを使用する場合、ステートメントは SELECT * FROM t1 UNION ALL SELECT * FROM ( SELECT * FROM t2 10) t2; と表現されます。

      • MaxCompute V2.0 データ型エディションを使用する場合、ステートメントは SELECT * FROM (SELECT * FROM t1 UNION ALL SELECT * FROM t2 ) t 10; と表現されます。

      この違いは、ORDER BY句、DISTRIBUTE BY句、SORT BY句、CLUSTER BY句にも当てはまります。

    • 暗黙的な型変換ルールが異なります。

      a in (1, 2, 3) 式の場合:

      • MaxCompute V1.0 データ型エディションを使用する場合、かっこ () で囲まれたすべての値は同じ型である必要があります。

      • MaxCompute V2.0 データ型エディションを使用する場合、かっこ () で囲まれたすべての値は同じ型に暗黙的に変換できます。

      • Hive 互換データ型エディション: ソースデータの型がテーブルのデータ型に明示的に変換できる場合、MaxCompute は自動的に変換関数を挿入して実行します。

      • MaxCompute V1.0 データ型エディションおよび MaxCompute V2.0 データ型エディション: ソースデータの型は、テーブルのデータ型に暗黙的に変換可能である必要があります。そうでない場合は、エラーが返されます。

        -- Hive 互換モードでは次の操作は成功しますが、他のモードでは失敗します。
        create table t (a bigint); 
        insert into table select 1.5; 
  • 関数の動作が異なります。

    • +-*/、および POW 関数

      • Hive 互換データ型エディション: データがデータ型の値の範囲を超えると、初期値が返されます。

      • MaxCompute V1.0 データ型エディションおよび MaxCompute V2.0 データ型エディション: データがデータ型の値の範囲を超えると、エラーが返されます。その他のモードでは、値 null が返されます。

    • >>==<、および <=

      • Hive 互換データ型エディション: DOUBLE 型の値が直接比較されます。

      • MaxCompute V1.0 データ型エディションおよび MaxCompute V2.0 データ型エディション: DOUBLE 型の値が比較される場合、小数点以下 15 桁目が同じであれば、同じと見なされます。小数点以下のその他の桁は比較されません。

    • ビット演算子: &|、および ^

      • Hive 互換データ型エディション: 入力パラメーターと同じデータ型の値が返されます。

      • MaxCompute V1.0 データ型エディションおよび MaxCompute V2.0 データ型エディション: BIGINT 型の値が返されます。

    • LENGTH、LENGTHB、FIND_IN_SET、INSTR、SIZE、HASH、および SIGN 関数

      • Hive 互換データ型エディション: INT 型の値が返されます。

      • MaxCompute V1.0 データ型エディションおよび MaxCompute V2.0 データ型エディション: BIGINT 型の値が返されます。

    • FLOOR および CEIL

      • Hive 互換データ型エディション: 入力パラメーターが DECIMAL 型の場合、DECIMAL 型の値が返されます。

      • MaxCompute V1.0 データ型エディションおよび MaxCompute V2.0 データ型エディション: 入力パラメーターが DECIMAL 型の場合、BIGINT 型の値が返されます。

    • FROM_UNIXTIME

      • Hive 互換データ型エディション: STRING 型の値が返されます。

      • MaxCompute V1.0 データ型エディションおよび MaxCompute V2.0 データ型エディション: DATETIME 型の値が返されます。

    • CONCAT_WS

      • Hive 互換データ型エディション: 接続された入力文字列が NULL の場合、文字列は無視されます。

      • MaxCompute V1.0 データ型エディションおよび MaxCompute V2.0 データ型エディション: 接続された入力文字列が NULL の場合、NULL が返されます。

    • FIND_IN_SET

      • Hive 互換データ型エディション: 空の文字列は、文字列の末尾との一致と見なされます。

        -- Hive互換モード
        find_in_set("","")  1 が返されます。
        find_in_set("", "a,") 2 が返されます。
      • MaxCompute V1.0 データ型エディションおよび MaxCompute V2.0 データ型エディション: 空の文字列は不一致と見なされ、0 が返されます。

    • REGEXP_(EXTRACT/REPLACE)

      • Hive 互換データ型エディション: REGEXP スキーマは、Java 正規表現の仕様に準拠しています。

      • MaxCompute V1.0 データ型エディションおよび MaxCompute V2.0 データ型エディション: REGEXP スキーマは、MaxCompute の仕様に準拠しています。

    • SUBSTR

      string substr(string <str>, bigint <start_position>[, bigint <length>])

      start_position: 必須。 BIGINT 型の値。デフォルト値は 1 です。

      • Hive 互換データ型エディション: start_position が 0 に設定されている場合、戻り値はこのパラメーターが 1 に設定されている場合と同じです。

      • MaxCompute V1.0 および MaxCompute V2.0 データ型エディション: start_position が 0 に設定されている場合、null が返されます。