データ型

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

数値データ型

int1 [データ長: 1byte]
8bit整数型。PG-Stromによる独自拡張
int2 (別名 smallint) [データ長: 2bytes]
16bit整数型
int4 (別名 int) [データ長: 4bytes]
32bit整数型
int8 (別名 bigint) [データ長: 8bytes]
64bit整数型
float2 [データ長: 2bytes]
半精度浮動小数点型。PG-Stromによる独自拡張
float4 (別名 real) [データ長: 4bytes]
単精度浮動小数点型
float8 (別名 double precision) [データ長: 8bytes]
倍精度浮動小数点型
numeric [データ長: 可変]
実数型。GPU側では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の方が演算速度で有利という事はありません。機械学習や統計解析用途にデータ量を抑制するための機能です。

日付時刻型

date [データ長: 4bytes]
日付データ型
time (別名 time without time zone) [データ長: 8bytes]
時刻データ型
timetz (別名 time with time zone) [データ長: 12bytes]
時刻データ型(タイムゾーン付き)
timestamp (別名 timestamp without time zone) [データ長: 8bytes]
タイムスタンプ型
timestamptz (別名 timestamp with time zone) [データ長: 8bytes]
タイムスタンプ型(タイムゾーン付き)
interval [データ長: 16bytes]
時間間隔型

可変長データ型

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

非構造データ型

jsonb [length: 可変長]
バイナリインデックスを内包するJSONデータ型

Note

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

雑多なデータ型

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

範囲型

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

ジオメトリ型

geometry [データ長: 可変]
PostGISジオメトリオブジェクト