このトピックでは、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 |
| 2 進数。最大長は 8 MB です。 説明
|
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 進数に基づく正確な数値型。このデータ型のデフォルトの式は
説明
|
VARCHAR(n) | デフォルト値なし | 可変長文字型。n は長さを指定します。 有効値:1 ~ 65535。 |
CHAR(n) | デフォルト値なし | 固定長文字型。n は長さを指定します。最大値は 255 です。長さが指定された値に達しない場合は、余分なスペースが自動的に埋められますが、比較には含まれません。 |
STRING | "abc"、'bcd'、"alibaba"、および 'inc' | 文字列型。最大長は 8 MB です。 |
DATE | DATE'2017-11-11' |
有効値: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 型のデータに対してタイムゾーン関連の計算を実行できます。たとえば、 |
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 型は期間を表し、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.5BDINSERT 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 |
|
|
JSON |
|
|
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 が返されます。