コンテンツにスキップ

16.1.2 データ型辞典

MachbaseがサポートするSQLデータ型を説明します。

型は保存する値の範囲と精度に合わせて選択します。整数の最小値や最大値など、NULL表現に予約された値は 通常のデータとして使用できません。次の表のNULL値は内部表現です。SQLではNULLを挿入し、 IS NULLで検査します。

データ型の概要

サイズ値の範囲NULL値
SHORT2 bytes-32,767 ~ 32,767-32,768
USHORT2 bytes0 ~ 65,53465,535
INTEGER4 bytes-2,147,483,647 ~ 2,147,483,647-2,147,483,648
UINTEGER4 bytes0 ~ 4,294,967,2944,294,967,295
LONG8 bytes-9,223,372,036,854,775,807 ~ 9,223,372,036,854,775,807-9,223,372,036,854,775,808
ULONG8 bytes0 ~ 18,446,744,073,709,551,61418,446,744,073,709,551,615
FLOAT4 bytes32ビット単精度浮動小数点正の最大値
DOUBLE8 bytes64ビット倍精度浮動小数点正の最大値
DECIMAL(M,D)precisionにより可変exact fixed-point, M: 165, D: 030-
ARRAY要素型と要素数により可変固定長1次元数値配列、要素数1~1024配列全体のNULLと要素のNULLを区別
DATETIME8 bytes1970-01-01 ~ 2262-04-11 (ナノ秒精度)-
VARCHAR(n)可変最大nバイト(LOGの宣言範囲: 1~32,767)-
IPV44 bytes0.0.0.0 ~ 255.255.255.255-
IPV616 bytes0000:…:0000 ~ FFFF:…:FFFF-
TEXT可変0 ~ 64MB(全文検索インデックス対応)-
BINARY可変LOG: 064MB / TAG: 132,767 bytes (固定長)-
JSON可変JSONドキュメント: 132,768 bytes / path: 1512 bytes-

整数型

SHORT

16ビット符号付き整数型です。保存サイズはCのint16_tと同じですが、最小値(-32,768)は NULL表現に予約されています。SQLでは別名INT16も使用できます。

CREATE LOG TABLE t (c1 SHORT);
INSERT INTO t VALUES (-32767);  -- 有効な最小値
INSERT INTO t VALUES (-32768);  -- NULLとして処理

USHORT

16ビット符号なし整数(uint16_t)です。最大値(65,535)はNULLとして認識されます。

INTEGER

32ビット符号付き整数型です。保存サイズはCのint32_tと同じですが、最小値はNULL表現に予約されています。 SQLでは別名INT32またはINTも使用できます。

UINTEGER

32ビット符号なし整数(uint32_t)です。

LONG

64ビット符号付き整数型です。保存サイズはCのint64_tと同じですが、最小値はNULL表現に予約されています。 SQLでは別名INT64も使用できます。

ULONG

64ビット符号なし整数(uint64_t)です。


浮動小数点型

FLOAT

C言語の32ビット浮動小数点型floatと同じです。正の最大値はNULLとして認識されます。

DOUBLE

C言語の64ビット浮動小数点型doubleと同じです。正の最大値はNULLとして認識されます。


固定小数点型

DECIMAL / NUMERIC

宣言した精度と小数桁数の範囲で10進数を正確に保存する固定小数点型です。入力値の小数桁数が 宣言範囲を超えると丸めが発生する場合があるため、金額や比率を保存する場合は必要な桁数を 事前に決めてください。NUMERICDECFIXEDNUMBERDECIMALの別名です。

CREATE TRANSACTION TABLE invoice (
    id     LONG PRIMARY KEY,
    amount DECIMAL(18,2),
    rate   NUMERIC(7,4)
);

DECIMALDECIMAL(10,0)DECIMAL(M)DECIMAL(M,0)と解釈します。宣言規則、丸め、 インデックス、集計、クライアントマッピングはDECIMALとNUMERIC固定小数点型を 参照してください。


ARRAY型

Machbase DBMS 8.7.0は、数値要素を決まった個数保存する固定長1次元のARRAY型をサポートします。 要素型の後に要素数(cardinality)を指定します。

CREATE LOG TABLE sensor_array (
    id INTEGER,
    location DOUBLE[2],
    acceleration FLOAT[3]
);

対応する要素型、NULLの区別、取り込み・参照構文、SDK別の表現は 数値ARRAY型を参照してください。


日付/時刻型

DATETIME

1970年1月1日午前0時からの経過時間をナノ秒値で内部保存します。表現範囲は1970-01-01 00:00:00 000:000:000 ~ 2262-04-11 23:47:16.854:775:807です。

  • ナノ秒単位まで処理可能
  • 内部表現: 8バイト整数 (nanoseconds since epoch)
  • 文字列表現: YYYY-MM-DD HH24:MI:SS mmm:uuu:nnn
-- 文字列からDATETIMEへ変換
SELECT TO_DATE('2024-01-15 10:30:00 000:000:000');

-- DATETIMEから文字列へ変換
SELECT TO_CHAR(ts, 'YYYY-MM-DD HH24:MI:SS') FROM t;

文字列型

VARCHAR(n)

可変長文字列型です。nは文字数ではなく保存できるバイト数で、LOGでの宣言範囲は1~32,767です。 UTF-8では文字によって必要なバイト数が異なるため、ハングルや絵文字などを保存する場合は、 実際のエンコーディングサイズを考慮して長さを指定してください。

CREATE LOG TABLE t (name VARCHAR(100), description VARCHAR(1000));

TEXT

VARCHARのサイズを超える大容量テキストを保存する型で、最大64MBを保存できます。 テキスト保存のサポートとKEYWORDインデックスのサポートは別です。 インデックスの使用可否はテーブルタイプによって異なります。

  • LOGとStandard EditionのTRANSACTIONテーブルでサポート
  • LOGテーブルはKEYWORDインデックスとSEARCH演算子でキーワード検索が可能
  • TAG、LOOKUP、VOLATILEテーブルでは非対応

LOGのTEXT列そのものにはORDER BY・GROUP BYを適用できません。 これは性能上の推奨事項ではなく、クエリ検証で拒否される制約です。 ソート・集計に使用するデバイス、エラーコード、重要度などは別のVARCHAR列や数値列に保存してください。 TEXTをVARCHARへ変更するためのMODIFY COLUMNもサポートしません。

CREATE LOG TABLE log_table (ts DATETIME, message TEXT);
-- キーワードインデックスの作成
CREATE INDEX idx_msg ON log_table (message) INDEX_TYPE KEYWORD;

バイナリ型

BINARY

画像や文書などの非構造化バイナリデータを保存する型です。

  • LOGテーブル: 可変長、最大64MB
  • TRANSACTIONテーブル: 可変長バイナリ値をサポート(Standard Edition)
  • TAGテーブル: BINARY(n)形式の固定長型、1 ~ 32,767 bytes
  • LOOKUP、VOLATILEテーブルでは非対応

TAGテーブルのBINARY(n):

  • X'...'B'...'O'...'リテラルをサポート(小文字の接頭辞にも対応)
  • 互換性のために'0x...'形式もサポート
  • 宣言した長さを超えるとERR-02233エラーが発生

ネットワークアドレス型

IPV4

IPv4アドレスを保存する型です。内部で4バイトを使用し、"0.0.0.0" ~ "255.255.255.255"の範囲を表します。

CREATE LOG TABLE access_log (ts DATETIME, src_ip IPV4, dst_ip IPV4);
INSERT INTO access_log VALUES (NOW, '192.168.0.1', '10.0.0.1');
SELECT * FROM access_log WHERE src_ip = TO_IPV4('192.168.0.1');

IPV6

IPv6アドレスを保存する型です。内部で16バイトを使用します。省略表記にも対応します。

  • "::FFFF:1232" — 先頭の0を省略
  • "::FFFF:192.168.0.3" — IPv4互換表記
  • "::192.168.3.1" — IPv4互換表記 (deprecated)
CREATE LOG TABLE v6_log (ts DATETIME, src_ip IPV6);
INSERT INTO v6_log VALUES (NOW, '21DA:D3:0:2F3B:2AA:FF:FE28:9C5A');

JSON型

JSONドキュメントを保存する型です。キーと値のペアで構成されるJSONデータをテキスト形式で保存します。

  • データの最大サイズ: 32,768 bytes
  • JSONパスの最大長: 512 bytes
  • TAG、LOG、LOOKUP、TRANSACTIONテーブルでサポート
  • VOLATILEテーブルではJSON列の作成不可
  • LOOKUPテーブルのJSON列は主キーとして使用不可
CREATE LOG TABLE sensor_data (
    ts   DATETIME,
    data JSON
);
INSERT INTO sensor_data VALUES (NOW, '{"temp":23.5,"hum":60}');
SELECT data -> 'temp' AS temperature FROM sensor_data;

テーブルタイプ別のJSONサポート範囲の詳細は、JSON型のテーブルタイプ別サポート範囲を参照してください。


SQLデータ型のマッピング

Machbaseのデータ型とSQL標準型、C型の対応関係です。

Machbase 型Machbase CLI 型SQL 型C 型C基本型
shortSQL_SMALLINTSQL_SMALLINTSQL_C_SSHORTint16_t
ushortSQL_USMALLINTSQL_SMALLINTSQL_C_USHORTuint16_t
integerSQL_INTEGERSQL_INTEGERSQL_C_SLONGint32_t
uintegerSQL_UINTEGERSQL_INTEGERSQL_C_ULONGuint32_t
longSQL_BIGINTSQL_BIGINTSQL_C_SBIGINTint64_t
ulongSQL_UBIGINTSQL_BIGINTSQL_C_UBIGINTuint64_t
floatSQL_FLOATSQL_REALSQL_C_FLOATfloat
doubleSQL_DOUBLESQL_FLOAT, SQL_DOUBLESQL_C_DOUBLEdouble
decimalSQL_DECIMALSQL_DECIMAL, SQL_NUMERICSQL_C_NUMERICdecimal-preserving value
datetimeSQL_TIMESTAMPSQL_TYPE_TIMESTAMPSQL_C_TYPE_TIMESTAMPchar * (YYYY-MM-DD …)
varcharSQL_VARCHARSQL_VARCHARSQL_C_CHARchar *
ipv4SQL_IPV4SQL_VARCHARSQL_C_CHARchar * (IP文字列)
ipv6SQL_IPV6SQL_VARCHARSQL_C_CHARchar * (IP文字列)
textSQL_TEXTSQL_LONGVARCHARSQL_C_CHARchar *
binarySQL_BINARYSQL_BINARYSQL_C_BINARYchar *
jsonSQL_JSONSQL_JSONSQL_C_CHARjson_t

テーブルタイプ別の対応データ型

TAGLOGLOOKUPVOLATILETRANSACTION
SHORTOOOOO
USHORTOOOOO
INTEGEROOOOO
UINTEGEROOOOO
LONGOOOOO
ULONGOOOOO
FLOATOOOOO
DOUBLEOOOOO
DECIMAL / NUMERICOOOOO
DATETIMEOOOOO
VARCHAROOOOO
IPV4OOOOO
IPV6OOOOO
TEXTXOXXO
JSONOOOXO
BINARYO (固定長)OXXO

DECIMALはすべての公開テーブルタイプでサポートします。TRANSACTIONテーブル自体はStandard Editionで 使用し、Cluster EditionではLOG/TAGテーブルのDECIMAL列とDDL伝播をサポートします。

最終更新日