Introducido en: v25.6.0
Decodifica una cadena de dirección Bech32 generada por los algoritmos bech32 o bech32m.
A diferencia de la función de codificación, bech32Decode manejará automáticamente las FixedStrings con relleno.
Sintaxis
bech32Decode(address[, 'raw'])
Argumentos
address — Una cadena Bech32 que se va a decodificar. String o FixedString
mode — Opcional. Pase 'raw' para decodificar sin eliminar el primer byte como versión witness. Use esta opción para direcciones que no sean SegWit (p. ej., Cosmos SDK). String
Valor devuelto
Devuelve una tupla compuesta por (hrp, data) que se usó para codificar la cadena. Los datos están en formato binario. Tuple(String, String)
Ejemplos
Decodificar una dirección
SELECT tup.1 AS hrp, hex(tup.2) AS data FROM (SELECT bech32Decode('bc1w508d6qejxtdg4y5r3zarvary0c5xw7kj7gz7z') AS tup)
bc 751E76E8199196D454941C45D1B3A323F1433BD6
Dirección de la red de pruebas
SELECT tup.1 AS hrp, hex(tup.2) AS data FROM (SELECT bech32Decode('tb1w508d6qejxtdg4y5r3zarvary0c5xw7kzp034v') AS tup)
tb 751E76E8199196D454941C45D1B3A323F1433BD6
Introducido en: v25.6.0
Codifica una cadena de datos binarios, junto con una parte legible para humanos (HRP), mediante los algoritmos Bech32 o Bech32m.
Al usar el tipo de dato FixedString, si un valor no llena por completo la fila, se rellena con caracteres nulos.
Aunque la función bech32Encode gestiona esto automáticamente para el argumento hrp, en el caso del argumento data los valores no deben estar rellenados.
Por este motivo, no se recomienda usar el tipo de dato FixedString para los valores de datos, a menos que tenga la certeza
de que todos tienen la misma longitud y se asegure de que la columna FixedString también esté configurada con esa longitud.
Sintaxis
bech32Encode(hrp, data[, witver | 'bech32' | 'bech32m'])
Argumentos
hrp — Una cadena String de 1 - 83 caracteres en minúsculas que especifica la “parte legible para humanos” del código. Normalmente, ‘bc’ o ‘tb’. String o FixedString
data — Una cadena String de datos binarios para codificar. String o FixedString
witver_or_variant — Opcional. Puede ser una versión witness de tipo UInt* (predeterminado = 1, 0 para Bech32, 1+ para Bech32m) o una variante de codificación de tipo String: 'bech32' (BIP173) o 'bech32m' (BIP350). Cuando se usa una variante en forma de cadena, no se antepone ningún byte de versión witness; esto es necesario para direcciones no SegWit, como las de Cosmos SDK. UInt* o String
Valor devuelto
Devuelve una cadena de dirección Bech32, compuesta por la parte legible para humanos, un carácter separador que siempre es ‘1’ y una parte de datos. La longitud de la cadena nunca superará los 90 caracteres. Si el algoritmo no puede generar una dirección válida a partir de la entrada, devolverá una cadena vacía. String
Ejemplos
Bech32m predeterminado
-- Cuando no se proporciona una versión witness, el valor predeterminado es 1, el algoritmo Bech32m actualizado.
SELECT bech32Encode('bc', unhex('751e76e8199196d454941c45d1b3a323f1433bd6'))
bc1w508d6qejxtdg4y5r3zarvary0c5xw7k8zcwmq
Algoritmo Bech32
-- Una versión witness igual a 0 producirá una cadena de dirección diferente.
SELECT bech32Encode('bc', unhex('751e76e8199196d454941c45d1b3a323f1433bd6'), 0)
bc1w508d6qejxtdg4y5r3zarvary0c5xw7kj7gz7z
HRP personalizado
-- Aunque 'bc' (Mainnet) y 'tb' (Testnet) son los únicos valores hrp permitidos para el
-- formato de dirección SegWit, Bech32 permite cualquier hrp que cumpla los requisitos anteriores.
SELECT bech32Encode('abcdefg', unhex('751e76e8199196d454941c45d1b3a323f1433bd6'), 10)
abcdefg1w508d6qejxtdg4y5r3zarvary0c5xw7k9rp8r4
Dirección de Cosmos SDK (BIP173, sin versión witness)
-- El uso de la variante 'bech32' codifica datos sin procesar sin un byte de versión witness,
-- compatible con Cosmos SDK, Injective, Osmosis y otras cadenas no SegWit.
SELECT bech32Encode('inj', unhex('751e76e8199196d454941c45d1b3a323f1433bd6'), 'bech32')
inj1w508d6qejxtdg4y5r3zarvary0c5xw7kgj5aqs
Introducido en: v21.8.0
Devuelve una cadena que contiene la representación binaria del argumento
según la siguiente lógica para distintos tipos:
| Tipo | Descripción |
|---|
(U)Int* | Imprime los dígitos binarios del más significativo al menos significativo (orden big-endian o “legible para humanos”). Comienza con el byte distinto de cero más significativo (se omiten los bytes cero iniciales), pero siempre imprime ocho dígitos de cada byte si el dígito inicial es cero. |
Date y DateTime | Se formatean como los enteros correspondientes (el número de días desde epoch para Date y el valor de la marca temporal Unix para DateTime). |
String y FixedString | Todos los bytes se codifican simplemente como ocho números binarios. Los bytes cero no se omiten. |
Float* y Decimal | Se codifican según su representación en memoria. Como admitimos arquitectura little-endian, se codifican en little-endian. Los bytes cero iniciales/finales no se omiten. |
UUID | Se codifica como una cadena en orden big-endian. |
Sintaxis
Argumentos
Valor devuelto
Devuelve una cadena con la representación binaria del argumento. String
Ejemplos
Entero simple
┌─bin(14)──┐
│ 00001110 │
└──────────┘
Números Float32
SELECT bin(toFloat32(number)) AS bin_presentation FROM numbers(15, 2)
┌─bin_presentation─────────────────┐
│ 00000000000000000111000001000001 │
│ 00000000000000001000000001000001 │
└──────────────────────────────────┘
Números de tipo Float64
SELECT bin(toFloat64(number)) AS bin_presentation FROM numbers(15, 2)
┌─bin_presentation─────────────────────────────────────────────────┐
│ 0000000000000000000000000000000000000000000000000010111001000000 │
│ 0000000000000000000000000000000000000000000000000011000001000000 │
└──────────────────────────────────────────────────────────────────┘
Conversión de UUID
SELECT bin(toUUID('61f0c404-5cb3-11e7-907b-a6006ad3dba0')) AS bin_uuid
┌─bin_uuid─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ 01100001111100001100010000000100010111001011001100010001111001111001000001111011101001100000000001101010110100111101101110100000 │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
Introducido en: v21.7.0
Esta función devuelve las posiciones (en orden ascendente) de los bits con valor 1 en la representación binaria de un entero sin signo.
Los enteros de entrada con signo se convierten primero en un entero sin signo.
Sintaxis
Argumentos
Valor devuelto
Devuelve un array con las posiciones, ordenadas de forma ascendente, de los bits con valor 1 en la representación binaria de la entrada. Array(UInt64)
Ejemplos
Un solo bit activado
SELECT bitPositionsToArray(toInt8(1)) AS bit_positions
┌─bit_positions─┐
│ [0] │
└───────────────┘
Todos los bits a 1
SELECT bitPositionsToArray(toInt8(-1)) AS bit_positions
┌─bit_positions─────────────┐
│ [0, 1, 2, 3, 4, 5, 6, 7] │
└───────────────────────────┘
Introducida en: v1.1.0
Esta función descompone un entero en una suma de potencias de dos.
Las potencias de dos se devuelven en un array ordenado de forma ascendente.
Sintaxis
Argumentos
Valor devuelto
Devuelve un array con las potencias de dos en orden ascendente cuya suma es igual al número de entrada. Array(UInt64)
Ejemplos
Ejemplo básico
SELECT bitmaskToArray(50) AS powers_of_two
┌─powers_of_two───┐
│ [2, 16, 32] │
└─────────────────┘
Una sola potencia de dos
SELECT bitmaskToArray(8) AS powers_of_two
┌─powers_of_two─┐
│ [8] │
└───────────────┘
Introducido en: v1.1.0
Como bitmaskToArray, pero devuelve las potencias de dos en una cadena separada por comas.
Sintaxis
Argumentos
Valor devuelto
Devuelve una cadena con potencias de dos separadas por comas. String
Ejemplos
Ejemplo básico
SELECT bitmaskToList(50) AS powers_list
┌─powers_list───┐
│ 2, 16, 32 │
└───────────────┘
Introducido en: v20.1.0
Devuelve una cadena cuya longitud es igual al número de argumentos proporcionados, donde cada byte
tiene el valor del argumento correspondiente. Acepta varios argumentos de tipos numéricos.
Si el valor del argumento está fuera del rango del tipo de datos UInt8, se convierte
a UInt8 con posible redondeo y desbordamiento.
Sintaxis
char(num1[, num2[, ...]])
Argumentos
Valor devuelto
Devuelve una cadena a partir de los bytes dados. String
Ejemplos
Ejemplo básico
SELECT char(104.1, 101, 108.9, 108.9, 111) AS hello;
┌─hello─┐
│ hello │
└───────┘
Creación de codificaciones arbitrarias
-- Puedes construir una cadena con codificación arbitraria pasando los bytes correspondientes.
-- por ejemplo UTF8
SELECT char(0xD0, 0xBF, 0xD1, 0x80, 0xD0, 0xB8, 0xD0, 0xB2, 0xD0, 0xB5, 0xD1, 0x82) AS hello;
┌─hello──┐
│ привет │
└────────┘
Introducido en: v1.1.0
Devuelve una cadena que contiene la representación hexadecimal del argumento
según la siguiente lógica para distintos tipos:
| Tipo | Descripción |
|---|
(U)Int* | Imprime dígitos hexadecimales (“nibbles”) del más significativo al menos significativo (orden big-endian o de “legible para humanos”). Comienza con el byte distinto de cero más significativo (se omiten los bytes cero iniciales), pero siempre imprime ambos dígitos de cada byte, incluso si el dígito inicial es cero. |
Date and DateTime | Se formatea como los enteros correspondientes (el número de días desde la época para Date y el valor de la marca de tiempo Unix para DateTime). |
String and FixedString | Todos los bytes se codifican simplemente como dos dígitos hexadecimales. Los bytes cero no se omiten. |
Float* and Decimal | Se codifican según su representación en memoria. ClickHouse representa internamente los valores siempre en little endian, por lo tanto se codifican de esa manera. Los bytes cero iniciales y finales no se omiten. |
UUID | Se codifica como una cadena en orden big-endian. |
La función usa letras mayúsculas A-F y no utiliza ningún prefijo (como 0x) ni sufijo (como h).
Sintaxis
Argumentos
Valor devuelto
Devuelve una cadena con la representación hexadecimal del argumento. String
Ejemplos
Entero simple
Números de tipo Float32
SELECT hex(toFloat32(number)) AS hex_presentation FROM numbers(15, 2)
┌─hex_presentation─┐
│ 00007041 │
│ 00008041 │
└──────────────────┘
Números Float64
SELECT hex(toFloat64(number)) AS hex_presentation FROM numbers(15, 2)
┌─hex_presentation─┐
│ 0000000000002E40 │
│ 0000000000003040 │
└──────────────────┘
Conversión de UUID
SELECT lower(hex(toUUID('61f0c404-5cb3-11e7-907b-a6006ad3dba0'))) AS uuid_hex
┌─uuid_hex─────────────────────────┐
│ 61f0c4045cb311e7907ba6006ad3dba0 │
└──────────────────────────────────┘
Introducido en: v24.6.0
Decodifica un índice de curva de Hilbert de nuevo en una tupla de enteros sin signo, que representa coordenadas en un espacio multidimensional.
Al igual que la función hilbertEncode, esta función tiene dos modos de funcionamiento:
Modo simple
Acepta hasta 2 enteros sin signo como argumentos y produce un código UInt64.
Modo expandido
Acepta una máscara de rango (tupla) como primer argumento y hasta 2 enteros sin signo como
argumentos adicionales. Cada número de la máscara configura la cantidad de bits en que
el argumento correspondiente se desplazará a la izquierda, escalando así el argumento
dentro de su rango.
La expansión de rango puede resultar útil cuando se necesita una distribución similar para
argumentos con rangos (o cardinalidad) muy diferentes. Por ejemplo: ‘Dirección IP’ (0...FFFFFFFF)
y ‘Código de país’ (0...FF). Al igual que con la función de codificación, esto se limita a 8
números como máximo.
Sintaxis
hilbertDecode(tuple_size, code)
Argumentos
Valor devuelto
Devuelve una tupla del tamaño especificado. Tuple(UInt64)
Ejemplos
Modo simple
SELECT hilbertDecode(2, 31)
Un único argumento
-- El código de Hilbert para un argumento siempre es el argumento en sí (como una tupla).
SELECT hilbertDecode(1, 1)
Modo ampliado
-- Un único argumento con una tupla que especifica desplazamientos de bits se desplazará a la derecha en consecuencia.
SELECT hilbertDecode(tuple(2), 32768)
Uso con columnas
-- Primero, crear la tabla e insertar algunos datos
CREATE TABLE hilbert_numbers(
n1 UInt32,
n2 UInt32
)
ENGINE=MergeTree()
ORDER BY n1 SETTINGS index_granularity_bytes = '10Mi';
insert into hilbert_numbers (*) values(1,2);
-- Usar nombres de columna en lugar de constantes como argumentos de la función
SELECT untuple(hilbertDecode(2, hilbertEncode(n1, n2))) FROM hilbert_numbers;
Introducido en: v24.6.0
Calcula el código de la curva de Hilbert para una lista de enteros sin signo.
La función tiene dos modos de operación:
Modo simple
Acepta hasta 2 enteros sin signo como argumentos y genera un código UInt64.
Modo expandido
Acepta una máscara de rango (Tuple) como
primer argumento y hasta 2 enteros sin signo
como argumentos adicionales.
Cada número de la máscara indica cuántos bits se desplazará a la izquierda el
argumento correspondiente, lo que escala efectivamente el argumento dentro de su rango.
Sintaxis
-- Modo simplificado
hilbertEncode(args)
-- Modo expandido
hilbertEncode(range_mask, args)
Argumentos
args — Como máximo, dos valores UInt o columnas de tipo UInt. UInt8/16/32/64
range_mask — Para el modo expandido, como máximo, dos valores UInt o columnas de tipo UInt. UInt8/16/32/64
Valor devuelto
Devuelve un código UInt64. UInt64
Ejemplos
Modo simple
SELECT hilbertEncode(3, 4)
Modo expandido
-- La expansión de rango puede ser útil cuando se necesita una distribución similar para
-- argumentos con rangos (o cardinalidad) muy diferentes.
-- Por ejemplo: 'IP Address' (0...FFFFFFFF) y 'Country code' (0...FF).
-- Nota: el tamaño del tuple debe ser igual al número de los demás argumentos.
SELECT hilbertEncode((10, 6), 1024, 16)
Un solo argumento
-- Para un único argumento sin tupla, la función devuelve el argumento
-- en sí mismo como el índice de Hilbert, ya que no se necesita asignación dimensional.
SELECT hilbertEncode(1)
Un solo argumento expandido
-- Si se proporciona un único argumento con una tupla que especifica los desplazamientos de bits, la función
-- desplaza el argumento hacia la izquierda el número de bits especificado.
SELECT hilbertEncode(tuple(2), 128)
Uso de columnas
-- Primero, crear la tabla e insertar algunos datos
CREATE TABLE hilbert_numbers(
n1 UInt32,
n2 UInt32
)
ENGINE=MergeTree()
ORDER BY n1;
insert into hilbert_numbers (*) values(1, 2);
-- Usar nombres de columna en lugar de constantes como argumentos de la función
SELECT hilbertEncode(n1, n2) FROM hilbert_numbers;
Introducido en: v24.6.0
Decodifica una codificación de Morton (ZCurve) en la tupla correspondiente de enteros sin signo.
Al igual que la función mortonEncode, esta función tiene dos modos de funcionamiento:
Modo simple
Acepta el tamaño de la tupla resultante como primer argumento y el código como segundo argumento.
Modo expandido
Acepta una máscara de rango (tupla) como primer argumento y el código como segundo argumento.
Cada número de la máscara configura el grado de reducción del rango:
1 - sin reducción
2 - reducción de 2x
3 - reducción de 3x
⋮
- Hasta 8x de reducción.
La expansión del rango puede resultar útil cuando se necesita una distribución similar para
argumentos con rangos muy diferentes (o cardinalidad). Por ejemplo: ‘Dirección IP’ (0...FFFFFFFF)
y ‘código de país’ (0...FF). Al igual que con la función de codificación, esto está limitado a
un máximo de 8 números.
Sintaxis
-- Modo simple
mortonDecode(tuple_size, code)
-- Modo expandido
mortonDecode(range_mask, code)
Argumentos
tuple_size — Valor entero no superior a 8. UInt8/16/32/64
range_mask — En el modo expandido, la máscara de cada argumento. La máscara es una tupla de enteros sin signo. Cada número de la máscara configura el grado de reducción del rango. Tuple(UInt8/16/32/64)
code — Código UInt64. UInt64
Valor devuelto
Devuelve una tupla del tamaño especificado. Tuple(UInt64)
Ejemplos
Modo simple
SELECT mortonDecode(3, 53)
Un solo argumento
SELECT mortonDecode(1, 1)
Modo expandido, reducción de un argumento
SELECT mortonDecode(tuple(2), 32768)
Uso de columnas
-- Primero crear la tabla e insertar algunos datos
CREATE TABLE morton_numbers(
n1 UInt32,
n2 UInt32,
n3 UInt16,
n4 UInt16,
n5 UInt8,
n6 UInt8,
n7 UInt8,
n8 UInt8
)
ENGINE=MergeTree()
ORDER BY n1;
INSERT INTO morton_numbers (*) values(1, 2, 3, 4, 5, 6, 7, 8);
-- Usar nombres de columna en lugar de constantes como argumentos de la función
SELECT untuple(mortonDecode(8, mortonEncode(n1, n2, n3, n4, n5, n6, n7, n8))) FROM morton_numbers;
Introducido en: v24.6.0
Calcula la codificación de Morton (ZCurve) para una lista de enteros sin signo.
La función tiene dos modos de operación:
Modo simple
Acepta hasta 8 enteros sin signo como argumentos y genera un código UInt64.
Modo expandido
Acepta una máscara de rango (Tuple) como primer argumento y
hasta 8 enteros sin signo como argumentos adicionales.
Cada número de la máscara configura el grado de expansión del rango:
- 1 - sin expansión
- 2 - expansión de 2x
- 3 - expansión de 3x
⋮
- Hasta 8x de expansión.
Sintaxis
-- Modo simplificado
mortonEncode(args)
-- Modo expandido
mortonEncode(range_mask, args)
Argumentos
args — Hasta 8 enteros sin signo o columnas del tipo indicado anteriormente. UInt8/16/32/64
range_mask — En el modo expandido, la máscara de cada argumento. La máscara es una tupla de enteros sin signo del 1 al 8. Cada número de la máscara configura el grado de reducción del rango. Tuple(UInt8/16/32/64)
Valor devuelto
Devuelve un código UInt64. UInt64
Ejemplos
Modo simple
SELECT mortonEncode(1, 2, 3)
Modo expandido
-- La expansión de rango puede ser beneficiosa cuando se necesita una distribución similar para
-- argumentos con rangos (o cardinalidad) muy distintos
-- Por ejemplo: 'IP Address' (0...FFFFFFFF) y 'Country code' (0...FF).
-- Nota: el tamaño del Tuple debe ser igual al número de los demás argumentos.
SELECT mortonEncode((1,2), 1024, 16)
Un solo argumento
-- La codificación Morton para un argumento siempre es el argumento mismo
SELECT mortonEncode(1)
Un único argumento expandido
SELECT mortonEncode(tuple(2), 128)
Uso de columnas
-- Primero crear la tabla e insertar algunos datos
CREATE TABLE morton_numbers(
n1 UInt32,
n2 UInt32,
n3 UInt16,
n4 UInt16,
n5 UInt8,
n6 UInt8,
n7 UInt8,
n8 UInt8
)
ENGINE=MergeTree()
ORDER BY n1;
INSERT INTO morton_numbers (*) values(1, 2, 3, 4, 5, 6, 7, 8);
-- Usar nombres de columna en lugar de constantes como argumentos de la función
SELECT mortonEncode(n1, n2, n3, n4, n5, n6, n7, n8) FROM morton_numbers;
Introducido en: v24.1.0
Convierte un sqid nuevamente en un arreglo de números.
Sintaxis
Argumentos
sqid — El sqid que se debe decodificar. String
Valor devuelto
Devuelve un array de números a partir de sqid. Array(UInt64)
Ejemplos
Ejemplo de uso
SELECT sqidDecode('gXHfJ1C6dN');
┌─sqidDecode('gXHfJ1C6dN')─────┐
│ [1, 2, 3, 4, 5] │
└──────────────────────────────┘
Introducido en: v24.1.0
Transforma números en un sqid, una cadena de ID similar a las de YouTube.
Sintaxis
sqidEncode(n1[, n2, ...])
Alias: sqid
Argumentos
Valor devuelto
Devuelve un ID hash de tipo String
Ejemplos
Ejemplo de uso
SELECT sqidEncode(1, 2, 3, 4, 5);
┌─sqidEncode(1, 2, 3, 4, 5)─┐
│ gXHfJ1C6dN │
└───────────────────────────┘
Introducido en: v21.8.0
Interpreta cada par de dígitos binarios (del argumento) como un número y lo convierte en el byte representado por ese número. La función realiza la operación inversa de bin.
Para un argumento numérico, unbin() no devuelve el inverso de bin(). Si quiere convertir el resultado en un número, puede usar las funciones reverse y reinterpretAs<Type>.
Si unbin se invoca desde clickhouse-client, las cadenas binarias se muestran con UTF-8.
Admite los dígitos binarios 0 y 1. La cantidad de dígitos binarios no tiene que ser múltiplo de ocho. Si la cadena del argumento contiene cualquier cosa distinta de dígitos binarios,
el resultado no está definido (no se genera ninguna excepción).
Sintaxis
Argumentos
arg — Una cadena que contiene cualquier número de dígitos binarios. String
Valor devuelto
Devuelve una cadena binaria (BLOB). String
Ejemplos
Uso básico
SELECT UNBIN('001100000011000100110010'), UNBIN('0100110101111001010100110101000101001100')
┌─unbin('001100000011000100110010')─┬─unbin('0100110101111001010100110101000101001100')─┐
│ 012 │ MySQL │
└───────────────────────────────────┴───────────────────────────────────────────────────┘
Convertir en número
SELECT reinterpretAsUInt64(reverse(unbin('1110'))) AS num
Introducido en: v1.1.0
Realiza la operación inversa de hex. Interpreta cada par de dígitos hexadecimales (en el argumento) como un número y lo convierte
en el byte representado por ese número. El valor devuelto es una cadena binaria (BLOB).
Si desea convertir el resultado en un número, puede usar las funciones reverse y reinterpretAs<Type>.
clickhouse-client interpreta las cadenas como UTF-8.
Esto puede hacer que los valores devueltos por hex se muestren de forma inesperada.
Admite tanto letras mayúsculas como minúsculas A-F.
No es necesario que el número de dígitos hexadecimales sea par.
Si es impar, el último dígito se interpreta como la mitad menos significativa del byte 00-0F.
Si la cadena de argumento contiene cualquier carácter distinto de un dígito hexadecimal, se devuelve un resultado definido por la implementación (no se lanza ninguna excepción).
En el caso de un argumento numérico, unhex() no realiza la operación inversa de hex(N).
Sintaxis
Argumentos
arg — Una cadena que contiene una cantidad cualquiera de dígitos hexadecimales. String o FixedString
Valor devuelto
Devuelve una cadena binaria (BLOB). String
Ejemplos
Uso básico
SELECT unhex('303132'), UNHEX('4D7953514C')
┌─unhex('303132')─┬─unhex('4D7953514C')─┐
│ 012 │ MySQL │
└─────────────────┴─────────────────────┘
Convertir en número
SELECT reinterpretAsUInt64(reverse(unhex('FFF'))) AS num
┌──num─┐
│ 4095 │
└──────┘