データ型
PG-Stromは以下のデータ型をGPUで利用する事ができます。
数値データ型
int1
[データ長: 1byte]- 8bit整数型。PG-Stromによる独自拡張
int2
(別名smallint
) [データ長: 2bytes]- 16bit整数型
int4
(別名int
) [データ長: 4bytes]- 32bit整数型
int8
(別名bigint
) [データ長: 8bytes]- 64bit整数型
float2
[データ長: 2bytes]- 半精度浮動小数点型。PG-Stromによる独自拡張
Note
GPUでは半精度浮動小数点型がハードウェアでサポートされていますが、CPU(x86_64プロセッサ)では未対応です。そのため、float2
データ型をCPUで処理する場合には、これを一度float
やdouble
型に変換した上で演算を行います。そのため、GPUのようにfloat2
の方が演算速度で有利という事はありません。機械学習や統計解析用途にデータ量を抑制するための機能です。
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で実行しないように設定します。
日付時刻型
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]- ネットワークアドレス型
cube
[データ長: 可変長]contrib/cube
によって提供される拡張データ型
ジオメトリ型
geometry
[データ長: 可変]- PostGISジオメトリオブジェクト
box2df
[データ長: 16bytes]- 2次元バウンディングボックス(GiSTインデックス用)