-- Задачи на отработку Запросы - JOIN -- DROP TABLE IF EXISTS dsolovianov.products ON CLUSTER clickhouse_cluster SYNC; DROP TABLE IF EXISTS dsolovianov.prices ON CLUSTER clickhouse_cluster SYNC; CREATE TABLE products ON CLUSTER clickhouse_cluster ( product_id UInt32, name String ) ENGINE = ReplicatedMergeTree( '/clickhouse/tables/{shard}/dsolovianov/products', '{replica}' ) ORDER BY product_id; INSERT INTO products VALUES (101, 'iPhone 14'), (102, 'Galaxy S22'), (103, 'Pixel 7'); CREATE TABLE prices ON CLUSTER clickhouse_cluster ( product_id UInt32, price UInt32, region String ) ENGINE = ReplicatedMergeTree( '/clickhouse/tables/{shard}/dsolovianov/prices', '{replica}' ) ORDER BY product_id; INSERT INTO prices VALUES (101, 999, 'US'), (101, 1049, 'EU'), (102, 850, 'US'), (102, 899, 'CA'), (103, 799, 'JP'); --№1 Сделай ANY LEFT JOIN, чтобы получить цену любой из регионов. SELECT p.product_id, p.name, pr.price, pr.region FROM products AS p ANY LEFT JOIN prices AS pr ON p.product_id = pr.product_id; --№2 Что будет, если в таблице `prices` несколько цен на один `product_id`? /* Для одного product_id будет выбрана только первая ЛЮБАЯ (ANY) подходящая в поиске.*/ --№3 Как повлияет `ALL LEFT JOIN`? Почему в ClickHouse его избегают? SELECT p.product_id, p.name, pr.price, pr.region FROM products AS p ALL LEFT JOIN prices AS pr ON p.product_id = pr.product_id; /* `ALL LEFT JOIN` в Clickhouse ведет себя также, как LEFT JOIN в SQL, то есть собирает все совпадения. Начинается перегон данных между таблицами. Из-за этого растет нагрузка на ОЗУ и CPU. короче, по сути ALL LEFT JOIN создает декартово произведение*/