homework, pet project DE Dmitry_Medvedev #1

Open
dmitry_medvedev wants to merge 264 commits from md_branch into main
Showing only changes of commit 2ced7cf273 - Show all commits
@@ -0,0 +1,70 @@
-- Задачи на отработку Запросы - 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 создает декартово произведение*/