すべてのプロダクト
Search
ドキュメントセンター

Hologres:Presto 関数

最終更新日:Mar 27, 2026

V3.1 以降、Hologres では hg_presto_funcs 拡張を介して Presto 互換関数がサポートされます。本トピックで紹介するすべての関数は、Velox 実行エンジン によって実装されています。

前提条件

開始する前に、以下の条件を満たしていることを確認してください。

  • V3.1 以降のバージョンを実行している Hologres インスタンス

  • 対象データベースへの Superuser アクセス権限

拡張のインストール

Superuser として以下の文を実行します。この操作はデータベース単位で 1 回実行すればよく、新しいデータベースを作成した場合は再度実行してください。

CREATE EXTENSION hg_presto_funcs;
説明

この拡張は hg_presto_funcs スキーマにのみインストールされます。他のスキーマを指定することはできません。

Presto 関数の呼び出し

すべての Presto 関数は hg_presto_funcs スキーマ内に配置されています。これらの関数を呼び出すには、関数名の先頭にスキーマ名を付与する方法か、セッション単位で検索パスを設定する方法のいずれかを選択してください。

-- オプション 1:各呼び出しにプレフィックスを付与
SELECT hg_presto_funcs.array_cum_sum(b) FROM public.presto_test;

-- オプション 2:セッション単位で検索パスを設定
SET search_path = hg_presto_funcs;
SELECT array_cum_sum(b) FROM public.presto_test;
重要

これらの関数は定数入力パラメーターをサポートしません。本トピックのすべての例では、以下に示すサンプルテーブルの列参照を使用しています。

サンプルテーブル

本トピックの例では、以下のテーブルを使用します。

CREATE TABLE public.presto_test(
  a INT, b INT[], c TEXT, d TEXT, e TEXT, f TEXT, g TEXT,
  h TEXT, i TEXT, j TEXT, k TEXT, l TEXT, m TEXT, n TEXT,
  o TEXT, p TEXT, r TEXT, s TEXT, t FLOAT, u TEXT
);

INSERT INTO public.presto_test
  VALUES (
    3, ARRAY[1, 2, 3, 2], 'A', '10010', 'SGVsbG8gV29ybGQh',
    '\x00000001', '\x0000000000000001', '48656C6C6F',
    '\x40490FD0', '\x400921FB54442D18', '\x48656C6C6F',
    '"dwdw"', '[1,2,3,4,5,6]', '{"x": {"a": 1, "b": 2}}',
    'café', 'apple,banana,cherry', 'ABCDA', 'running',
    3.1415926, '[1.0,2.0]'
  );

サポートされる関数

以下の表では、カテゴリ別に分類されたすべてのサポート関数を一覧表示します。各エントリには、パラメーターおよび戻り値の型を含む関数シグネチャを記載しています。

配列関数

関数シグネチャ説明結果
array_cum_sum(array(bigint)) → array(bigint)位置 n に、先頭から n 番目までの要素の合計値を格納した配列を返します。先頭から n 番目までの要素のいずれかが NULL の場合、位置 n には NULL を返します。SELECT array_cum_sum(b) FROM public.presto_test;{1,3,6,8}
array_has_duplicates(array(T)) → boolean配列に重複する要素が含まれる場合に true を返します。SELECT array_has_duplicates(b) FROM public.presto_test;t
array_join(array(T), varchar) → varchar指定された区切り文字を使用して、配列要素を文字列に連結します。SELECT array_join(b, ';') FROM public.presto_test;1;2;3;2
remove_nulls(array(T)) → array(T)配列から NULL 値を削除します。SELECT remove_nulls(b) FROM public.presto_test;{1,2,3,2}
trim_array(array(T), bigint) → array(T)配列の末尾から n 個の要素を削除します。SELECT trim_array(b, 2) FROM public.presto_test;{1,2}

ビット演算関数

関数シグネチャ説明結果
bit_count(bigint, bigint) → bigint指定されたビット幅内で、値のうち立っているビット(ハミング重み)の数をカウントします。SELECT bit_count(a, 32) FROM public.presto_test;2
bitwise_and(bigint, bigint) → bigint2 つの整数のビットごとの AND を返します。SELECT bitwise_and(a, 2) FROM public.presto_test;2
bitwise_or(bigint, bigint) → bigint2 つの整数のビットごとの OR を返します。SELECT bitwise_or(a, 2) FROM public.presto_test;3
bitwise_xor(bigint, bigint) → bigint2 つの整数のビットごとの XOR を返します。SELECT bitwise_xor(a, 2) FROM public.presto_test;1
bitwise_not(bigint) → bigint整数のビットごとの NOT を返します。SELECT bitwise_not(a) FROM public.presto_test;-4
bitwise_left_shift(bigint, bigint) → bigint値を n ビット左シフトします。SELECT bitwise_left_shift(a, 1) FROM public.presto_test;6
bitwise_shift_left(bigint, bigint, bigint) → bigint指定されたビット幅内で、値を n ビット左シフトします。SELECT bitwise_shift_left(a, 1, 32) FROM public.presto_test;6
bitwise_right_shift(bigint, bigint) → bigint値を n ビット右シフトします(論理シフト、ゼロ埋め)。SELECT bitwise_right_shift(a, 1) FROM public.presto_test;1
bitwise_logical_shift_right(bigint, bigint, bigint) → bigint指定されたビット幅内で、値を n ビット右シフトします(論理シフト、ゼロ埋め)。SELECT bitwise_logical_shift_right(a, 1, 32) FROM public.presto_test;1
bitwise_arithmetic_shift_right(bigint, bigint) → bigint符号ビットを保持したまま値を n ビット右シフトします(算術右シフト)。SELECT bitwise_arithmetic_shift_right(a, 1) FROM public.presto_test;1
bitwise_right_shift_arithmetic(bigint, bigint) → bigintbitwise_arithmetic_shift_right のエイリアスです。符号ビットを保持したまま値を n ビット右シフトします。SELECT bitwise_right_shift_arithmetic(a, 1) FROM public.presto_test;1
bitwise_right_shift および bitwise_logical_shift_right は、空いたビット位置をゼロで埋めます。bitwise_arithmetic_shift_right および bitwise_right_shift_arithmetic は、符号ビットで埋めます。したがって、負の整数に対してはこれらは等価となります。

バイナリおよびハッシュ関数

汎用的なハッシュ化には、xxhash64 を使用してください。これは crc32spooky_hash_v2_* よりも大幅に高速であり、より優れたハッシュ品質を提供します。hmac_* 関数は、鍵付き認証コードが必要な場合に使用します。crc32 は、既にこれに依存しているシステムとの互換性を確保する場合にのみ使用してください。
関数シグネチャ説明結果
crc32(varbinary) → bigintバイナリデータの CRC32 チェックサムを計算します。SELECT crc32(bin(a)::bytea) FROM public.presto_test;3596227959
xxhash64(varbinary) → varbinaryバイナリデータの xxHash64 ハッシュを計算し、64 ビットのバイナリ結果を返します。SELECT xxhash64(r::BYTEA) FROM public.presto_test;\x616f621d4581935f
spooky_hash_v2_32(varbinary) → varbinaryバイナリデータの SpookyHashV2 32 ビットハッシュを計算します。SELECT spooky_hash_v2_32(r::BYTEA) FROM public.presto_test;\x4a6ed4f7
spooky_hash_v2_64(varbinary) → varbinaryバイナリデータの SpookyHashV2 64 ビットハッシュを計算します。SELECT spooky_hash_v2_64(r::BYTEA) FROM public.presto_test;\x2d89595e4a6ed4f7
hmac_md5(varbinary, varchar) → varbinary指定されたキーと MD5 を使用して HMAC を計算します。SELECT hmac_md5(k::BYTEA, 'secret_key') FROM public.presto_test;\x52460d22ec7e402dc8c62aeda51ec920
hmac_sha1(varbinary, varchar) → varbinary指定されたキーと SHA-1 を使用して HMAC を計算します。SELECT hmac_sha1(k::BYTEA, 'secret_key') FROM public.presto_test;\xf8b6b3ee753fe1d8052cf317b0b4606089c85b19
hmac_sha256(varbinary, varchar) → varbinary指定されたキーと SHA-256 を使用して HMAC を計算します。SELECT hmac_sha256(k::BYTEA, 'secret_key') FROM public.presto_test;\x0f0d2e10ec2bdf21bbdf490fd103820089879277261e9aa53ce3f8ecfd46b687
hmac_sha512(varbinary, varchar) → varbinary指定されたキーと SHA-512 を使用して HMAC を計算します。SELECT hmac_sha512(k::BYTEA, 'secret_key') FROM public.presto_test;\x99376d305f3c2e729e60eb1e096fc364b8564452c4089b509c5d0d6e63608a43f14643a82880f156bf7df5ce32ba6bc35e36980772f9199b1cf43793e9bbd545
sha1(varbinary) → varcharバイナリデータの SHA-1 ハッシュを計算し、16 進数文字列として返します。SELECT sha1(a::text::bytea) FROM public.presto_test;77de68daecd823babbb58edb1c8e14d7106e83bb
from_base64(varchar) → varbinary標準 Base64 エンコーディングされた文字列をバイナリにデコードします。SELECT from_base64(e) FROM public.presto_test;\x48656c6c6f20576f726c6421
to_base64(varbinary) → varcharバイナリデータを標準 Base64 文字列としてエンコードします。SELECT to_base64(r::BYTEA) FROM public.presto_test;QUJDREE=
from_base64url(varchar) → varbinaryURL 安全な Base64 エンコーディングされた文字列をバイナリにデコードします。SELECT from_base64url(e) FROM public.presto_test;\x48656c6c6f20576f726c6421
to_base64url(varbinary) → varcharバイナリデータを URL 安全な Base64 文字列としてエンコードします。SELECT to_base64url(r::BYTEA) FROM public.presto_test;QUJDREE=
from_hex(varchar) → varbinary16 進数文字列をバイナリにデコードします。SELECT from_hex(h) FROM public.presto_test;\x48656c6c6f
from_big_endian_32(varbinary) → bigint32 ビットのビッグエンディアン 2 の補数バイナリ値を bigint にデコードします。SELECT from_big_endian_32(f::BYTEA) FROM public.presto_test;1
to_big_endian_32(bigint) → varbinary整数を 32 ビットのビッグエンディアン 2 の補数バイナリ値としてエンコードします。SELECT to_big_endian_32(a) FROM public.presto_test;\x00000003
from_big_endian_64(varbinary) → bigint64 ビットのビッグエンディアン 2 の補数バイナリ値を bigint にデコードします。SELECT from_big_endian_64(g::BYTEA) FROM public.presto_test;1
to_big_endian_64(bigint) → varbinary整数を 64 ビットのビッグエンディアン 2 の補数バイナリ値としてエンコードします。SELECT to_big_endian_64(a) FROM public.presto_test;\x0000000000000003
from_ieee754_32(varbinary) → real32 ビットのビッグエンディアン IEEE 754 バイナリ値を単精度浮動小数点数にデコードします。SELECT from_ieee754_32(i::BYTEA) FROM public.presto_test;3.14159012
to_ieee754_32(real) → varbinary単精度浮動小数点数を 32 ビットのビッグエンディアン IEEE 754 バイナリ値としてエンコードします。SELECT to_ieee754_32(a::REAL) FROM public.presto_test;\x40400000
from_ieee754_64(varbinary) → double64 ビットのビッグエンディアン IEEE 754 バイナリ値を倍精度浮動小数点数にデコードします。SELECT from_ieee754_64(j::BYTEA) FROM public.presto_test;3.141592653589793
to_ieee754_64(double) → varbinary倍精度浮動小数点数を 64 ビットのビッグエンディアン IEEE 754 バイナリ値としてエンコードします。SELECT to_ieee754_64(a::FLOAT) FROM public.presto_test;\x4008000000000000
from_base(varchar, bigint) → bigint文字列を指定された基数で解釈し、10 進数の値を返します。SELECT from_base(d, 2) FROM public.presto_test;18
to_base(bigint, bigint) → varchar整数を指定された基数での文字列表現に変換します。SELECT to_base(a, 2) FROM public.presto_test;11

数学および統計関数

一般的な数学

関数シグネチャ説明結果
clamp(double, double, double) → double値を [min, max] の範囲に制限します。値が範囲内であればその値を返し、範囲外であれば最も近い境界値を返します。SELECT clamp(a, 2, 9) FROM public.presto_test;3
cosh(double) → double値の双曲線余弦を返します。SELECT cosh(a) FROM public.presto_test;10.067661995777765
tanh(double) → double値の双曲線正接を返します。SELECT tanh(a) FROM public.presto_test;0.9950547536867305
log2(double) → double値の底 2 の対数を返します。SELECT log2(a) FROM public.presto_test;1.584962500721156
log10(double) → double値の底 10 の対数を返します。SELECT log10(a) FROM public.presto_test;0.47712125471966244
minus(double, double) → double2 つの数値の差 (x − y) を返します。SELECT minus(a, 1) FROM public.presto_test;2
negate(double) → double値の否定を返します。SELECT negate(a) FROM public.presto_test;-3
truncate(double, integer) → double値を小数点以下 n 桁まで切り捨てます。SELECT truncate(t, 2) FROM public.presto_test;3.14
is_finite(double) → boolean値が有限である場合に true を返します。SELECT is_finite(a) FROM public.presto_test;t
is_infinite(double) → boolean値が無限である場合に true を返します。SELECT is_infinite(a) FROM public.presto_test;f
is_nan(double) → boolean値が NaN(Not-a-Number)である場合に true を返します。SELECT is_nan(a) FROM public.presto_test;f
secure_rand() → double[0, 1) の範囲で暗号学的に安全な乱数の double 値を返します。SELECT secure_rand() FROM public.presto_test;0.22077085443234523
secure_random() → doublesecure_rand のエイリアスです。[0, 1) の範囲で暗号学的に安全な乱数の double 値を返します。SELECT secure_random() FROM public.presto_test;0.3414298654539425

累積分布関数(CDF)

関数シグネチャ説明結果
beta_cdf(double, double, double) → double指定された形状パラメーターを持つベータ分布の累積分布関数(CDF)を返します。SELECT beta_cdf(2, a, 0.5) FROM public.presto_test;0.6875
binomial_cdf(bigint, double, bigint) → double二項分布の CDF を返します。SELECT binomial_cdf(6, 0.5, a) FROM public.presto_test;0.65625
cauchy_cdf(double, double, double) → doubleコーシー分布の CDF を返します。SELECT cauchy_cdf(2, a, 0.5) FROM public.presto_test;0.6024163823495667
chi_squared_cdf(double, double) → doubleカイ二乗分布の CDF を返します。SELECT chi_squared_cdf(a, 4) FROM public.presto_test;0.7385358700508894
f_cdf(double, double, double) → doubleF 分布の CDF を返します。SELECT f_cdf(2, a, 0.5) FROM public.presto_test;0.350480947161671
gamma_cdf(double, double, double) → doubleガンマ分布の CDF を返します。SELECT gamma_cdf(2, a, 0.5) FROM public.presto_test;0.012437987627616913
laplace_cdf(double, double, double) → doubleラプラス分布の CDF を返します。SELECT laplace_cdf(0, 1, a) FROM public.presto_test;0.9751064658160681
normal_cdf(double, double, double) → double指定された平均および標準偏差を持つ正規分布の CDF を返します。SELECT normal_cdf(0, 1, a) FROM public.presto_test;0.9986501019683699
poisson_cdf(double, bigint) → doubleポアソン分布の CDF を返します。SELECT poisson_cdf(1, a) FROM public.presto_test;0.9810118431238462
weibull_cdf(double, double, double) → doubleワイブル分布の CDF を返します。SELECT weibull_cdf(2, a, 1.5) FROM public.presto_test;0.22119921692859512
inverse_beta_cdf(double, double, double) → doubleベータ分布の逆 CDF を返します。SELECT inverse_beta_cdf(2, a, 0.6875) FROM public.presto_test;0.5
inverse_cauchy_cdf(double, double, double) → doubleコーシー分布の逆 CDF を返します。SELECT inverse_cauchy_cdf(2, a, 0.5) FROM public.presto_test;2
inverse_laplace_cdf(double, double, double) → doubleラプラス分布の逆 CDF を返します。SELECT inverse_laplace_cdf(a, 1, 0.5) FROM public.presto_test;3
inverse_normal_cdf(double, double, double) → double指定された平均および標準偏差を持つ正規分布の逆 CDF を返します。SELECT inverse_normal_cdf(a, 1, 0.5) FROM public.presto_test;3
inverse_weibull_cdf(double, double, double) → doubleワイブル分布の逆 CDF を返します。SELECT inverse_weibull_cdf(2, a, 0.5) FROM public.presto_test;2.497663833473093
wilson_interval_lower(bigint, bigint, double) → doubleベルヌーイ試行における、指定された信頼度 z に対するウィルソン信頼区間の下限を返します。SELECT wilson_interval_lower(a, 20, 1.96) FROM public.presto_test;0.05236779195949585
wilson_interval_upper(bigint, bigint, double) → doubleベルヌーイ試行における、指定された信頼度 z に対するウィルソン信頼区間の上限を返します。SELECT wilson_interval_upper(a, 20, 1.96) FROM public.presto_test;0.3604232958869574

文字列および Unicode 関数

これらの関数は、ユーザーが視認する文字(グラフェムクラスター)ではなく、Unicode コードポイントに対して動作します。入力文字列は有効な UTF-8 形式である必要があります。
関数シグネチャ説明結果
codepoint(varchar) → integer単一文字の Unicode コードポイントを返します。SELECT codepoint(c) FROM public.presto_test;65
ends_with(varchar, varchar) → boolean文字列が指定された接尾辞で終わる場合に true を返します。SELECT ends_with(concat(a, 'hologres'), 'gres') FROM public.presto_test;t
hamming_distance(varchar, varchar) → bigint2 つの文字列間のハミング距離(文字が異なる位置の数)を返します。SELECT hamming_distance(e, 'SGVsBG7gV39ybGQh') FROM public.presto_test;3
levenshtein_distance(varchar, varchar) → bigint2 つの文字列間のレーベンシュタイン距離(編集距離)を返します。SELECT levenshtein(a::text, 'hologres') FROM public.presto_test;8
normalize(varchar) → varchar文字列を NFC 正規化形式に変換します。SELECT normalize(o) FROM public.presto_test;café
regexp_split(varchar, varchar) → array(varchar)正規表現を使用して文字列を分割し、その部分を配列として返します。SELECT regexp_split(p, ',') FROM public.presto_test;{"apple","banana","cherry"}
strrpos(varchar, varchar) → bigint文字列内の部分文字列の最後の出現位置を返します。SELECT STRRPOS(r, 'A') FROM public.presto_test;5
trim(varchar, varchar) → varchar文字列の両端から指定された文字の出現を削除します。SELECT trim(r, 'A') FROM public.presto_test;BCD
word_stem(varchar, varchar) → varchar指定された言語で単語の語幹を返します。英語の場合は 'en'、中国語の場合は 'zn' を指定します。SELECT word_stem(s, 'en') FROM public.presto_test;run

比較関数

関数シグネチャ説明結果
eq(T, T) → boolean2 つの値が等しい場合に true を返します。SELECT eq(c, 'A') FROM public.presto_test;t
neq(T, T) → boolean2 つの値が等しくない場合に true を返します。SELECT neq('A', c) FROM public.presto_test;f
gt(varchar, varchar) → booleanx > y の場合に true を返します。SELECT gt('B', c) FROM public.presto_test;t
gte(varchar, varchar) → booleanx ≥ y の場合に true を返します。SELECT gte('A', c) FROM public.presto_test;t
lt(varchar, varchar) → booleanx < y の場合に true を返します。SELECT lt('ABCDA', c) FROM public.presto_test;f
lte(varchar, varchar) → booleanx ≤ y の場合に true を返します。SELECT lte('A', c) FROM public.presto_test;t

JSON 関数

関数シグネチャ説明結果
is_json_scalar(varchar) → boolean値が JSON スカラー(オブジェクトまたは配列ではない)である場合に true を返します。SELECT is_json_scalar(l) FROM public.presto_test;t
json_array_contains(varchar, T) → booleanJSON 配列が指定された値を含む場合に true を返します。SELECT json_array_contains(u, 2) FROM public.presto_test;t
json_extract_scalar(varchar, varchar) → varchar指定された JSONPath で JSON 文字列からスカラー値を抽出します。SELECT json_extract_scalar(m, '$[1]') FROM public.presto_test;2
json_size(varchar, varchar) → bigint指定された JSONPath で JSON オブジェクトまたは配列の要素数を返します。SELECT json_size(n, '$.x') FROM public.presto_test;2

URL 関数

URL 抽出は、RFC 2396 で定義された URI 構文に従います。

[protocol:][//host[:port]][path][?query][#fragment]

抽出されたコンポーネントには、:? などの URI 構文区切り文字は含まれません。

関数シグネチャ説明結果
url_decode(varchar) → varcharURL エンコードされた文字列をデコードします。SELECT url_decode(url_encode(concat('www.', '中文', a, '.com'))) FROM public.presto_test;www.中文3.com
url_encode(varchar) → varchar特殊文字をエスケープして文字列を URL エンコードします。SELECT url_encode(concat('www.', '中文', a, '.com')) FROM public.presto_test;www.%E4%B8%AD%E6%96%873.com
url_extract_fragment(varchar) → varcharURL からフラグメント識別子を抽出します。SELECT url_extract_fragment(concat('https://www.example.com:', a, '080/products/shirt?color=red&size=XL#discount-section')) FROM public.presto_test;discount-section
url_extract_host(varchar) → varcharURL からホストを抽出します。SELECT url_extract_host(concat('https://www.example.com:', a, '080/products/shirt?color=red&size=XL#discount-section')) FROM public.presto_test;www.example.com
url_extract_parameter(varchar, varchar) → varchar指定された名前の最初のクエリパラメーターの値を抽出します。SELECT url_extract_parameter(concat('https://www.example.com:', a, '080/products/shirt?color=red&size=XL#discount-section'), 'color') FROM public.presto_test;red
url_extract_path(varchar) → varcharURL からパスを抽出します。SELECT url_extract_path(concat('https://www.example.com:', a, '080/products/shirt?color=red&size=XL#discount-section')) FROM public.presto_test;/products/shirt
url_extract_port(varchar) → bigintURL からポート番号を抽出します。SELECT url_extract_port(concat('https://www.example.com:', a, '080/products/shirt?color=red&size=XL#discount-section')) FROM public.presto_test;3088
url_extract_protocol(varchar) → varcharURL からプロトコルを抽出します。SELECT url_extract_protocol(concat('https://www.example.com:', a, '080/products/shirt?color=red&size=XL#discount-section')) FROM public.presto_test;https
url_extract_query(varchar) → varcharURL からクエリ文字列を抽出します。SELECT url_extract_query(concat('https://www.example.com:', a, '080/products/shirt?color=red&size=XL#discount-section')) FROM public.presto_test;color=red&size=XL

次のステップ