データ型¶
Prestoには、以下に説明する組み込みのデータ型があります。追加の型はプラグインによって提供される場合があります。
注記
コネクタはすべての型をサポートする必要はありません。サポートされている型については、コネクタのドキュメントを参照してください。
ブール値¶
BOOLEAN
¶
この型は、ブール値true
とfalse
を表します。
整数¶
注記
キャスト変換関数は、文字列をTINYINT
、SMALLINT
、INTEGER
、またはBIGINT
にキャストする場合、先頭と末尾の空白を許可します。
TINYINT
¶
最小値が-2^7
、最大値が2^7 - 1
の8ビット符号付き2の補数整数です。
SMALLINT
¶
最小値が-2^15
、最大値が2^15 - 1
の16ビット符号付き2の補数整数です。
INTEGER
¶
最小値が-2^31
、最大値が2^31 - 1
の32ビット符号付き2の補数整数です。INT
という名前もこの型で使用できます。
BIGINT
¶
最小値が-2^63
、最大値が2^63 - 1
の64ビット符号付き2の補数整数です。
浮動小数点¶
REAL
¶
realは、IEEE Standard 754 for Binary Floating-Point Arithmeticを実装する32ビットの不正確な可変精度です。
Prestoは、NaNを処理する際にIEEE標準から逸脱しています。Prestoでは、NaNはすべての比較およびソート操作において、他のどの値よりも大きいと見なされます。さらに、NaN=NaNは、すべての等価性と相違性の目的でtrueになります。
DOUBLE
¶
doubleは、IEEE Standard 754 for Binary Floating-Point Arithmeticを実装する64ビットの不正確な可変精度です。
Prestoは、NaNを処理する際にIEEE標準から逸脱しています。Prestoでは、NaNはすべての比較およびソート操作において、他のどの値よりも大きいと見なされます。さらに、NaN=NaNは、すべての等価性と相違性の目的でtrueになります。
固定精度¶
DECIMAL
¶
固定精度の10進数。最大38桁の精度がサポートされていますが、18桁まではパフォーマンスが最適です。
decimal型は2つのリテラルパラメータを取ります
**精度** - 桁数の合計
**スケール** - 小数部の桁数。スケールはオプションで、デフォルトは0です。
型の定義例:DECIMAL(10,3)
、DECIMAL(20)
リテラルの例:DECIMAL '10.3'
、DECIMAL '1234567890'
、1.1
注記
互換性のため、明示的な型指定子がない10進数リテラル(例:1.2
)は、バージョン0.198まではデフォルトでDOUBLE
型の値として扱われます。0.198以降はDECIMALとして解析されます。
システム全体のプロパティ:
parse-decimal-literals-as-double
セッションごとのプロパティ:
parse_decimal_literals_as_double
文字列¶
VARCHAR
¶
オプションの最大長を持つ可変長の文字データ。
型の定義例:varchar
、varchar(20)
。
- SQLは、単純な文字列リテラルとUnicode文字列リテラルをサポートします
文字列リテラル:
'Hello winter !'
デフォルトのエスケープ文字を使用したUnicode文字列:
U&'Hello winter \2603 !'
カスタムエスケープ文字を使用したUnicode文字列:
U&'Hello winter #2603 !' UESCAPE '#'
Unicode文字列にはU&
というプレフィックスが付きます。4桁のUnicode文字を使用する場合は、Unicode文字の前にエスケープ文字が必要です。これらの例では、\2603
と#2603
は雪だるまを表しています。6桁の長いUnicodeコードには、コードの前にプラス記号+
が必要です。例えば、笑顔の絵文字には\+01F600
を使用します。
文字列リテラルの一重引用符は、もう1つの単一引用符を使用してエスケープできます。'It''s a beautiful day!'
CHAR
¶
固定長の文字データ。長さを指定せずにCHAR型を使用すると、デフォルトの長さは1になります。CHAR(x)値は常にx文字になります。例えば、「dog」をCHAR(7)にキャストすると、4つの暗黙的な末尾の空白が追加されます。先頭と末尾の空白は、CHAR値の比較に含まれます。その結果、長さが異なる2つの文字値(x != yの場合のCHAR(x)とCHAR(y))は決して等しくありませんが、そのような値の比較では暗黙的に型を同じ長さに変換し、空白で埋め込むため、次のクエリはtrueを返します。
SELECT cast('example' AS char(20)) = cast('example ' AS char(25));
VARCHARと同様に、CHARリテラルの一重引用符は、もう1つの単一引用符でエスケープできます。
SELECT CHAR 'All right, Mr. DeMille, I''m ready for my close-up.'
VARBINARY
¶
可変長のバイナリデータ。
注記
長さ付きのバイナリ文字列はまだサポートされていません:varbinary(n)
JSON
¶
JSON値型。JSONオブジェクト、JSON配列、JSON数値、JSON文字列、true
、false
、またはnull
のいずれかになります。
日付と時刻¶
DATE
¶
カレンダー日付(年、月、日)。
例:DATE '2001-08-22'
TIME
¶
時間帯なしの1日の時刻(時、分、秒、ミリ秒)。この型の値は、セッションのタイムゾーンで解析およびレンダリングされます。
例:TIME '01:02:03.456'
TIME WITH TIME ZONE
¶
時間帯付きの1日の時刻(時、分、秒、ミリ秒)。この型の値は、値の時間帯を使用してレンダリングされます。
例:TIME '01:02:03.456 America/Los_Angeles'
TIMESTAMP
¶
時間帯なしの日付と時刻を含む瞬間。この型の値は、セッションのタイムゾーンで解析およびレンダリングされます。
例:TIMESTAMP '2001-08-22 03:04:05.321'
TIMESTAMP WITH TIME ZONE
¶
時間帯付きの日付と時刻を含む瞬間。この型の値は、値の時間帯を使用してレンダリングされます。
例:TIMESTAMP '2001-08-22 03:04:05.321 America/Los_Angeles'
INTERVAL YEAR TO MONTH
¶
年と月の期間。
例:INTERVAL '3' MONTH
INTERVAL DAY TO SECOND
¶
日、時、分、秒、ミリ秒の期間。
例:INTERVAL '2' DAY
構造体¶
ARRAY
¶
指定されたコンポーネント型の配列。
例:ARRAY[1, 2, 3]
MAP
¶
指定されたコンポーネント型間のマップ。
例:MAP(ARRAY['foo', 'bar'], ARRAY[1, 2])
ROW
¶
名前付きフィールドで構成される構造体。フィールドは任意のSQL型にすることができ、フィールド参照演算子.
を使用してアクセスします。
例:CAST(ROW(1, 2.0) AS ROW(x BIGINT, y DOUBLE))
ネットワークアドレス¶
IPADDRESS
¶
IPv4アドレスまたはIPv6アドレスのいずれかを表現できるIPアドレス。
内部的には、この型は純粋なIPv6アドレスです。IPv4のサポートは、 *IPv4-mapped IPv6 address* 範囲(RFC 4291#section-2.5.5.2) を使用して処理されます。IPADDRESS
を作成する際、IPv4アドレスはその範囲にマップされます。
IPADDRESS
をフォーマットする際、マップされた範囲内のアドレスはIPv4アドレスとしてフォーマットされます。その他のアドレスは、RFC 5952で定義されている標準形式を使用してIPv6としてフォーマットされます。
例:IPADDRESS '10.0.0.1'
、IPADDRESS '2001:db8::1'
IPPREFIX
¶
IPv4アドレスまたはIPv6アドレスのいずれかを表現できるIPルーティングプレフィックス。
内部的には、アドレスは純粋なIPv6アドレスです。IPv4のサポートは、 *IPv4-mapped IPv6 address* 範囲(RFC 4291#section-2.5.5.2) を使用して処理されます。IPPREFIX
を作成する際、IPv4アドレスはその範囲にマップされます。さらに、アドレスはネットワークの最初のアドレスに削減されます。
IPPREFIX
の値はCIDR表記でフォーマットされ、IPアドレス、スラッシュ文字('/')、およびプレフィックスのビット長で記述されます。IPv4-mapped IPv6アドレス範囲内のアドレスは、IPv4アドレスとしてフォーマットされます。その他のアドレスは、RFC 5952で定義されている標準形式を使用してIPv6としてフォーマットされます。
例:IPPREFIX '10.0.1.0/24'
、IPPREFIX '2001:db8::/48'
UUID¶
UUID
¶
この型は、RFC 4122で定義されている形式を使用して、UUID(Universally Unique IDentifier、GUID(Globally Unique IDentifier)とも呼ばれる)を表します。
例:UUID '12151fd2-7586-11e9-8f9e-2a86e4085a59'
HyperLogLog¶
HyperLogLogデータスケッチを使用すると、正確なカウントよりもはるかに安価に、近似的な個別のカウントを計算できます。HyperLogLog関数を参照してください。
HyperLogLog
¶
HyperLogLogスケッチにより、approx_distinct()
の効率的な計算が可能になります。疎な表現から始まり、より効率的になると密な表現に切り替わります。
P4HyperLogLog
¶
P4HyperLogLogスケッチはHyperLogLogに似ていますが、密な表現で開始し(そして維持します)。
KHyperLogLog¶
KHyperLogLog
¶
KHyperLogLogは、2つの列の関連付けをコンパクトに表すために使用できるデータスケッチです。KHyperLogLog関数を参照してください。
SetDigest¶
SetDigest
¶
SetDigest(setdigest)は、2つの集合間のJaccard類似係数の計算に使用されるデータスケッチ構造です。
SetDigestは次のコンポーネントをカプセル化します。
元の集合内の個別の要素の近似値には、HyperLogLog構造が使用されます。
MinHash構造は、元の集合の低メモリフットプリントのシグネチャを格納するために使用されます。任意の2つの集合の類似性は、それらのシグネチャを比較することで推定されます。
SetDigestは加算可能であり、つまり一緒にマージできます。
SFMスケッチ¶
SfmSketch
¶
Sketch-Flip-Merge (SFM)データスケッチは、HyperLogLogと同様の、ノイズの多いランダムな個別カウントスケッチです。noisy_approx_set_sfm()
を参照してください。
分位数ダイジェスト¶
QDigest
¶
分位数ダイジェスト(qdigest)は、与えられた入力セットのデータの近似分布を捉えるサマリー構造であり、分布から近似分位数値を取得するためにクエリを実行できます。qdigestの精度は調整可能であり、スペースを犠牲にしてより正確な結果を得ることができます。
qdigestは、特定の分位数に属する値を尋ねるクエリに近似解を与えるために使用できます。qdigestの有用な特性の1つは、加算性があることです。つまり、精度を失うことなくマージできます。
approx_percentile
の部分結果を再利用できる場合は、qdigestが役立つ場合があります。たとえば、1週間の間に読み取られる99パーセンタイル値の毎日の読み取りに関心がある場合があります。approx_percentile
で過去1週間のデータを計算する代わりに、qdigest
を毎日保存し、99パーセンタイル値を取得するためにすばやくマージできます。
分位数ダイジェスト関数を参照してください。
T-ダイジェスト¶
TDigest
¶
T-ダイジェストはqdigestに似ていますが、数値の近似分布を表すために異なるアルゴリズムを使用します。T-ダイジェストは分位数ダイジェストよりもパフォーマンスに優れていますが、DOUBLE
型のみをサポートしています。T-ダイジェスト関数を参照してください。
KLLスケッチ¶
KLL Sketch
¶
KLLスケッチはqdigestに似ていますが、T-ダイジェストと同様に、数値の近似分布を表すために異なるアルゴリズムを使用します。PrestoのKLLスケッチは、int、bigint、double、varchar、boolean型をサポートしています。詳細については、スケッチ関数を参照してください。シリアライズされた形式では、Prestoによって保存されたkllsketch
型は、Apache DataSketchesライブラリを使用してKLLスケッチを読み取る他のアプリケーションによって直接読み取ることができます。
地理空間¶
Geospatial
¶
Prestoの地理空間型は、SQL/MM仕様とOpen Geospatial Consortium標準に準拠して、空間データを効率的に処理および分析するように設計されています。これらの型には、POINT
、LINESTRING
、POLYGON
、MULTIPOINT
、MULTILINESTRING
、MULTIPOLYGON
、およびGEOMETRYCOLLECTION
が含まれ、Well-Known Text (WKT)形式とWell-Known Binary (WKB)形式で表現できます。これらの型は、地理情報システム(GIS)や空間データ操作を必要とするその他のアプリケーションにとって重要な、空間測定や関係チェックなどの操作をサポートします。地理空間型はデータの整合性を確保し、複雑な空間クエリと分析のための堅牢なツールを提供します。
地理空間関数を参照してください。