Todos os produtos
Search
Central de documentação

Hologres:Funções do Presto

Última atualização: Jun 28, 2026

A partir da versão V3.1, o Hologres oferece suporte a funções compatíveis com Presto por meio da extensão hg_presto_funcs. Todas as funções deste tópico utilizam o mecanismo de execução Velox.

Pré-requisitos

Antes de começar, verifique se você possui:

  • Uma instância do Hologres executando a versão V3.1 ou superior

  • Acesso de Superuser ao banco de dados de destino

Instalar a extensão

Execute a instrução a seguir como Superuser. Execute-a uma vez por banco de dados; caso crie um novo banco de dados, execute-a novamente.

CREATE EXTENSION hg_presto_funcs;
Nota

A extensão é instalada exclusivamente no schema hg_presto_funcs. Não é possível especificar um schema diferente.

Chamar funções do Presto

Todas as funções do Presto residem no schema hg_presto_funcs. Para chamá-las, adicione o prefixo ao nome de cada função ou defina o caminho de busca (search path) uma vez por sessão:

-- Option 1: prefix each call
SELECT hg_presto_funcs.array_cum_sum(b) FROM public.presto_test;

-- Option 2: set search path for the session
SET search_path = hg_presto_funcs;
SELECT array_cum_sum(b) FROM public.presto_test;
Importante

Essas funções não aceitam parâmetros de entrada constantes. Todos os exemplos neste tópico utilizam referências de colunas da tabela de amostra apresentada abaixo.

Tabela de amostra

Os exemplos deste tópico utilizam a seguinte tabela:

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]'
  );

Funções suportadas

As tabelas abaixo listam todas as funções suportadas, organizadas por categoria. Cada entrada apresenta a assinatura da função com os tipos de parâmetro e de retorno.

Funções de array

Assinatura da função

Descrição

Exemplo

Resultado

array_cum_sum(array(bigint)) → array(bigint)

Retorna um array em que a posição n contém a soma dos primeiros n elementos. Retorna null na posição n se qualquer um dos primeiros n elementos for null.

SELECT array_cum_sum(b) FROM public.presto_test;

{1,3,6,8}

array_has_duplicates(array(T)) → boolean

Retorna true se o array contiver elementos duplicados.

SELECT array_has_duplicates(b) FROM public.presto_test;

t

array_join(array(T), varchar) → varchar

Concatena os elementos do array em uma string usando o separador fornecido.

SELECT array_join(b, ';') FROM public.presto_test;

1;2;3;2

remove_nulls(array(T)) → array(T)

Remove valores NULL de um array.

SELECT remove_nulls(b) FROM public.presto_test;

{1,2,3,2}

trim_array(array(T), bigint) → array(T)

Remove n elementos do final de um array.

SELECT trim_array(b, 2) FROM public.presto_test;

{1,2}

Funções bit a bit

Assinatura da função

Descrição

Exemplo

Resultado

bit_count(bigint, bigint) → bigint

Conta o número de bits definidos (peso de Hamming) no valor dentro da largura de bits especificada.

SELECT bit_count(a, 32) FROM public.presto_test;

2

bitwise_and(bigint, bigint) → bigint

Retorna o resultado da operação AND bit a bit entre dois inteiros.

SELECT bitwise_and(a, 2) FROM public.presto_test;

2

bitwise_or(bigint, bigint) → bigint

Retorna o resultado da operação OR bit a bit entre dois inteiros.

SELECT bitwise_or(a, 2) FROM public.presto_test;

3

bitwise_xor(bigint, bigint) → bigint

Retorna o resultado da operação XOR bit a bit entre dois inteiros.

SELECT bitwise_xor(a, 2) FROM public.presto_test;

1

bitwise_not(bigint) → bigint

Retorna o resultado da operação NOT bit a bit de um inteiro.

SELECT bitwise_not(a) FROM public.presto_test;

-4

bitwise_left_shift(bigint, bigint) → bigint

Desloca o valor n bits para a esquerda.

SELECT bitwise_left_shift(a, 1) FROM public.presto_test;

6

bitwise_shift_left(bigint, bigint, bigint) → bigint

Desloca o valor n bits para a esquerda dentro da largura de bits especificada.

SELECT bitwise_shift_left(a, 1, 32) FROM public.presto_test;

6

bitwise_right_shift(bigint, bigint) → bigint

Desloca o valor n bits para a direita (lógico, preenchimento com zeros).

SELECT bitwise_right_shift(a, 1) FROM public.presto_test;

1

bitwise_logical_shift_right(bigint, bigint, bigint) → bigint

Desloca o valor n bits para a direita (lógico, preenchimento com zeros) dentro da largura de bits especificada.

SELECT bitwise_logical_shift_right(a, 1, 32) FROM public.presto_test;

1

bitwise_arithmetic_shift_right(bigint, bigint) → bigint

Desloca o valor n bits para a direita, preservando o bit de sinal (deslocamento aritmético à direita).

SELECT bitwise_arithmetic_shift_right(a, 1) FROM public.presto_test;

1

bitwise_right_shift_arithmetic(bigint, bigint) → bigint

Alias para bitwise_arithmetic_shift_right. Desloca o valor n bits para a direita, preservando o bit de sinal.

SELECT bitwise_right_shift_arithmetic(a, 1) FROM public.presto_test;

1

As funções bitwise_right_shift e bitwise_logical_shift_right preenchem os bits vagos com zeros. Já as funções bitwise_arithmetic_shift_right e bitwise_right_shift_arithmetic preenchem com o bit de sinal, tornando-as equivalentes para inteiros negativos.

Funções binárias e de hash

Para hashing de uso geral, utilize xxhash64 — ela é significativamente mais rápida que crc32 e spooky_hash_v2_* , além de produzir hashes de melhor qualidade. Utilize as funções hmac_* quando precisar de códigos de autenticação com chave. Use crc32 apenas para manter compatibilidade com sistemas que já dependem dela.

Assinatura da função

Descrição

Exemplo

Resultado

crc32(varbinary) → bigint

Calcula o checksum CRC32 de dados binários.

SELECT crc32(bin(a)::bytea) FROM public.presto_test;

3596227959

xxhash64(varbinary) → varbinary

Calcula o hash xxHash64 de dados binários e retorna um resultado binário de 64 bits.

SELECT xxhash64(r::BYTEA) FROM public.presto_test;

\x616f621d4581935f

spooky_hash_v2_32(varbinary) → varbinary

Calcula o hash SpookyHashV2 de 32 bits de dados binários.

SELECT spooky_hash_v2_32(r::BYTEA) FROM public.presto_test;

\x4a6ed4f7

spooky_hash_v2_64(varbinary) → varbinary

Calcula o hash SpookyHashV2 de 64 bits de dados binários.

SELECT spooky_hash_v2_64(r::BYTEA) FROM public.presto_test;

\x2d89595e4a6ed4f7

hmac_md5(varbinary, varchar) → varbinary

Calcula um HMAC usando MD5 e a chave fornecida.

SELECT hmac_md5(k::BYTEA, 'secret_key') FROM public.presto_test;

\x52460d22ec7e402dc8c62aeda51ec920

hmac_sha1(varbinary, varchar) → varbinary

Calcula um HMAC usando SHA-1 e a chave fornecida.

SELECT hmac_sha1(k::BYTEA, 'secret_key') FROM public.presto_test;

\xf8b6b3ee753fe1d8052cf317b0b4606089c85b19

hmac_sha256(varbinary, varchar) → varbinary

Calcula um HMAC usando SHA-256 e a chave fornecida.

SELECT hmac_sha256(k::BYTEA, 'secret_key') FROM public.presto_test;

\x0f0d2e10ec2bdf21bbdf490fd103820089879277261e9aa53ce3f8ecfd46b687

hmac_sha512(varbinary, varchar) → varbinary

Calcula um HMAC usando SHA-512 e a chave fornecida.

SELECT hmac_sha512(k::BYTEA, 'secret_key') FROM public.presto_test;

\x99376d305f3c2e729e60eb1e096fc364b8564452c4089b509c5d0d6e63608a43f14643a82880f156bf7df5ce32ba6bc35e36980772f9199b1cf43793e9bbd545

sha1(varbinary) → varchar

Calcula o hash SHA-1 de dados binários e o retorna como uma string hexadecimal.

SELECT sha1(a::text::bytea) FROM public.presto_test;

77de68daecd823babbb58edb1c8e14d7106e83bb

from_base64(varchar) → varbinary

Decodifica uma string codificada em Base64 padrão para binário.

SELECT from_base64(e) FROM public.presto_test;

\x48656c6c6f20576f726c6421

to_base64(varbinary) → varchar

Codifica dados binários como uma string Base64 padrão.

SELECT to_base64(r::BYTEA) FROM public.presto_test;

QUJDREE=

from_base64url(varchar) → varbinary

Decodifica uma string codificada em Base64 segura para URL para binário.

SELECT from_base64url(e) FROM public.presto_test;

\x48656c6c6f20576f726c6421

to_base64url(varbinary) → varchar

Codifica dados binários como uma string Base64 segura para URL.

SELECT to_base64url(r::BYTEA) FROM public.presto_test;

QUJDREE=

from_hex(varchar) → varbinary

Decodifica uma string hexadecimal para binário.

SELECT from_hex(h) FROM public.presto_test;

\x48656c6c6f

from_big_endian_32(varbinary) → bigint

Decodifica um valor binário big-endian de 32 bits em complemento de dois para um bigint.

SELECT from_big_endian_32(f::BYTEA) FROM public.presto_test;

1

to_big_endian_32(bigint) → varbinary

Codifica um inteiro como um valor binário big-endian de 32 bits em complemento de dois.

SELECT to_big_endian_32(a) FROM public.presto_test;

\x00000003

from_big_endian_64(varbinary) → bigint

Decodifica um valor binário big-endian de 64 bits em complemento de dois para um bigint.

SELECT from_big_endian_64(g::BYTEA) FROM public.presto_test;

1

to_big_endian_64(bigint) → varbinary

Codifica um inteiro como um valor binário big-endian de 64 bits em complemento de dois.

SELECT to_big_endian_64(a) FROM public.presto_test;

\x0000000000000003

from_ieee754_32(varbinary) → real

Decodifica um valor binário IEEE 754 big-endian de 32 bits para um número de ponto flutuante de precisão simples.

SELECT from_ieee754_32(i::BYTEA) FROM public.presto_test;

3.14159012

to_ieee754_32(real) → varbinary

Codifica um número de ponto flutuante de precisão simples como um valor binário IEEE 754 big-endian de 32 bits.

SELECT to_ieee754_32(a::REAL) FROM public.presto_test;

\x40400000

from_ieee754_64(varbinary) → double

Decodifica um valor binário IEEE 754 big-endian de 64 bits para um número de ponto flutuante de precisão dupla.

SELECT from_ieee754_64(j::BYTEA) FROM public.presto_test;

3.141592653589793

to_ieee754_64(double) → varbinary

Codifica um número de ponto flutuante de precisão dupla como um valor binário IEEE 754 big-endian de 64 bits.

SELECT to_ieee754_64(a::FLOAT) FROM public.presto_test;

\x4008000000000000

from_base(varchar, bigint) → bigint

Interpreta uma string como um número na base fornecida e retorna seu valor decimal.

SELECT from_base(d, 2) FROM public.presto_test;

18

to_base(bigint, bigint) → varchar

Converte um inteiro para sua representação em string na base fornecida.

SELECT to_base(a, 2) FROM public.presto_test;

11

Funções matemáticas e estatísticas

Matemática geral

Assinatura da função

Descrição

Exemplo

Resultado

clamp(double, double, double) → double

Restringe um valor ao intervalo [min, max]. Retorna o próprio valor se estiver dentro do intervalo ou o limite mais próximo caso contrário.

SELECT clamp(a, 2, 9) FROM public.presto_test;

3

cosh(double) → double

Retorna o cosseno hiperbólico do valor.

SELECT cosh(a) FROM public.presto_test;

10.067661995777765

tanh(double) → double

Retorna a tangente hiperbólica do valor.

SELECT tanh(a) FROM public.presto_test;

0.9950547536867305

log2(double) → double

Retorna o logaritmo na base 2 do valor.

SELECT log2(a) FROM public.presto_test;

1.584962500721156

log10(double) → double

Retorna o logaritmo na base 10 do valor.

SELECT log10(a) FROM public.presto_test;

0.47712125471966244

minus(double, double) → double

Retorna a diferença entre dois números (x − y).

SELECT minus(a, 1) FROM public.presto_test;

2

negate(double) → double

Retorna a negação do valor.

SELECT negate(a) FROM public.presto_test;

-3

truncate(double, integer) → double

Trunca o valor para n casas decimais.

SELECT truncate(t, 2) FROM public.presto_test;

3.14

is_finite(double) → boolean

Retorna true se o valor for finito.

SELECT is_finite(a) FROM public.presto_test;

t

is_infinite(double) → boolean

Retorna true se o valor for infinito.

SELECT is_infinite(a) FROM public.presto_test;

f

is_nan(double) → boolean

Retorna true se o valor for "não numérico" (NaN).

SELECT is_nan(a) FROM public.presto_test;

f

secure_rand() → double

Retorna um número double aleatório criptograficamente seguro no intervalo [0, 1).

SELECT secure_rand() FROM public.presto_test;

0.22077085443234523

secure_random() → double

Alias para secure_rand. Retorna um número double aleatório criptograficamente seguro no intervalo [0, 1).

SELECT secure_random() FROM public.presto_test;

0.3414298654539425

Funções de distribuição cumulativa (CDF)

Assinatura da função

Descrição

Exemplo

Resultado

beta_cdf(double, double, double) → double

Retorna a função de distribuição cumulativa (CDF) da distribuição beta com os parâmetros de forma fornecidos.

SELECT beta_cdf(2, a, 0.5) FROM public.presto_test;

0.6875

binomial_cdf(bigint, double, bigint) → double

Retorna a CDF da distribuição binomial.

SELECT binomial_cdf(6, 0.5, a) FROM public.presto_test;

0.65625

cauchy_cdf(double, double, double) → double

Retorna a CDF da distribuição de Cauchy.

SELECT cauchy_cdf(2, a, 0.5) FROM public.presto_test;

0.6024163823495667

chi_squared_cdf(double, double) → double

Retorna a CDF da distribuição qui-quadrado.

SELECT chi_squared_cdf(a, 4) FROM public.presto_test;

0.7385358700508894

f_cdf(double, double, double) → double

Retorna a CDF da distribuição F.

SELECT f_cdf(2, a, 0.5) FROM public.presto_test;

0.350480947161671

gamma_cdf(double, double, double) → double

Retorna a CDF da distribuição gama.

SELECT gamma_cdf(2, a, 0.5) FROM public.presto_test;

0.012437987627616913

laplace_cdf(double, double, double) → double

Retorna a CDF da distribuição de Laplace.

SELECT laplace_cdf(0, 1, a) FROM public.presto_test;

0.9751064658160681

normal_cdf(double, double, double) → double

Retorna a CDF da distribuição normal com a média e o desvio padrão fornecidos.

SELECT normal_cdf(0, 1, a) FROM public.presto_test;

0.9986501019683699

poisson_cdf(double, bigint) → double

Retorna a CDF da distribuição de Poisson.

SELECT poisson_cdf(1, a) FROM public.presto_test;

0.9810118431238462

weibull_cdf(double, double, double) → double

Retorna a CDF da distribuição de Weibull.

SELECT weibull_cdf(2, a, 1.5) FROM public.presto_test;

0.22119921692859512

inverse_beta_cdf(double, double, double) → double

Retorna a CDF inversa da distribuição beta.

SELECT inverse_beta_cdf(2, a, 0.6875) FROM public.presto_test;

0.5

inverse_cauchy_cdf(double, double, double) → double

Retorna a CDF inversa da distribuição de Cauchy.

SELECT inverse_cauchy_cdf(2, a, 0.5) FROM public.presto_test;

2

inverse_laplace_cdf(double, double, double) → double

Retorna a CDF inversa da distribuição de Laplace.

SELECT inverse_laplace_cdf(a, 1, 0.5) FROM public.presto_test;

3

inverse_normal_cdf(double, double, double) → double

Retorna a CDF inversa da distribuição normal com a média e o desvio padrão fornecidos.

SELECT inverse_normal_cdf(a, 1, 0.5) FROM public.presto_test;

3

inverse_weibull_cdf(double, double, double) → double

Retorna a CDF inversa da distribuição de Weibull.

SELECT inverse_weibull_cdf(2, a, 0.5) FROM public.presto_test;

2.497663833473093

wilson_interval_lower(bigint, bigint, double) → double

Retorna o limite inferior do intervalo de confiança de Wilson para um ensaio de Bernoulli no nível de confiança z fornecido.

SELECT wilson_interval_lower(a, 20, 1.96) FROM public.presto_test;

0.05236779195949585

wilson_interval_upper(bigint, bigint, double) → double

Retorna o limite superior do intervalo de confiança de Wilson para um ensaio de Bernoulli no nível de confiança z fornecido.

SELECT wilson_interval_upper(a, 20, 1.96) FROM public.presto_test;

0.3604232958869574

Funções de string e Unicode

Essas funções operam em pontos de código Unicode, não em caracteres visíveis ao usuário (clusters de grafemas). As strings de entrada devem estar em UTF-8 válido.

Assinatura da função

Descrição

Exemplo

Resultado

codepoint(varchar) → integer

Retorna o ponto de código Unicode de um único caractere.

SELECT codepoint(c) FROM public.presto_test;

65

ends_with(varchar, varchar) → boolean

Retorna true se a string terminar com o sufixo fornecido.

SELECT ends_with(concat(a, 'hologres'), 'gres') FROM public.presto_test;

t

hamming_distance(varchar, varchar) → bigint

Retorna a distância de Hamming entre duas strings — o número de posições onde os caracteres diferem.

SELECT hamming_distance(e, 'SGVsBG7gV39ybGQh') FROM public.presto_test;

3

levenshtein_distance(varchar, varchar) → bigint

Retorna a distância de Levenshtein (distância de edição) entre duas strings.

SELECT levenshtein(a::text, 'hologres') FROM public.presto_test;

8

normalize(varchar) → varchar

Transforma uma string para a forma normalizada NFC.

SELECT normalize(o) FROM public.presto_test;

café

regexp_split(varchar, varchar) → array(varchar)

Divide uma string usando uma expressão regular e retorna as partes como um array.

SELECT regexp_split(p, ',') FROM public.presto_test;

{"apple","banana","cherry"}

strrpos(varchar, varchar) → bigint

Retorna a posição da última ocorrência de uma substring dentro de uma string.

SELECT STRRPOS(r, 'A') FROM public.presto_test;

5

trim(varchar, varchar) → varchar

Remove ocorrências dos caracteres especificados de ambas as extremidades da string.

SELECT trim(r, 'A') FROM public.presto_test;

BCD

word_stem(varchar, varchar) → varchar

Retorna o radical de uma palavra no idioma especificado. Passe 'en' para inglês ou 'zn' para chinês.

SELECT word_stem(s, 'en') FROM public.presto_test;

run

Funções de comparação

Assinatura da função

Descrição

Exemplo

Resultado

eq(T, T) → boolean

Retorna true se os dois valores forem iguais.

SELECT eq(c, 'A') FROM public.presto_test;

t

neq(T, T) → boolean

Retorna true se os dois valores não forem iguais.

SELECT neq('A', c) FROM public.presto_test;

f

gt(varchar, varchar) → boolean

Retorna true se x > y.

SELECT gt('B', c) FROM public.presto_test;

t

gte(varchar, varchar) → boolean

Retorna true se x ≥ y.

SELECT gte('A', c) FROM public.presto_test;

t

lt(varchar, varchar) → boolean

Retorna true se x < y.

SELECT lt('ABCDA', c) FROM public.presto_test;

f

lte(varchar, varchar) → boolean

Retorna true se x ≤ y.

SELECT lte('A', c) FROM public.presto_test;

t

Funções JSON

Assinatura da função

Descrição

Exemplo

Resultado

is_json_scalar(varchar) → boolean

Retorna true se o valor for um escalar JSON (não sendo objeto nem array).

SELECT is_json_scalar(l) FROM public.presto_test;

t

json_array_contains(varchar, T) → boolean

Retorna true se o array JSON contiver o valor fornecido.

SELECT json_array_contains(u, 2) FROM public.presto_test;

t

json_extract_scalar(varchar, varchar) → varchar

Extrai um valor escalar de uma string JSON no JSONPath fornecido.

SELECT json_extract_scalar(m, '$[1]') FROM public.presto_test;

2

json_size(varchar, varchar) → bigint

Retorna o número de elementos no objeto ou array JSON no JSONPath fornecido.

SELECT json_size(n, '$.x') FROM public.presto_test;

2

Funções de URL

A extração de URL segue a sintaxe URI definida na RFC 2396:

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

Os componentes extraídos não incluem separadores de sintaxe URI, como : ou ?.

Assinatura da função

Descrição

Exemplo

Resultado

url_decode(varchar) → varchar

Decodifica uma string codificada por URL.

SELECT url_decode(url_encode(concat('www.', '中文', a, '.com'))) FROM public.presto_test;

www.中文3.com

url_encode(varchar) → varchar

Codifica uma string por URL, escapando caracteres especiais.

SELECT url_encode(concat('www.', '中文', a, '.com')) FROM public.presto_test;

www.%E4%B8%AD%E6%96%873.com

url_extract_fragment(varchar) → varchar

Extrai o identificador de fragmento de uma URL.

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) → varchar

Extrai o host de uma URL.

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

Extrai o valor do primeiro parâmetro de consulta com o nome fornecido.

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) → varchar

Extrai o caminho (path) de uma URL.

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) → bigint

Extrai o número da porta de uma URL.

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) → varchar

Extrai o protocolo de uma URL.

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) → varchar

Extrai a string de consulta (query string) de uma URL.

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

Próximos passos