データ型

PG-Stromは以下のデータ型をGPUで利用する事ができます。

数値データ型

SQLデータ型 内部データ形式 データ長 備考
smallint short 2 bytes
integer int 4 bytes
bigint long 8 bytes
float2 short 2 bytes 半精度浮動小数点型。PG-Stromによる独自拡張。
real float 4 bytes
float double 8 bytes
numeric int128 可変長 内部形式は128bit固定少数点型

Note

GPUがnumeric型のデータを処理する際、実装上の理由からこれを128bit固定少数点の内部表現に変換して処理します。(これは Apache Arrow のDecimal型と同一の形式です) これら内部表現への/からの変換は透過的に行われますが、例えば、桁数の大きなnumeric型のデータは表現する事ができないため、PG-StromはCPU側でのフォールバック処理を試みます。したがって、桁数の大きなnumeric型のデータをGPUに与えると却って実行速度が低下してしまう事になります。 これを避けるには、GUCパラメータpg_strom.enable_numeric_typeを使用してnumericデータ型を含む演算式をGPUで実行しないように設定します。

Note

GPUでは半精度浮動小数点型がハードウェアでサポートされていますが、CPU(x86_64プロセッサ)では未対応です。そのため、float2データ型をCPUで処理する場合には、これを一度floatdouble型に変換した上で演算を行います。そのため、GPUのようにfloat2の方が演算速度で有利という事はありません。機械学習や統計解析用途にデータ量を抑制するための機能です。

標準の日付時刻型

SQLデータ型 内部データ形式 データ長 備考
date DateADT 4 bytes
time TimeADT 8 bytes
timetz TimeTzADT 12 bytes
timestamp Timestamp 8 bytes
timestamptz TimestampTz 8 bytes
interval Interval 16 bytes time interval

標準の可変長データ型

SQLデータ型 内部データ形式 データ長 備考
bpchar varlena * 可変長
varchar varlena * 可変長
bytea varlena * 可変長
text varlena * 可変長

標準の非構造データ型

SQLデータ型 内部データ形式 データ長 備考
jsonb varlena * 可変長

Note

jsonbデータ型をGPUで処理させる場合には、次の2つの点に留意してください。 実際に参照されない属性もストレージから読み出し、GPUに転送する必要があるため、I/Oバスの利用効率は必ずしも良くないデータ型である事。データ長がTOAST化の閾値(通常は2kB弱)を越えてしまった場合、jsonbデータ全体がTOASTテーブルへ書き出されるため、GPU側では処理できず非効率なCPU-fallback処理を呼び出してしまう事。 後者の問題に対しては、テーブルのストレージオプションtoast_tuple_targetを拡大し、TOAST化の閾値を引き上げる事である程度は回避する事も可能です。

標準の雑多なデータ型

SQLデータ型 内部データ形式 データ長 備考
boolean cl_bool 1 byte
money cl_long 8 bytes
uuid pg_uuid 16 bytes
macaddr macaddr 6 bytes
inet inet_struct 7 bytes or 19 bytes
cidr inet_struct 7 bytes or 19 bytes

標準の範囲型

SQLデータ型 内部データ形式 データ長 備考
int4range __int4range 14 bytes
int8range __int8range 22 bytes
tsrange __tsrange 22 bytes
tstzrange __tstzrange 22 bytes
daterange __daterange 14 bytes