Ctrl K
ComunidadGuías…

benchmark/disk_cache_merge_into/create.sql

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
-- Default scale:
--   target rows: 5,000,000
--   source rows:   250,000 (5%, distributed across the whole target)
--   payload: 16 STRING columns, 128 bytes per column before compression
--
-- For a quick smoke test, replace numbers(5000000) with numbers(1000000)
-- and replace 5000000 in source generation with 1000000.

DROP TABLE IF EXISTS merge_cache_target;
DROP TABLE IF EXISTS merge_cache_source;
DROP TABLE IF EXISTS merge_cache_seed;

CREATE TABLE merge_cache_seed (
    id UINT64,
    group_id UINT32,
    version UINT32,
    update_marker STRING,
    payload_01 STRING,
    payload_02 STRING,
    payload_03 STRING,
    payload_04 STRING,
    payload_05 STRING,
    payload_06 STRING,
    payload_07 STRING,
    payload_08 STRING,
    payload_09 STRING,
    payload_10 STRING,
    payload_11 STRING,
    payload_12 STRING,
    payload_13 STRING,
    payload_14 STRING,
    payload_15 STRING,
    payload_16 STRING
);

INSERT INTO merge_cache_seed
WITH generated AS (
    SELECT
        number AS id,
        md5(concat('a-', to_string(number))) AS h1,
        md5(concat('b-', to_string(number))) AS h2,
        md5(concat('c-', to_string(number))) AS h3,
        md5(concat('d-', to_string(number))) AS h4
    FROM numbers(5000000)
)
SELECT
    id,
    (id % 4096)::UINT32 AS group_id,
    1::UINT32 AS version,
    concat('seed-', to_string(id)) AS update_marker,
    concat(h1, h2, h3, h4),
    concat(h2, h3, h4, h1),
    concat(h3, h4, h1, h2),
    concat(h4, h1, h2, h3),
    concat(h1, h3, h2, h4),
    concat(h1, h4, h2, h3),
    concat(h2, h1, h4, h3),
    concat(h2, h4, h1, h3),
    concat(h3, h1, h4, h2),
    concat(h3, h2, h4, h1),
    concat(h4, h2, h1, h3),
    concat(h4, h3, h2, h1),
    concat(h1, h2, h4, h3),
    concat(h2, h1, h3, h4),
    concat(h3, h4, h2, h1),
    concat(h4, h3, h1, h2)
FROM generated;

CREATE TABLE merge_cache_source (
    id UINT64,
    version UINT32,
    update_marker STRING
);

-- 1,000,003 is coprime with 5,000,000. It permutes source ids across the
-- complete target range so sparse updates touch as many target blocks as possible.
INSERT INTO merge_cache_source
SELECT
    (number * 1000003) % 5000000 AS id,
    2::UINT32 AS version,
    concat('updated-', md5(to_string(number))) AS update_marker
FROM numbers(250000);

ANALYZE TABLE merge_cache_seed;
ANALYZE TABLE merge_cache_source;

CREATE TABLE merge_cache_target LIKE merge_cache_seed;
INSERT INTO merge_cache_target SELECT * FROM merge_cache_seed;
ANALYZE TABLE merge_cache_target;

SELECT
    name,
    num_rows,
    data_size,
    data_compressed_size,
    number_of_blocks
FROM system.tables
WHERE database = current_database()
  AND name IN ('merge_cache_seed', 'merge_cache_source', 'merge_cache_target')
ORDER BY name;