データ型
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で処理する場合には、これを一度float
やdouble
型に変換した上で演算を行います。そのため、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ジオメトリオブジェクト |