Todos los productos
Search
Centro de documentos

Hologres:Migrate data from ClickHouse

Última actualización: Sep 18, 2026

Hologres es un almacén de datos en tiempo real totalmente gestionado y compatible con PostgreSQL. Esta guía le explica cómo migrar esquemas, datos y consultas desde una instancia de ClickHouse autogestionada hacia Hologres.

Requisitos previos

Antes de empezar, asegúrese de contar con lo siguiente:

Contexto

ClickHouse es un sistema de gestión de bases de datos (DBMS) orientado por columnas, diseñado para el procesamiento analítico en línea (OLAP). Hologres amplía esta capacidad con compatibilidad con PostgreSQL, consultas puntuales de alto rendimiento (QPS), soporte completo para JOIN entre varias tablas y un optimizador basado en costos (CBO). La siguiente tabla resume las diferencias principales.

Categoría

Criterio

ClickHouse

Hologres

Producto

Propósito

Análisis de tráfico de red

Almacén de datos en tiempo real de propósito general: análisis de datos y servicios en línea

Escritura

Almacenamiento

Almacenamiento por columnas

Almacenamiento por columnas y por filas

Visibilidad de escritura

Nivel de segundos (requiere agrupación por lotes del lado del cliente; las escrituras en tablas distribuidas dependen de que termine la replicación de los fragmentos)

Nivel de milisegundos (agrupación adaptativa de escrituras; consultable de inmediato tras escribir)

Rendimiento de escritura

Alto

Muy alto

Almacenamiento detallado

Compatible

Compatible

Clave primaria

No es una clave primaria de base de datos real (sin restricción de unicidad; solo sirve para indexación y agregación)

Clave primaria estándar de base de datos con soporte para restricción de unicidad

Actualizable

Incompleto (no admite actualizaciones de alto QPS basadas en claves primarias)

Totalmente compatible (admite actualizaciones de alto QPS basadas en claves primarias)

Escritura en tiempo real

Append

Append / insert or ignore / insert or replace / update

Índice

primary key, minmax, ngram, token, bloom filter

bitmap, dictionary, segment, primary, clustering (crea automáticamente índices minmax, bloom filter y ngram)

Consulta

Optimizador

Optimizador basado en reglas (RBO)

Optimizador basado en costos (CBO)

Consulta federada

Compatible (HDFS y Kafka)

Compatible (FDW lee MaxCompute y Hive directamente)

Preagregación

Compatible (mediante MergeTree)

Compatible (mediante procedimientos almacenados y trabajos programados)

Consulta puntual de alto QPS

No compatible

Compatible; el QPS supera las decenas de millones

Consulta compleja de una sola tabla

Bueno

Bueno

JOIN de varias tablas

Deficiente

Bueno

Sintaxis SQL

Sintaxis propia

Compatible con PostgreSQL

Funciones de ventana

No compatible

Compatible

Transacción

ACID

No (consistencia eventual; sin garantía de consulta inmediata)

Limitado (transacciones DDL, transacciones de una sola fila, visibilidad basada en instantáneas)

Recuperación ante desastres

Copia de seguridad

Replicación mediante ZooKeeper + ClickHouse

Replicación lógica mediante Binlog; replicación física mediante mecanismos subyacentes

Funciones avanzadas

Binlog

Ninguna

Compatible

Búsqueda vectorial

Compatible (ClickHouse 22.8+)

Compatible

Datos espaciales

No compatible

Compatible

Seguridad

Permisos personalizados

Modelo de permisos compatible con PostgreSQL con listas blancas de IP y enmascaramiento de datos

Separación de almacenamiento y cómputo

Sin separación; limitado por la capacidad de un solo nodo

Separado; capacidad de almacenamiento casi ilimitada

Disponibilidad

Conmutación por error manual

Recuperación automática tras conmutación por error

Operación y mantenimiento

Complejo (distribución manual de fragmentos)

Totalmente gestionado

Ecosistema

Ingesta de datos

Kafka, Flink, Spark

Flink, Spark, JDBC, DataX

Herramientas de BI

Limitado (Tableau, Superset)

Ecosistema de PostgreSQL; compatible con más de 100 herramientas de BI principales

Mapeo de tipos de datos

ClickHouse y Hologres utilizan sistemas de tipos distintos. Las siguientes tablas relacionan cada tipo de ClickHouse con su equivalente en Hologres y señalan los puntos críticos durante la conversión.

Tipos numéricos

ClickHouse ofrece tipos enteros con y sin signo en diversas precisiones. Hologres utiliza la jerarquía estándar de enteros de SQL. Una diferencia importante: ClickHouse no tiene un tipo Boolean nativo, mientras que Hologres sí admite BOOLEAN de forma nativa.

Tipo de ClickHouse

Tipo de Hologres

Notas

Int8

SMALLINT

No se admite INT de un solo byte; use SMALLINT

Int16

SMALLINT

Int32

INT

Int64

BIGINT

UInt8

INT

UInt16

INT

UInt32

BIGINT

UInt64

BIGINT

Los valores de UInt64 cercanos al máximo (18,446,744,073,709,551,615) superan el rango de BIGINT; valide los datos antes de migrar

Float32

FLOAT

Float64

DOUBLE PRECISION

Decimal(P, S)

DECIMAL

Decimal32(S)

DECIMAL

Decimal64(S)

DECIMAL

Decimal128(S)

DECIMAL

Boolean

BOOLEAN

ClickHouse no tiene tipo Boolean; use UInt8 en ClickHouse para representar valores booleanos

Tipos de cadena y caracteres

ClickHouse almacena todos los datos de cadena como bytes sin procesar mediante el tipo String. Hologres lo asigna a TEXT. LowCardinality es una optimización de almacenamiento de ClickHouse sin equivalente directo en Hologres. Tras la migración, habilite manualmente la codificación de diccionario en las columnas correspondientes.

Tipo de ClickHouse

Tipo de Hologres

Notas

String

TEXT

FixString(N)

TEXT

Las cadenas de longitud fija pasan a ser de longitud variable; Hologres no tiene un equivalente de cadena de longitud fija

LowCardinality(T)

TEXT (o el tipo subyacente)

No se admite como tipo nativo. Tras la migración, habilite manualmente la codificación de diccionario: CALL set_table_property('table', 'dictionary_encoding_columns', 'col');

Tipos de fecha y hora

ClickHouse usa Date y distintas variantes de DateTime. Hologres asigna todos los tipos con zona horaria a TIMESTAMPTZ.

Tipo de ClickHouse

Tipo de Hologres

Notas

Date

Date

DateTime

TIMESTAMPTZ

DateTime(timezone)

TIMESTAMPTZ

DateTime64

TIMESTAMPTZ

Tipos complejos y otros tipos

Las estructuras anidadas de ClickHouse (como Nested y Tuple) se aplanan en arreglos dentro de Hologres. Para los datos binarios, elija el tipo de Hologres según su caso de uso.

Tipo de ClickHouse

Tipo de Hologres

Notas

UUID

UUID

Enum

TEXT

No se admite como tipo nativo; use TEXT en su lugar

Nested, Tuple, Array

Array

Los tipos anidados se aplanan en arreglos

Binary

BIT(n), VARBIT(n), BYTEA, CHAR(n)

Elija según el caso de uso

Migrar esquemas

La migración de esquemas convierte las instrucciones de lenguaje de definición de datos (DDL) de ClickHouse a DDL de Hologres (compatible con PostgreSQL). Complete los siguientes pasos.

Paso 1: Listar todas las bases de datos

Ejecute el siguiente comando en el cliente de ClickHouse para listar las bases de datos de la instancia de origen.

clickhouse-client --host="<host>" --port="<port>" --user="<username>" --password="<password>" \
  --query="SHOW databases" > database.list
La base de datos system aparece en los resultados, pero no es necesario migrarla. Fíltrela.

Parámetro

Descripción

<host>

Dirección de la instancia de ClickHouse de origen

<port>

Puerto de la instancia de ClickHouse de origen

<username>

Cuenta con permisos de lectura y escritura DML, configuración y DDL

<password>

Contraseña de la cuenta

Paso 2: Listar todas las tablas

Ejecute el siguiente comando en el cliente de ClickHouse para listar las tablas de una base de datos específica.

clickhouse-client --host="<host>" --port="<port>" --user="<username>" --password="<password>" \
  --query="SHOW tables from <database_name>" > table.list
Las tablas que comienzan con .inner. son tablas internas de vistas materializadas y no requieren migración. Fíltrelas.

Para listar todas las bases de datos y tablas a la vez, consulte la tabla de metadatos system.tables:

SELECT DISTINCT database, name FROM system.tables WHERE database != 'system';

Paso 3: Exportar el DDL de las tablas

Exporte el DDL de cada tabla que desee migrar.

clickhouse-client --host="<host>" --port="<port>" --user="<username>" --password="<password>" \
  --query="SHOW CREATE TABLE <database_name>.<table_name>" > table.sql

También puede consultar system.tables directamente para revisar el DDL y los metadatos de todas las tablas no distribuidas:

SELECT * FROM system.tables
WHERE database = '<database_name>' AND engine != 'Distributed';

La siguiente tabla explica cómo se relaciona cada campo de system.tables con los conceptos de Hologres.

Campo

Regla de mapeo

database

Las bases de datos de ClickHouse se asignan a esquemas en Hologres. CREATE DATABASE "<db>"; se convierte en CREATE SCHEMA "<schema>";

name

Nombre de la tabla; no requiere cambios

engine

Hologres no distingue entre tablas locales y distribuidas. Filtre las filas donde engine = 'Distributed'

is_temporary

No es necesario migrar las tablas temporales. Hologres no las admite

data_paths, metadata_path, metadata_modification_time

Ignorar

dependencies_database, dependencies_table

Las vistas con dependencias deben crearse antes que sus tablas base. Hologres no admite vistas materializadas

create_table_query

DDL de origen; conviértalo a DDL de Hologres (sintaxis de PostgreSQL)

engine_full

Ignorar

partition_key

Se asigna a la clave de partición en Hologres. Si partition_key es col1, agregue PARTITION BY LIST (col1) al DDL de Hologres

sorting_key

Se asigna a los índices de clave de segmento y clave de agrupación en Hologres

primary_key

Se asigna a la cláusula PRIMARY KEY en el DDL de Hologres

sampling_key

Hologres no admite muestreo; ignorar

storage_policy

Ignorar

Paso 4: Convertir el DDL de ClickHouse a DDL de Hologres

Aplique los mapeos de tipos y las reglas de conversión de campos para transformar el DDL de cada tabla. Los siguientes ejemplos usan tablas de referencia TPC-H.

Ejemplo: tabla lineitem

DDL de ClickHouse:

-- lineitem on ClickHouse
CREATE TABLE lineitem_local ON CLUSTER default(
  l_orderkey            UInt64,
  l_partkey             UInt32,
  l_suppkey             UInt32,
  l_linenumber          UInt32,
  l_quantity            decimal(15,2),
  l_extendedprice       decimal(15,2),
  l_discount            decimal(15,2),
  l_tax                 decimal(15,2),
  l_returnflag          LowCardinality(String),
  l_linestatus          LowCardinality(String),
  l_shipdate            Date,
  l_commitdate          Date,
  l_receiptdate         Date,
  l_shipinstruct        LowCardinality(String),
  l_shipmode            LowCardinality(String),
  l_comment             LowCardinality(String)
) ENGINE = MergeTree
PARTITION BY toYear(l_shipdate)
ORDER BY (l_orderkey, l_linenumber);

CREATE TABLE lineitem ON CLUSTER default AS lineitem_local
ENGINE = Distributed(default, default, lineitem_local, l_orderkey);

DDL convertido para Hologres:

-- lineitem on Hologres
-- Create a table group with 32 shards
CALL hg_create_table_group ('lineitem_tg', 32);
BEGIN;
CREATE TABLE LINEITEM (
    L_ORDERKEY      BIGINT        NOT NULL,
    L_PARTKEY       INT           NOT NULL,
    L_SUPPKEY       INT           NOT NULL,
    L_LINENUMBER    INT           NOT NULL,
    L_QUANTITY      DECIMAL(15,2) NOT NULL,
    L_EXTENDEDPRICE DECIMAL(15,2) NOT NULL,
    L_DISCOUNT      DECIMAL(15,2) NOT NULL,
    L_TAX           DECIMAL(15,2) NOT NULL,
    L_RETURNFLAG    TEXT          NOT NULL,
    L_LINESTATUS    TEXT          NOT NULL,
    L_SHIPDATE      TIMESTAMPTZ   NOT NULL,
    L_COMMITDATE    TIMESTAMPTZ   NOT NULL,
    L_RECEIPTDATE   TIMESTAMPTZ   NOT NULL,
    L_SHIPINSTRUCT  TEXT          NOT NULL,
    L_SHIPMODE      TEXT          NOT NULL,
    L_COMMENT       TEXT          NOT NULL,
    PRIMARY KEY (L_ORDERKEY, L_LINENUMBER)
);
-- sorting_key (l_orderkey, l_linenumber) maps to clustering key and segment key
CALL set_table_property('LINEITEM', 'clustering_key', 'L_SHIPDATE,L_ORDERKEY');
CALL set_table_property('LINEITEM', 'segment_key', 'L_SHIPDATE');
CALL set_table_property('LINEITEM', 'table_group', 'lineitem_tg');
CALL set_table_property('LINEITEM', 'distribution_key', 'L_ORDERKEY');
-- LowCardinality columns: enable bitmap and dictionary encoding
CALL set_table_property('LINEITEM', 'bitmap_columns', 'L_RETURNFLAG,L_LINESTATUS,L_SHIPINSTRUCT,L_SHIPMODE,L_COMMENT');
CALL set_table_property('LINEITEM', 'dictionary_encoding_columns', 'L_RETURNFLAG,L_LINESTATUS,L_SHIPINSTRUCT,L_SHIPMODE,L_COMMENT');
CALL set_table_property('LINEITEM', 'time_to_live_in_seconds', '31536000');
COMMIT;

Ejemplo: tabla customer

DDL de ClickHouse:

-- customer on ClickHouse
CREATE TABLE customer_local ON CLUSTER default(
  c_custkey     UInt32,
  c_name        String,
  c_address     String,
  c_nationkey   UInt32,
  c_phone       LowCardinality(String),
  c_acctbal     decimal(15,2),
  c_mktsegment  LowCardinality(String),
  c_comment     LowCardinality(String)
) ENGINE = MergeTree
ORDER BY (c_custkey);

CREATE TABLE customer ON CLUSTER default AS customer_local
ENGINE = Distributed(default, default, customer_local, c_custkey);

DDL convertido para Hologres:

-- customer on Hologres
BEGIN;
CREATE TABLE CUSTOMER (
    C_CUSTKEY    INT           NOT NULL PRIMARY KEY,
    C_NAME       TEXT          NOT NULL,
    C_ADDRESS    TEXT          NOT NULL,
    C_NATIONKEY  INT           NOT NULL,
    C_PHONE      TEXT          NOT NULL,
    C_ACCTBAL    DECIMAL(15,2) NOT NULL,
    C_MKTSEGMENT TEXT          NOT NULL,
    C_COMMENT    TEXT          NOT NULL
);
CALL set_table_property('CUSTOMER', 'distribution_key', 'C_CUSTKEY');
CALL set_table_property('CUSTOMER', 'table_group', 'lineitem_tg');
CALL set_table_property('CUSTOMER', 'bitmap_columns', 'C_CUSTKEY,C_NATIONKEY,C_NAME,C_ADDRESS,C_PHONE,C_MKTSEGMENT,C_COMMENT');
CALL set_table_property('CUSTOMER', 'dictionary_encoding_columns', 'C_NAME,C_ADDRESS,C_PHONE,C_MKTSEGMENT,C_COMMENT');
CALL set_table_property('CUSTOMER', 'time_to_live_in_seconds', '31536000');
COMMIT;

Paso 5: Importar el DDL a Hologres

Ejecute el siguiente comando en el cliente psql para aplicar el DDL convertido en la instancia de Hologres de destino.

PGUSER="<username>" PGPASSWORD="<password>" psql \
  -h "<host>" -p "<port>" -d "<database_name>" -f table.sql

Migrar datos

Existen tres métodos disponibles. Elija uno según el volumen de datos, los requisitos de latencia y las herramientas con las que ya cuente.

Método

Recomendado para

Herramientas

Exportar a CSV y luego usar COPY (recomendado)

Migraciones por lotes únicas; configuración sencilla; no requiere infraestructura adicional

Cliente de ClickHouse + psql

Trabajo de Flink o Spark

Migraciones a gran escala; sincronización en tiempo real o incremental; equipos con infraestructura existente de Flink o Spark

Flink, Spark

Data Integration de DataWorks o DataX

Migraciones gestionadas sin código personalizado; sincronización sin conexión de bases de datos completas

DataWorks, DataX

Para Flink y Spark, consulte Import data using Spark. Para Data Integration de DataWorks, consulte Data Integration y Synchronize an entire ClickHouse database to Hologres offline.

A continuación se describen los pasos del método de exportación a CSV e importación con COPY.

Paso 1: Exportar datos de ClickHouse a CSV

Se recomienda CSV por su sencillez y su amplia compatibilidad con diversas herramientas. En tablas con tipos anidados complejos o decimales de alta precisión, valide los valores exportados antes de cargarlos, ya que CSV no conserva los metadatos de tipo.

Ejecute el siguiente comando en el cliente de ClickHouse para exportar los datos de la tabla a un archivo CSV local.

clickhouse-client --host="<host>" --port="<port>" --user="<username>" --password="<password>" \
  --query="SELECT * FROM <database_name>.<table_name> FORMAT CSV" > table.csv

Parámetro

Descripción

<host>

Dirección de la instancia de ClickHouse de origen

<port>

Puerto de la instancia de ClickHouse de origen

<username>

Cuenta con permisos de lectura y escritura DML, configuración y DDL

<password>

Contraseña de la cuenta

<database_name>

Nombre de la base de datos que contiene la tabla por migrar

<table_name>

Nombre de la tabla por migrar

Paso 2: Importar el archivo CSV a Hologres

Ejecute el siguiente comando en el cliente psql para cargar el archivo CSV en la tabla de Hologres de destino.

PGUSER="<username>" PGPASSWORD="<password>" psql \
  -h "<host>" -p "<port>" -d "<database_name>" \
  -c "COPY <schema_name>.<table_name> FROM STDIN (FORMAT 'csv')" < table.csv

Parámetro

Descripción

<username>

AccessKey ID de su cuenta de Alibaba Cloud. Obténgalo en AccessKey Management

<password>

AccessKey secret de su cuenta de Alibaba Cloud. Obténgalo en AccessKey Management

<host>

Endpoint de la instancia de Hologres. Encuéntrelo en la página de detalles de la instancia, dentro de Network Information, en la Management Console

<port>

Puerto de la instancia de Hologres. Encuéntrelo en Network Information dentro de la Management Console

<database_name>

Nombre de la base de datos de destino en la instancia de Hologres

<schema_name>

Nombre del esquema de destino. Si no se especifica, toma el valor predeterminado public

<table_name>

Nombre de la tabla de destino en Hologres

Paso 3: Comprobar la importación

Consulte la tabla importada en Hologres para comprobar que los datos se cargaron correctamente.

SELECT COUNT(*) FROM <schema_name>.<table_name>;

Migrar consultas

Hologres utiliza la sintaxis de PostgreSQL, mientras que ClickHouse emplea su propio dialecto de SQL. La mayoría de las instrucciones son compatibles, pero difieren en las funciones escalares, las funciones de agregación y el uso de comillas en los identificadores.

Diferencias de sintaxis

Área

ClickHouse

Hologres

Identificadores de cadena

'column_name' (comillas simples)

"column_name" (comillas dobles)

Referencia de tabla

SELECT x FROM <database>.<table>

SELECT x FROM <schema>.<table>

Equivalencias de funciones

Las funciones que no aparecen en la siguiente lista tienen la misma sintaxis en ambos sistemas.

ClickHouse

Hologres

toYear(expr)

to_char(expr, 'YYYY')

toInt32(expr)

CAST(expr AS INTEGER)

uniq(), uniqCombined(), uniqCombined64(), uniqHLL12()

approx_count_distinct()

uniqExact()

count(DISTINCT x)

quantile(level)(expr)

approx_percentile(level) WITHIN GROUP (ORDER BY expr)

quantileExact(level)(expr)

percentile_cont(level) WITHIN GROUP (ORDER BY expr)

toDecimal32(val, scale)

Use un literal numérico directamente (por ejemplo, 0.0000010000)

Estrategias de migración

Reemplazo con expresiones regulares: utilice expresiones regulares para sustituir patrones fijos, como nombres de funciones, comillas en identificadores y referencias <database>.<table>, por sus equivalentes en Hologres.

ClickHouse Extension: Hologres incluye una extensión de ClickHouse que admite de forma nativa algunas funciones de este sistema, como toUInt32(), sin necesidad de convertirlas. Consulte ClickHouse-compatible functions.

Ejemplos de migración de consultas

Los siguientes ejemplos utilizan consultas de referencia TPC-H. Cada uno ilustra un patrón específico de migración.

Ejemplo 1: Agregación simple, sin cambios necesarios

En agregaciones directas con funciones SQL estándar, las consultas de ClickHouse y Hologres son idénticas.

ClickHouse (Q1):

SELECT
  l_returnflag,
  l_linestatus,
  sum(l_quantity) AS sum_qty,
  sum(l_extendedprice) AS sum_base_price,
  sum(l_extendedprice * (1 - l_discount)) AS sum_disc_price,
  sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) AS sum_charge,
  avg(l_quantity) AS avg_qty,
  avg(l_extendedprice) AS avg_price,
  avg(l_discount) AS avg_disc,
  count(*) AS count_order
FROM lineitem
WHERE l_shipdate <= date '1998-12-01' - interval '90' day
GROUP BY l_returnflag, l_linestatus
ORDER BY l_returnflag, l_linestatus;

Hologres (Q1), sin cambios:

SELECT
  l_returnflag,
  l_linestatus,
  sum(l_quantity) AS sum_qty,
  sum(l_extendedprice) AS sum_base_price,
  sum(l_extendedprice * (1 - l_discount)) AS sum_disc_price,
  sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) AS sum_charge,
  avg(l_quantity) AS avg_qty,
  avg(l_extendedprice) AS avg_price,
  avg(l_discount) AS avg_disc,
  count(*) AS count_order
FROM lineitem
WHERE l_shipdate <= date '1998-12-01' - interval '90' day
GROUP BY l_returnflag, l_linestatus
ORDER BY l_returnflag, l_linestatus;

Ejemplo 2: Reescritura de subconsulta, de IN a EXISTS

ClickHouse admite IN (subquery) con referencias cruzadas entre tablas de una manera que Hologres no permite. Reescriba la consulta con EXISTS.

ClickHouse (Q4):

SELECT
  o_orderpriority,
  count(*) AS order_count
FROM orders
WHERE o_orderdate >= date '1993-07-01'
  AND o_orderdate < date '1993-07-01' + interval '3' month
  AND o_orderdate IN (
    SELECT o_orderdate
    FROM lineitem, orders
    WHERE l_orderkey = o_orderkey
      AND l_commitdate < l_receiptdate
  )
GROUP BY o_orderpriority
ORDER BY o_orderpriority;

Hologres (Q4), con IN (subquery) reemplazado por EXISTS:

SELECT
  o_orderpriority,
  count(*) AS order_count
FROM orders
WHERE o_orderdate >= date '1993-07-01'
  AND o_orderdate < date '1993-07-01' + interval '3' month
  AND EXISTS (
    SELECT *
    FROM lineitem
    WHERE l_orderkey = o_orderkey
      AND l_commitdate < l_receiptdate
  )
GROUP BY o_orderpriority
ORDER BY o_orderpriority;

Ejemplo 3: Sustitución de función, de toDecimal32() a un literal

La función toDecimal32(value, scale) de ClickHouse no tiene equivalente en Hologres. Sustitúyala por un literal numérico simple.

ClickHouse (Q11):

SELECT
  ps_partkey,
  sum(ps_supplycost * ps_availqty) AS value
FROM partsupp, supplier, nation
WHERE ps_suppkey = s_suppkey
  AND s_nationkey = n_nationkey
  AND n_name = 'GERMANY'
GROUP BY ps_partkey
HAVING sum(ps_supplycost * ps_availqty) > (
  SELECT sum(ps_supplycost * ps_availqty) * toDecimal32(0.0000010000, 9)
  FROM partsupp, supplier, nation
  WHERE ps_suppkey = s_suppkey
    AND s_nationkey = n_nationkey
    AND n_name = 'GERMANY'
)
ORDER BY value DESC
LIMIT 100;

Hologres (Q11), con toDecimal32(0.0000010000, 9) reemplazado por 0.0000010000:

SELECT
  ps_partkey,
  sum(ps_supplycost * ps_availqty) AS value
FROM partsupp, supplier, nation
WHERE ps_suppkey = s_suppkey
  AND s_nationkey = n_nationkey
  AND n_name = 'GERMANY'
GROUP BY ps_partkey
HAVING sum(ps_supplycost * ps_availqty) > (
  SELECT sum(ps_supplycost * ps_availqty) * 0.0000010000
  FROM partsupp, supplier, nation
  WHERE ps_suppkey = s_suppkey
    AND s_nationkey = n_nationkey
    AND n_name = 'GERMANY'
)
ORDER BY value DESC
LIMIT 100;

Compatibilidad de funciones

Hologres y ClickHouse comparten muchas funciones básicas con sintaxis idéntica. Cuando existen diferencias, Hologres ofrece un equivalente nativo o una alternativa semánticamente igual. Para consultar la lista completa de compatibilidad, vea ClickHouse-compatible functions.

Pasos siguientes