このトピックでは、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 進数に基づく正確な数値型です。 このデータ型のデフォルトの式は、
|
VARCHAR(n) | なし | 可変長文字型で、n は長さを指定します。 有効値:1 ~ 65535 です。 |
CHAR(n) | なし | 固定長文字型で、n は長さを指定します。 最大値は 255 です。長さが指定された値に達しない場合は、余分なスペースが自動的に埋められますが、比較には含まれません。 |
STRING | "abc"、'bcd'、"alibaba"、および 'inc' | STRING 型です。最大長は 8 MB です。 |
DATE | DATE'2017-11-11' | DATE 型です。 値の形式は、 有効値: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 です。値はナノ秒単位まで正確です。 説明
|
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 |
|
|
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 が返されます。