データ型

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

数値データ型

SQLデータ型 データ長 備考
smallint 2 bytes 16bit 整数型
integer 4 bytes 32bit 整数型
bigint 8 bytes 64bit 整数型
float2 2 bytes 半精度浮動小数点型。PG-Stromによる独自拡張。
real 4 bytes 単精度浮動小数点型
float 8 bytes 倍精度浮動小数点型
numeric 可変長 内部形式は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 4 bytes 日付データ型
time 8 bytes 時刻データ型
timetz 12 bytes タイムゾーン付き時刻データ型
timestamp 8 bytes タイムスタンプ型
timestamptz 8 bytes タイムゾーン付きタイムスタンプ型
interval 16 bytes 時間間隔型

標準の可変長データ型

SQLデータ型 データ長 備考
bpchar 可変長 可変長テキスト型(空白パディングあり)
varchar 可変長 可変長テキスト型
text 可変長 可変長テキスト型
bytea 可変長 可変長バイナリ型

標準の非構造データ型

SQLデータ型 データ長 備考
jsonb 可変長

Note

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

標準の雑多なデータ型

SQLデータ型 データ長 備考
boolean 1 byte 論理値データ型
money 8 bytes 通貨データ型
uuid 16 bytes UUIDデータ型
macaddr 6 bytes ネットワークMACアドレス型
inet 7 or 19 bytes ネットワークアドレス型
cidr 7 or 19 bytes ネットワークアドレス型

標準の範囲型

SQLデータ型 データ長 備考
int4range 14 bytes 32bit整数値範囲型
int8range 22 bytes 64bit整数値範囲型
tsrange 22 bytes タイムスタンプ範囲型
tstzrange 22 bytes タイムゾーン付きタイムスタンプ範囲型
daterange 14 bytes 日付データ範囲型

PostGISデータ型

SQLデータ型 データ長 備考
geometry 可変長 PostGISジオメトリオブジェクト