Hologres のデータ型は PostgreSQL のデータ型と互換性があります。このトピックでは、Hologres がサポートするデータ型と配列型について説明します。
データ型
現在のバージョンの Hologres は、PostgreSQL データ型のサブセットをサポートしています。次の表に、サポートされているデータ型を示します。
名前 | サポートバージョン | ストレージサイズ | 説明 | 値の範囲 | 例 |
INTEGER (エイリアス: INT または INT4) | すべての Hologres バージョン | 4 バイト | 一般的な整数型 | -2147483648 から +2147483647 | 2147483647 |
BIGINT (エイリアス: INT8) | すべての Hologres バージョン | 8 バイト | 広範囲の整数。 | -9223372036854775808 から +9223372036854775807 | 9223372036854775807 |
BOOLEAN (エイリアス: BOOL) | すべての Hologres バージョン | 1 バイト | ブール型。 |
| True |
REAL (エイリアス: FLOAT4) | すべての Hologres バージョン | 4 バイト | 可変精度の不正確な数値。 説明 PostgreSQL エコシステムでは、FLOAT 型の精度を指定しない場合、デフォルトで DOUBLE PRECISION (FLOAT8) になります。 | 6 桁の 10 進精度。 | 123.123 |
DOUBLE PRECISION (エイリアス: FLOAT8) | すべての Hologres バージョン | 8 バイト | 可変精度の不正確な数値。 | 15 桁の 10 進精度。 | 123.123456789123 |
TEXT | すべての Hologres バージョン | 可変長 | 可変長の文字列。TEXT 型は VARCHAR(n) や CHAR(n) よりも柔軟性があります。VARCHAR(n) や CHAR(n) の代わりに TEXT 型を使用することを推奨します。 | なし | abcdefg |
TIMESTAMP WITH TIME ZONE (エイリアス: TIMESTAMPTZ) | すべての Hologres バージョン | 8 バイト | タイムゾーン付きのタイムスタンプ。ストレージの精度はミリ秒単位です。 説明 標準の PostgreSQL では、+ または - 記号とそれに続く | 紀元前 4713 年から西暦 294276 年 | 2004-10-19 10:23:54+02 |
DECIMAL (エイリアス: NUMERIC) | すべての Hologres バージョン | 可変長 | PRECISION と SCALE を指定する必要があります。
| 整数部と小数部を含め、最大 38 桁まで指定できます。 | DECIMAL(38, 10) |
DATE | Hologres V0.8 の新機能 | 4 バイト | 単位は日単位で測定されます。 | 紀元前 4713 年から西暦 5874897 年 | 2004-10-19 |
TIMESTAMP | Hologres V0.8 の新機能 | 8 バイト | タイムゾーンなしのタイムスタンプ。ストレージの精度はマイクロ秒単位です。 | 紀元前 4713 年から西暦 5874897 年 | 2020-01-01 01:01:01.123456 |
CHAR(n) | Hologres V0.8 の新機能 | 最大 n 文字の固定長文字列。 | ストレージサイズは 1 GB を超えることはできません。 | 固定長の文字列。 |
|
VARCHAR(n) | Hologres V0.8 の新機能 | 最大 n 文字の可変長文字列。 | ストレージサイズは 1 GB を超えることはできません。 | 文字数制限のある可変長文字列。 | abcdefg |
SERIAL (自動増分シーケンス) | この機能は Hologres V0.8 以降のバージョンで利用可能です。 | 詳細については、「自動増分シーケンス」をご参照ください。 | なし | なし | なし |
SMALLINT | Hologres V0.9 の新機能 | 2 バイト | 小範囲の整数。 | -32768 から +32767 | 32767 |
JSON および JSONB | Hologres V0.9 の新機能 | 詳細については、「JSON データ型」をご参照ください。 | なし | なし | なし |
BYTEA | Hologres V0.9 で導入 | 可変。詳細については、「バイナリデータ型」をご参照ください。 | 可変長のバイナリ文字列。 | ストレージサイズは 1 GB を超えることはできません。 | なし |
RoaringBitmap | Hologres V0.10 の新機能 | 可変。詳細については、「RoaringBitmap 関数」をご参照ください。 | INT 値の効率的な配列で、定数時間のビットマップ計算をサポートします。 | なし | なし |
RoaringBitmap64 | Hologres V3.1 の新機能 | 可変。詳細については、「RoaringBitmap 関数」をご参照ください。 | BIGINT 値の効率的な配列で、定数時間のビットマップ計算をサポートします。 | なし | なし |
BIT(n) | Hologres V0.9 の新機能 | 長さ n ビットのバイナリ文字列。 | 固定長のバイナリ文字列。 | ストレージサイズは 1 GB を超えることはできません。 | なし |
VARBIT(n) | Hologres V0.9 | 最大 n ビット長の可変長バイナリ文字列。 | ビット長制限のあるバイナリ文字列。 | ストレージサイズは 1 GB を超えることはできません。 | なし |
INTERVAL | すべての Hologres バージョン | 16 バイト | なし | -178000000 年から 178000000 年 | interval '1 year' |
TIMETZ | Hologres V0.9 の新機能 | 12 バイト | タイムゾーン付きの時刻。解像度はマイクロ秒単位です。 | 00:00:00 から 24:00:00 | 12:00:00+08 |
TIME | この機能は Hologres V0.9 で導入されました。 | 8 バイト | タイムゾーンなしの時刻。解像度はマイクロ秒単位です。 | 00:00:00 から 24:00:00 | 12:00:00 |
INET | Hologres V0.9 の新機能 | 詳細については、「ネットワークアドレス型」をご参照ください。 | データドメインに格納される IPv4 または IPv6 ホストアドレス。 | なし | 192.168.100.128/25 |
MONEY | Hologres V0.9 の新機能 | 8 バイト。詳細については、「通貨型」をご参照ください。 | money 型は、固定の小数精度で通貨量を格納します。 | -92233720368547758.08 から +92233720368547758.07 | $12.34 |
OID | Hologres 0.9 の新機能 | 4 バイト | 数値オブジェクト識別子。 | なし | 1024 |
UUID | Hologres V0.9 の新機能 | 16 バイト | 固定長 128 ビットの汎用一意識別子。 説明 uuid-ossp で実装されているアルゴリズムは現在サポートされていません。 | 00000000-0000-0000-0000-000000000000~ffffffff-ffff-ffff-ffff-ffffffffffff | a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11 |
次の SQL 文は、TIMESTAMP WITH TIME ZONE、DATE、および DECIMAL の例です。
CREATE TABLE test_data_type (
tswtz_column TIMESTAMP WITH TIME ZONE,
date_column date,
decimal_column decimal(38, 10),
char_column char(20),
varchar_volumn varchar(225)
);
INSERT INTO test_data_type
VALUES ('2004-10-19 08:08:08', '2004-10-19', 123.456, 'abcd', 'a');
SELECT * FROM test_data_type;
tswtz_column | date_column | decimal_column | char_column | varchar_volumn
------------------------+-------------+----------------+----------------------+----------------
2004-10-19 08:08:08+08 | 2004-10-19 | 123.4560000000 | abcd | a
(1 row)次の SQL 文は、BIT、VARBIT、および BYTEA の例です。
// BIT と VARBIT
CREATE TABLE test (a BIT(3), b BIT VARYING(5));
INSERT INTO test VALUES (B'101', B'00');
INSERT INTO test VALUES (B'10', B'101');
ERROR: bit string length 2 does not match type bit(3)
INSERT INTO test VALUES (B'10'::bit(3), B'101');
SELECT * FROM test;
a | b
-----+-----
101 | 00
100 | 101
// BYTEA
SET bytea_output = 'escape';
SELECT 'abc \153\154\155 \052\251\124'::bytea;
bytea
----------------
abc klm *\251T
RESET bytea_output; -- デフォルトは 'hex'
SELECT 'abc \153\154\155 \052\251\124'::bytea;
bytea
--------------------------
\x616263206b6c6d202aa954
(1 row)配列型
Hologres は現在、次の 1 次元配列のみをサポートしています:
int4[]
int8[]
float4[]
float8[]
boolean[]
text[]
例:
配列を宣言します。
CREATE TABLE array_example( int4_array int4[], int8_array int8[], float4_array float4[], float8_array float8[], boolean_array boolean[], text_array text[]);配列を挿入します。
ARRAY キーワードを使用します。
INSERT INTO array_example( int4_array, int8_array, float4_array, float8_array, boolean_array, text_array) VALUES (ARRAY[1, 2, 3, 4], ARRAY[1, 2, 3, 4], ARRAY[1.0, 2.0], ARRAY[1.0, 2.0, 3.0], ARRAY[true, true, false], ARRAY['foo1', 'foo2', 'foo3']);{}式を使用します。INSERT INTO array_example( int4_array, int8_array, float4_array, float8_array, boolean_array, text_array) VALUES ('{1, 2, 3, 4}', '{1, 2, 3, 4}', '{1.0, 2.0}', '{1.0, 2.0, 3.0}', '{true, true, false}', '{"foo1", "foo2", "foo3"}');
配列をクエリします。
配列から単一の要素をクエリします。
SELECT int4_array[3] FROM array_example;配列から複数の要素をクエリします。
SELECT int4_array[1:2] FROM array_example;
MaxCompute と Hologres 間のデータ型マッピング
外部テーブルを作成して MaxCompute データにアクセスする場合、MaxCompute と Hologres のデータ型は次の表のようにマッピングされます。
MaxCompute データ型 | Hologres データ型 | サポートされるマッピングバージョン | 説明 |
JSON | JSONB | Hologres V4.1 の新機能 | |
| TEXT | すべての Hologres バージョン | なし |
BIGINT | INT8 | すべての Hologres バージョン | なし |
INT |
| すべての Hologres バージョン | なし |
FLOAT |
| すべての Hologres バージョン | なし |
DOUBLE |
| すべての Hologres バージョン | なし |
BOOLEAN | BOOL | すべての Hologres バージョン | なし |
DATETIME | TIMESTAMP WITH TIME ZONE | すべての Hologres バージョン | MaxCompute の DATETIME 型は、UTC+8 タイムゾーンをシステム標準時として使用する日時型です。値の範囲は 0000 年 1 月 1 日から 9999 年 12 月 31 日までで、ミリ秒単位の精度です。 |
DECIMAL | NUMERIC | すべての Hologres バージョン | MaxCompute で DECIMAL 型の精度を指定しない場合、精度はデフォルトで (38, 18) になります。IMPORT FOREIGN SCHEMA を使用してテーブルを作成すると、システムは自動的に精度を変換します。 |
TIMESTAMP | TIMESTAMP WITH TIME ZONE | Hologres 0.8 の新機能 |
|
CHAR(n) | デフォルトは CHAR(n) です。 Hologres は、MaxCompute の CHAR(n) 型を TEXT 型にマッピングすることもサポートしています。パラメータ | Hologres V0.8 の新機能 | MaxCompute の CHAR(n) 型は固定長の文字型で、n は長さです。n の最大値は 255 です。文字列が指定された長さより短い場合、スペースで埋められます。 |
VARCHAR(n) | デフォルトは VARCHAR(n) です。 Hologres は、MaxCompute の VARCHAR(n) 型を TEXT 型にマッピングすることもサポートしています。パラメータ | Hologres V0.8 の新機能 | MaxCompute の VARCHAR(n) 型は可変長の文字型で、n は長さです。n の値の範囲は 1 から 65535 です。 |
DATE | DATE | Hologres V0.8 の新機能 | なし |
SMALLINT | デフォルトは INT2 です。 Hologres は、MaxCompute の SMALLINT 型を INT8 型にマッピングすることもサポートしています。パラメータ | すべての Hologres バージョン (V0.8 では int4 に、V0.9 以降では int2 にマッピング) | なし |
TINYINT | デフォルトは INT2 です。 Hologres は、MaxCompute の TINYINT 型を INT8 型にマッピングすることもサポートしています。パラメータ | すべての Hologres バージョン (V0.8 では int4 に、V0.9 以降では int2 にマッピング) | なし |
CHAR | サポートされていません | サポートされていません | なし |
ARRAY<INT> | INT4[] | Hologres V0.8 の新機能 | なし |
ARRAY<BIGINT> | INT8[] | Hologres V0.8 の新機能 | なし |
ARRAY<FLOAT> | FLOAT4[] | Hologres V0.8 の新機能 | なし |
ARRAY<DOUBLE> | FLOAT8[] | Hologres V0.8 の新機能 | なし |
ARRAY<BOOLEAN> | BOOLEAN[] | Hologres V0.8 の新機能 | なし |
ARRAY<STRING> | TEXT[] | Hologres V0.8 の新機能 | なし |
BINARY | BYTEA | Hologres V0.9 の新機能 | なし |
ARRAY<TINYINT> | サポートされていません | サポートされていません | なし |
ARRAY<SMALLINT> | サポートされていません | サポートされていません | なし |
MaxCompute のデータテーブルに Hologres がサポートしていないデータ型のフィールドが含まれている場合でも、テーブル内の他のフィールドをクエリできます。ただし、サポートされていないデータ型のフィールドにはアクセスできません。
Blink/Flink と Hologres 間のデータ型マッピング
次の表に、Blink/Flink と Hologres 間のデータ型マッピングを示します。
バイナリロギングのソーステーブルは一部のデータ型のみをサポートしています。詳細については、「Blink または Flink を使用して Hologres のバイナリログをリアルタイムで使用する」をご参照ください。
Flink データ型 | Hologres データ型 | サポートされる Hologres マッピングバージョン | サポートされる Flink マッピングバージョン |
INT |
| すべての Hologres バージョン | すべてのバージョン |
BIGINT | INT8 | すべての Hologres バージョン | すべてのバージョン |
VARCHAR | TEXT | すべての Hologres バージョン | すべてのバージョン |
DOUBLE |
| すべての Hologres バージョン | すべてのバージョン |
BOOLEAN | BOOL | すべての Hologres バージョン | すべてのバージョン |
DECIMAL | NUMERIC 説明 CTAS を使用してデータを Hologres に同期する場合:
詳細については、「bigint unsigned 型の MySQL テーブルのプライマリキーが、Flink カタログにテーブルを登録した後に decimal に変更され、CTAS を使用してデータを Hologres に同期した後に text に変更されるのはなぜですか?」をご参照ください。 | すべての Hologres バージョン | すべてのバージョン |
DATE | DATE | Hologres V0.8 の新機能 | すべてのバージョン |
TIMESTAMP | TIMESTAMP WITH TIME ZONE | すべての Hologres バージョン | すべてのバージョン |
FLOAT |
| すべての Hologres バージョン | すべてのバージョン |
TIME | TIME および TIMETZ | すべての Hologres バージョン 説明 Hologres V2.1.24 以降、固定プランを使用した SQL 実行の高速化は TIME および TIMETZ 型をサポートします。 |
|
VARCHAR | JSONB | Hologres V0.10 の新機能 |
|
VARCHAR | JSON | Hologres V0.9 の新機能 |
|
BYTES | RoaringBitmap | Hologres V0.10 の新機能 |
|
VARCHAR | GEOMETRY および GEOGRAPHY | すべての Hologres バージョン 説明 Hologres V2.1 以降、固定プランを使用した SQL 実行の高速化は、GEOMETRY および GEOGRAPHY 型のデータの書き込みをサポートします。 |
|
TINYINT | SMALLINT | すべての Hologres バージョン |
|
SMALLINT | SMALLINT | すべての Hologres バージョン |
|
ARRAY<INT> | int4[] | Hologres V0.8 の新機能 |
|
ARRAY<BIGINT> | int8[] | Hologres V0.8 の新機能 |
|
ARRAY<FLOAT> | float4[] | Hologres V0.8 の新機能 |
|
ARRAY<DOUBLE> | float8[] | Hologres V0.8 の新機能 |
|
ARRAY<BOOLEAN> | boolean[] | Hologres V0.8 の新機能 |
|
ARRAY<VARCHAR> | TEXT[] | Hologres V0.8 の新機能 |
|
CHAR | サポートされていません | サポートされていません | サポートされていません |
BINARY | サポートされていません | サポートされていません | サポートされていません |
MySQL と Hologres 間のデータ型マッピング
次の表に、MySQL と Hologres 間のデータ型マッピングを示します。MySQL から Hologres へのデータ移行の詳細については、「MySQL から Hologres へのデータ移行」をご参照ください。
MySQL データ型 | Hologres データ型 |
BIGINT | BIGINT |
BINARY(n) | BYTEA |
BIT | BOOLEAN |
|
|
DATE | DATE |
DATETIME | TIMESTAMP [WITHOUT TIME ZONE] |
|
|
DOUBLE | DOUBLE PRECISION |
FLOAT | REAL |
|
|
MEDIUMINT | INTEGER |
NUMERIC(p,s) | NUMERIC(p,s) |
SMALLINT | SMALLINT |
| BYTEA |
TINYINT | SMALLINT |
| TEXT |
TIME | TIME [WITHOUT TIME ZONE] |
TIMESTAMP | TIMESTAMP [WITH TIME ZONE] |
| BYTEA |
VARCHAR(n) | VARCHAR(n) |
VARCHAR(max) | TEXT |
DLF と Hologres 間のデータ型マッピング
Data Lake Formation (DLF) データ型 | Hologres データ型 |
TINYINT | SMALLINT |
SMALLINT | SMALLINT |
INT | INT |
BIGINT | BIGINT |
BOOLEAN | BOOLEAN |
FLOAT | REAL |
DOUBLE | DOUBLE PRECISION |
DATE | DATE |
TIMESTAMP | TIMESTAMP WITHOUT TIME ZONE |
STRING | TEXT |
BINARY | BYTEA |
DECIMAL(m,n) | NUMERIC(m,n) |
VARCHAR(n) | CHARACTER VARYING(n) |
CHAR(n) | CHARACTOR(n) |
ARRAY<type> | ARRAY<hologres_data_type> 次の型がサポートされています:
|
Hive と Hologres 間のデータ型マッピング
Hive データ型 | Hologres データ型 |
TINYINT | SMALLINT |
SMALLINT | SMALLINT |
INT | INT |
BIGINT | BIGINT |
FLOAT | REAL |
DOUBLE | DOUBLE PRECISION |
DECIMAL | NUMERIC |
NUMERIC | NUMERIC |
DATE | DATE |
TIMESTAMP | TIMESTAMP WITHOUT TIME ZONE |
STRING | TEXT |
VARCHAR | VARCHAR |
CHAR | CHAR |
BINARY | BYTEA |
BOOL | BOOLEAN |
ARRAY<type> | ARRAY<hologres_data_type> 次の型がサポートされています:
|
Hudi と Hologres 間のデータ型マッピング
Hologres V1.3 以降でサポートされています。
Hudi データ型 | Hologres データ型 |
IntegerType | INT |
LongType | BIGINT |
FloatType | REAL |
DoubleType | DOUBLE PRECISION |
DecimalType | NUMERIC |
TimestampType | TIMESTAMP WITHOUT TIME ZONE |
DateType | DATE |
YearMonthIntervalType | サポートされていません |
DayTimeIntervalType | サポートされていません |
StringType | TEXT |
VarcharType | サポートされていません |
CharType | サポートされていません |
BooleanType | BOOL |
BinaryType | BYTEA |
ByteType | サポートされていません |
ShortType | サポートされていません |
ArrayType(elementType, containsNull) | ARRAY<hologres_data_type> 次の型がサポートされています:
|
Delta Lake と Hologres 間のデータ型マッピング
Hologres V1.3 以降でサポートされています。
Delta Lake データ型 | Hologres データ型 |
TINYINT | SMALLINT |
SMALLINT | SMALLINT |
INT | INT |
BIGINT | BIGINT |
FLOAT | REAL |
DOUBLE | DOUBLE PRECISION |
DECIMAL(p,s) | NUMERIC |
TIMESTAMP | TIMESTAMP WITHOUT TIME ZONE |
DATE | DATE |
INTERVAL intervalQualifier | サポートされていません |
STRING | TEXT |
BOOLEAN | BOOLEAN |
BINARY | BYTEA |
ARRAY<elementType> | ARRAY<hologres_data_type> 次の型がサポートされています:
|
Paimon と Hologres 間のデータ型マッピング
Paimon データ型 | Hologres データ型 |
TINYINT | SMALLINT |
SMALLINT | SMALLINT |
INT | INT |
BIGINT | BIGINT |
FLOAT | REAL |
DOUBLE | DOUBLE PRECISION |
DECIMAL(p,s) | DECIMAL |
TIMESTAMP | TIMESTAMP WITHOUT TIME ZONE |
DATE | DATE |
CHAR | CHAR |
VARCHAR | VARCHAR |
BINARY | BYTEA |
ARRAY | ARRAY<hologres_data_type> 次の型がサポートされています:
|
Iceberg と Hologres 間のデータ型マッピング
Iceberg データ型 | Hologres データ型 |
BOOLEAN | BOOLEAN |
INT | INTEGER |
LONG | BIGINT |
FLOAT | REAL |
DOUBLE | DOUBLE PRECISION |
DECIMAL(P,S) | NUMERIC(P,S) |
DATE | DATE |
TIME | TEXT (TIME 型は Spark ではサポートされていません。Flink の TIME 型は、DLF に書き込まれるときに STRING 型に変換されます。) |
TIMESTAMP | TIMESTAMP WITHOUT TIME ZONE |
TIMESTAMPTZ | サポートされていません |
STRING | TEXT |
UUID | サポートされていません (Flink と Spark はこのデータ型を書き込めません。) |
FIXED(L) | BYTEA |
BINARY | BYTEA |
LIST | ARRAY<hologres_data_type> 次の型がサポートされています:
|
STRUCT | サポートされていません |
MAP | サポートされていません |