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

MaxCompute:Hive 互換データ型エディション

最終更新日:Sep 16, 2025

このトピックでは、Hive 互換データ型エディションの定義、サポートされているデータ型、および他のデータ型エディションとの違いについて説明します。Hive 互換データ型エディションは、MaxCompute の 3 つのデータ型エディションの 1 つです。

説明

プロジェクトで Hive 互換データ型エディションを使用するには、次のコードを実行して必要なデータ型を有効にする必要があります。

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=true; -- Hive 互換データ型を有効にします。

シナリオ

Hive 互換データ型エディションは、Hadoop から移行された MaxCompute プロジェクトと、依存コンポーネントが MaxCompute V2.0 データ型エディションをサポートするプロジェクトに適しています。

基本データ型

Hive 互換データ型エディションの基本データ型は、MaxCompute V2.0 データ型エディションで定義されているものと似ています。 これら 2 つのエディションの違いは、DECIMAL 型のみです。

データ型

定数

説明

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')

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

FLOAT

cast(3.14159261E+7 as float)

32 ビット 2 進浮動小数点型です。

DOUBLE

3.14159261E+7

64 ビット 2 進浮動小数点型です。

DECIMAL(precision,scale)

3.5BD および 99999999999.9999999BD

10 進数に基づく正確な数値型です。 このデータ型のデフォルトの式は、decimal(10,0) です。 精度とスケールの値を指定できます。

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

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

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

VARCHAR(n)

なし

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

有効値:1 ~ 65535 です。

CHAR(n)

なし

固定長文字型で、n は長さを指定します。 最大値は 255 です。長さが指定された値に達しない場合は、余分なスペースが自動的に埋められますが、比較には含まれません。

STRING

"abc"、'bcd'、"alibaba"、および 'inc'

STRING 型です。最大長は 8 MB です。

DATE

DATE'2017-11-11'

DATE 型です。 値の形式は、yyyy-mm-dd です。

有効値:0000-01-01 ~ 9999-12-31 です。

DATETIME

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

DATETIME 型です。

有効値:0000-01-01 00:00:00.000 ~ 9999-12-31 23:59:59.999 です。値はミリ秒単位まで正確です。

TIMESTAMP

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

TIMESTAMP 型です。 タイムスタンプはタイムゾーンに依存しません。

有効値:0000-01-01 00:00:00.000000000 ~ 9999-12-31 23:59:59.999999999 です。値はナノ秒単位まで正確です。

説明

cast(<タイムスタンプ> as string) など、タイムゾーン関連の一部の関数では、タイムゾーンに依存しない TIMESTAMP 型のデータは、現在のタイムゾーンに基づいて表示する必要があります。

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 で定義されているデータ型は、Hive 互換データ型に基づいて解析およびオーバーロードされます。

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

    • 特定の関数は、Hive 互換モードではパーティションプルーニングをサポートしていません。 詳細については、「MaxCompute のビルトイン関数と Hive、MySQL、および Oracle のビルトイン関数のマッピング」をご参照ください。

  • STRING 定数は組み合わせることができます。 たとえば、abc と xyz は abcxyz として組み合わせることができます。

  • 定数が 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(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」をご参照ください。

Hive 互換データ型エディションと他のデータ型エディションの違い

  • INSERT 文の変換ルールが異なります。

    • 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 として扱われます。

      • 1.0 および 2.0 データ型エディション: start_position が 0 の場合、NULL が返されます。