āĻāĻ āĻāĻŦā§āĻˇāĻŖāĻžāĻ¯āĻŧ, āĻāĻŽāĻŋ āĻĻā§āĻāĻ¤ā§ āĻā§āĻ¯āĻŧā§āĻāĻŋāĻ˛āĻžāĻŽ PostgreSQL āĻāĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤ā§ āĻāĻāĻāĻŋ ClickHouse āĻĄā§āĻāĻž āĻā§āĻ¸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻā§ āĻā§ āĻāĻ°ā§āĻŽāĻā§āĻˇāĻŽāĻ¤āĻž āĻāĻ¨ā§āĻ¨āĻ¤āĻŋ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤ ClickHouse āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻŽāĻŋ āĻ¯ā§ āĻā§āĻĒāĻžāĻĻāĻ¨āĻļā§āĻ˛āĻ¤āĻžāĻ° āĻ¸ā§āĻŦāĻŋāĻ§āĻž āĻĒāĻžāĻ āĻ¤āĻž āĻāĻŽāĻŋ āĻāĻžāĻ¨āĻŋāĨ¤ āĻ¯āĻĻāĻŋ āĻāĻŽāĻŋ āĻāĻāĻāĻŋ āĻŦāĻŋāĻĻā§āĻļā§ āĻĄā§āĻāĻž āĻ°âā§āĻ¯āĻžāĻĒāĻžāĻ° (FDW) āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ PostgreSQL āĻĨā§āĻā§ ClickHouse āĻ ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ āĻāĻ°āĻŋ āĻ¤āĻŦā§ āĻāĻŋ āĻāĻ āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻā§āĻ˛āĻŋ āĻ āĻŦā§āĻ¯āĻžāĻšāĻ¤ āĻĨāĻžāĻāĻŦā§?
āĻ āĻ§ā§āĻ¯āĻ¯āĻŧāĻ¨ āĻāĻ°āĻž āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ āĻĒāĻ°āĻŋāĻŦā§āĻļ āĻšāĻ˛ PostgreSQL v11, clickhousedb_fdw, āĻāĻŦāĻ ClickHouse āĻĄāĻžāĻāĻžāĻŦā§āĻ¸āĨ¤ āĻļā§āĻˇ āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤, PostgreSQL v11 āĻĨā§āĻā§ āĻāĻŽāĻ°āĻž āĻāĻŽāĻžāĻĻā§āĻ° clickhousedb_fdw āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ ClickHouse āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ā§ āĻ°āĻžāĻāĻ āĻāĻ°āĻž āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ SQL āĻā§āĻ¯āĻŧā§āĻ°āĻŋ āĻāĻžāĻ˛āĻžāĻŦāĨ¤ āĻ¤āĻžāĻ°āĻĒāĻ° āĻāĻŽāĻ°āĻž āĻĻā§āĻāĻŦ āĻāĻŋāĻāĻžāĻŦā§ FDW-āĻāĻ° āĻāĻ°ā§āĻŽāĻā§āĻˇāĻŽāĻ¤āĻž āĻ¨ā§āĻāĻŋāĻ PostgreSQL āĻāĻŦāĻ āĻ¨ā§āĻāĻŋāĻ āĻā§āĻ˛āĻŋāĻāĻšāĻžāĻāĻ¸ā§ āĻāĻ˛āĻŽāĻžāĻ¨ āĻāĻāĻ āĻĒā§āĻ°āĻļā§āĻ¨ā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¤ā§āĻ˛āĻ¨āĻž āĻāĻ°ā§āĨ¤
āĻā§āĻ˛āĻŋāĻāĻšāĻžāĻāĻ¸ āĻĄāĻžāĻāĻžāĻŦā§āĻ¸
ClickHouse āĻšāĻ˛ āĻāĻāĻāĻŋ āĻāĻĒā§āĻ¨ āĻ¸ā§āĻ°ā§āĻ¸ āĻāĻ˛āĻžāĻŽāĻžāĻ° āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ āĻŽā§āĻ¯āĻžāĻ¨ā§āĻāĻŽā§āĻ¨ā§āĻ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻ¯āĻž āĻĒā§āĻ°āĻĨāĻžāĻāĻ¤ āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ° āĻā§āĻ¯āĻŧā§ 100-1000 āĻā§āĻŖ āĻĻā§āĻ°ā§āĻ¤ āĻāĻ°ā§āĻŽāĻā§āĻˇāĻŽāĻ¤āĻž āĻ āĻ°ā§āĻāĻ¨ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§, āĻāĻ āĻ¸ā§āĻā§āĻ¨ā§āĻĄā§āĻ°āĻ āĻāĻŽ āĻ¸āĻŽāĻ¯āĻŧā§ āĻāĻ āĻŦāĻŋāĻ˛āĻŋāĻ¯āĻŧāĻ¨ āĻ¸āĻžāĻ°āĻŋ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻāĻ°āĻŖ āĻāĻ°āĻ¤ā§ āĻ¸āĻā§āĻˇāĻŽāĨ¤
Clickhousedb_fdw
clickhousedb_fdw - ClickHouse āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻŦāĻžāĻšā§āĻ¯āĻŋāĻ āĻĄā§āĻāĻž āĻŽā§āĻĄāĻŧāĻ, āĻŦāĻž FDW, Percona āĻĨā§āĻā§ āĻāĻāĻāĻŋ āĻāĻĒā§āĻ¨ āĻ¸ā§āĻ°ā§āĻ¸ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒāĨ¤
āĻāĻĒāĻ¨āĻŋ āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻŦā§āĻ¨, āĻāĻāĻŋ ClickHouse-āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ FDW āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°ā§ āĻ¯āĻž PostgreSQL v11 āĻ¸āĻžāĻ°ā§āĻāĻžāĻ° āĻĨā§āĻā§ ClickHouse āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ āĻĨā§āĻā§ SELECT, āĻāĻŦāĻ INSERT INTO-āĻāĻ° āĻ āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§āĻ¯āĻŧāĨ¤
FDW āĻāĻ¨ā§āĻ¨āĻ¤ āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯āĻā§āĻ˛āĻŋāĻā§ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻāĻ°ā§ āĻ¯ā§āĻŽāĻ¨ āĻ¸āĻŽāĻˇā§āĻāĻŋ āĻāĻŦāĻ āĻ¯ā§āĻāĻĻāĻžāĻ¨āĨ¤ āĻāĻ āĻ¸āĻŽā§āĻĒāĻĻ-āĻ¨āĻŋāĻŦāĻŋāĻĄāĻŧ āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻāĻ˛āĻžāĻĒāĻā§āĻ˛āĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻ°āĻŋāĻŽā§āĻ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°ā§āĻ° āĻ¸āĻāĻ¸ā§āĻĨāĻžāĻ¨āĻā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻāĻŋ āĻāĻ˛ā§āĻ˛ā§āĻāĻ¯ā§āĻā§āĻ¯āĻāĻžāĻŦā§ āĻāĻ°ā§āĻŽāĻā§āĻˇāĻŽāĻ¤āĻž āĻāĻ¨ā§āĻ¨āĻ¤ āĻāĻ°ā§āĨ¤
āĻŦā§āĻā§āĻāĻŽāĻžāĻ°ā§āĻ āĻĒāĻ°āĻŋāĻŦā§āĻļ
- āĻ¸ā§āĻĒāĻžāĻ°āĻŽāĻžāĻāĻā§āĻ°ā§ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°:
- IntelÂŽ XeonÂŽ CPU E5-2683 v3 @ 2.00GHz
- 2 āĻ¸āĻā§āĻ / 28 āĻā§āĻ° / 56 āĻĨā§āĻ°ā§āĻĄ
- āĻŽā§āĻŽā§āĻ°āĻŋ: āĻ°âā§āĻ¯āĻžāĻŽā§āĻ° 256 āĻāĻŋāĻŦāĻŋ
- āĻ¸ā§āĻā§āĻ°ā§āĻ: Samsung SM863 1.9TB Enterprise SSD
- āĻĢāĻžāĻāĻ˛ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ: ext4/xfs
- OS: Linux smblade01 4.15.0-42-generic #45~16.04.1-Ubuntu
- PostgreSQL: āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖ 11
āĻŦā§āĻā§āĻāĻŽāĻžāĻ°ā§āĻ āĻĒāĻ°ā§āĻā§āĻˇāĻž
āĻāĻ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŋāĻā§ āĻŽā§āĻļāĻŋāĻ¨-āĻā§āĻ¨āĻžāĻ°ā§āĻā§āĻĄ āĻĄā§āĻāĻž āĻ¸ā§āĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻžāĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤ā§, āĻāĻŽāĻ°āĻž 1987 āĻĨā§āĻā§ 2018 āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ "āĻāĻžāĻāĻŽ āĻ°āĻŋāĻĒā§āĻ°ā§āĻāĻĄ āĻ
āĻĒāĻžāĻ°ā§āĻāĻ° āĻāĻžāĻāĻŽ āĻĻā§āĻŦāĻžāĻ°āĻž āĻāĻ¤ā§āĻĒāĻžāĻĻāĻ¨āĻļā§āĻ˛āĻ¤āĻž" āĻĄā§āĻāĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§āĻāĻŋāĨ¤ āĻāĻĒāĻ¨āĻŋ āĻĄā§āĻāĻž āĻ
ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨
āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ā§āĻ° āĻāĻāĻžāĻ° 85 GB, 109 āĻāĻ˛āĻžāĻŽā§āĻ° āĻāĻāĻāĻŋ āĻā§āĻŦāĻŋāĻ˛ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°ā§āĨ¤
āĻŦā§āĻā§āĻāĻŽāĻžāĻ°ā§āĻ āĻĒā§āĻ°āĻļā§āĻ¨
āĻāĻāĻžāĻ¨ā§ āĻāĻŽāĻŋ āĻā§āĻ˛āĻŋāĻāĻšāĻžāĻāĻ¸, clickhousedb_fdw āĻāĻŦāĻ PostgreSQL āĻ¤ā§āĻ˛āĻ¨āĻž āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻŦā§āĻ¯āĻŦāĻšā§āĻ¤ āĻĒā§āĻ°āĻļā§āĻ¨āĻā§āĻ˛āĻŋāĨ¤
Q#
āĻā§āĻ¯ā§āĻ¯āĻŧāĻžāĻ°ā§ āĻ¸āĻŽāĻˇā§āĻāĻŋ āĻāĻŦāĻ āĻā§āĻ°ā§āĻĒ āĻĻā§āĻŦāĻžāĻ°āĻž āĻ§āĻžāĻ°āĻŖ āĻāĻ°ā§
Q1
āĻ¸āĻĒā§āĻ¤āĻžāĻšā§āĻ° āĻĻāĻŋāĻ¨ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻāĻ°ā§āĻ¨, āĻ¯āĻĨāĻžāĻ¸āĻŽāĻ¯āĻŧ āĻĨā§āĻā§ āĻāĻŖāĻ¨āĻž āĻāĻ°ā§āĻ¨(*)
Q2
āĻ¸āĻĒā§āĻ¤āĻžāĻšā§āĻ° āĻĻāĻŋāĻ¨ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻāĻ°ā§āĻ¨, āĻ
āĻ¨āĻāĻžāĻāĻŽ āĻĨā§āĻā§ āĻāĻŖāĻ¨āĻž āĻāĻ°ā§āĻ¨(*)
Q3
āĻ
āĻ°āĻŋāĻāĻŋāĻ¨ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻāĻ°ā§āĻ¨, āĻāĻŖāĻ¨āĻž āĻāĻ°ā§āĻ¨
Q4
āĻā§āĻ¯āĻžāĻ°āĻŋāĻ¯āĻŧāĻžāĻ° āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻāĻ°ā§āĻ¨, āĻāĻŖāĻ¨āĻž() āĻ
āĻ¨āĻāĻžāĻāĻŽ āĻĨā§āĻā§ āĻ¯ā§āĻāĻžāĻ¨ā§ āĻŦāĻŋāĻ˛āĻŽā§āĻŦ> 10 āĻāĻŦāĻ āĻŦāĻāĻ° = 2007 āĻā§āĻ°ā§āĻĒ āĻŦāĻžāĻšāĻ āĻĻā§āĻŦāĻžāĻ°āĻž āĻāĻŖāĻ¨āĻž āĻ
āĻ¨ā§āĻ¸āĻžāĻ°ā§ āĻ
āĻ°ā§āĻĄāĻžāĻ° () DESC;
Q5
āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻāĻ°ā§āĻ¨ a. āĻā§āĻ¯āĻžāĻ°āĻŋāĻ¯āĻŧāĻžāĻ°, c, c2, c1000/c2 āĻĨā§āĻā§ c3 āĻšāĻŋāĻ¸āĻžāĻŦā§ ( āĻā§āĻ¯āĻžāĻ°āĻŋāĻ¯āĻŧāĻžāĻ° āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻāĻ°ā§āĻ¨, āĻāĻŖāĻ¨āĻž () āĻ¸āĻŋ āĻ
āĻ¨āĻāĻžāĻāĻŽ āĻĨā§āĻā§ āĻā§āĻĨāĻžāĻ¯āĻŧ DepDelay>10 āĻāĻŦāĻ āĻŦāĻāĻ° = 2007 āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ° āĻĻā§āĻŦāĻžāĻ°āĻž āĻā§āĻ°ā§āĻĒ C2 DESC āĻĻā§āĻŦāĻžāĻ°āĻž;
Q6
āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻāĻ°ā§āĻ¨ a. āĻā§āĻ¯āĻžāĻ°āĻŋāĻ¯āĻŧāĻžāĻ°, c, c2, c1000/c2 āĻĨā§āĻā§ c3 āĻšāĻŋāĻ¸āĻžāĻŦā§ ( āĻā§āĻ¯āĻžāĻ°āĻŋāĻ¯āĻŧāĻžāĻ° āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻāĻ°ā§āĻ¨, āĻāĻŖāĻ¨āĻž () āĻ¸āĻŋ āĻ
āĻ¨āĻāĻžāĻāĻŽ āĻĨā§āĻā§ āĻ¯ā§āĻāĻžāĻ¨ā§ āĻŦāĻŋāĻ˛āĻŽā§āĻŦ> 10 āĻāĻŦāĻ āĻŦāĻāĻ° >= 2000 āĻāĻŦāĻ āĻŦāĻāĻ° <= āĻā§āĻ¯āĻžāĻ°āĻŋāĻ¯āĻŧāĻžāĻ° āĻĻā§āĻŦāĻžāĻ°āĻž 2008 āĻā§āĻ°ā§āĻĒ) āĻāĻāĻāĻŋ āĻ
āĻā§āĻ¯āĻ¨ā§āĻ¤āĻ°ā§āĻŖ āĻ¯ā§āĻāĻĻāĻžāĻ¨ (āĻā§āĻ¯āĻžāĻ°āĻŋāĻ¯āĻŧāĻžāĻ° āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻāĻ°ā§āĻ¨, āĻāĻŖāĻ¨āĻž āĻāĻ°ā§āĻ¨ āĻā§āĻ¯āĻžāĻ°āĻŋāĻ¯āĻŧāĻžāĻ° ) b on a. Carrier=b. Carrier ORDER BY c2 DESC;
Q7
āĻā§āĻ¯āĻžāĻ°āĻŋāĻ¯āĻŧāĻžāĻ° āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻāĻ°ā§āĻ¨, avg(DepDelay) * 1000 AS c3 āĻĨā§āĻā§ ontime āĻ¯ā§āĻāĻžāĻ¨ā§ āĻŦāĻāĻ° >= 2000 āĻāĻŦāĻ āĻŦāĻāĻ° <= āĻā§āĻ¯āĻžāĻ°āĻŋāĻ¯āĻŧāĻžāĻ° āĻĻā§āĻŦāĻžāĻ°āĻž 2008 āĻā§āĻ°ā§āĻĒ;
Q8
āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻāĻ°ā§āĻ¨ āĻŦāĻāĻ°, āĻāĻĄāĻŧ (DepDelay) āĻ
āĻ¨āĻāĻžāĻāĻŽ āĻĨā§āĻā§ āĻŦāĻāĻ° āĻ
āĻ¨ā§āĻ¸āĻžāĻ°ā§ āĻā§āĻ°ā§āĻĒ;
Q9
āĻŦāĻāĻ° āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻāĻ°ā§āĻ¨, āĻŦāĻāĻ° āĻ
āĻ¨ā§āĻ¸āĻžāĻ°ā§ āĻ
āĻ¨āĻāĻžāĻāĻŽ āĻā§āĻ°ā§āĻĒ āĻĨā§āĻā§ c1 āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻāĻŖāĻ¨āĻž āĻāĻ°ā§āĻ¨;
Q10
āĻĨā§āĻā§ avg(cnt) āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻāĻ°ā§āĻ¨ (āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻŦāĻāĻ°,āĻŽāĻžāĻ¸,āĻāĻŖāĻ¨āĻž (*) cnt āĻšāĻŋāĻ¸āĻžāĻŦā§ ontime āĻĨā§āĻā§ āĻ¯ā§āĻāĻžāĻ¨ā§ DepDel15=1 āĻŦāĻāĻ°, āĻŽāĻžāĻ¸ āĻ
āĻ¨ā§āĻ¸āĻžāĻ°ā§ āĻā§āĻ°ā§āĻĒ) a;
Q11
āĻĨā§āĻā§ avg(c1) āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻāĻ°ā§āĻ¨ (āĻŦāĻāĻ°,āĻŽāĻžāĻ¸,āĻ
āĻ¨āĻāĻžāĻāĻŽ āĻā§āĻ°ā§āĻĒ āĻĨā§āĻā§ c1 āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻŦāĻāĻ°,āĻŽāĻžāĻ¸ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻāĻ°ā§āĻ¨) a;
Q12
OriginCityName, DestCityName, āĻāĻŖāĻ¨āĻž (*) āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻāĻ°ā§āĻ¨
Q13
OriginCityName āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻāĻ°ā§āĻ¨, āĻāĻŖāĻ¨āĻž āĻāĻ°ā§āĻ¨
āĻā§āĻ¯āĻŧā§āĻ°āĻŋāĻ¤ā§ āĻ¯ā§āĻāĻĻāĻžāĻ¨ āĻ°āĻ¯āĻŧā§āĻā§
Q14
āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻāĻ°ā§āĻ¨ a.Year, c1/c2 FROM ( āĻŦāĻāĻ° āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻāĻ°ā§āĻ¨, āĻāĻŖāĻ¨āĻž()āĻ
āĻ¨āĻāĻžāĻāĻŽ āĻĨā§āĻā§ c1000 āĻšāĻŋāĻ¸āĻžāĻŦā§ 1 āĻ¯ā§āĻāĻžāĻ¨ā§ DepDelay>āĻŦāĻāĻ° āĻ
āĻ¨ā§āĻ¸āĻžāĻ°ā§ 10 āĻā§āĻ°ā§āĻĒ) āĻāĻāĻāĻŋ āĻ
āĻā§āĻ¯āĻ¨ā§āĻ¤āĻ°ā§āĻŖ āĻ¯ā§āĻāĻĻāĻžāĻ¨ (āĻŦāĻāĻ° āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻāĻ°ā§āĻ¨, āĻāĻŖāĻ¨āĻž āĻāĻ°ā§āĻ¨ (*) āĻ
āĻ¨āĻāĻžāĻāĻŽ āĻā§āĻ°ā§āĻĒ āĻĨā§āĻā§ āĻ¸āĻŋ2 āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻŦāĻāĻ° āĻ
āĻ¨ā§āĻ¸āĻžāĻ°ā§ ) b on a.Year=b.Year ORDER BY a.Year;
Q15
āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻāĻ°ā§āĻ¨ a."āĻŦāĻ°ā§āĻˇ", c1/c2 āĻĨā§āĻā§ ("āĻŦāĻāĻ°" āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻāĻ°ā§āĻ¨, āĻāĻŖāĻ¨āĻž āĻāĻ°ā§āĻ¨()1000 āĻĢāĻ¨ā§āĻāĻāĻžāĻāĻŽ āĻĨā§āĻā§ c1 āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻ¯ā§āĻāĻžāĻ¨ā§ âDepDelayâ>10 āĻā§āĻ°ā§āĻĒ āĻĻā§āĻŦāĻžāĻ°āĻž âāĻŦāĻāĻ°â) āĻāĻāĻāĻŋ āĻ
āĻā§āĻ¯āĻ¨ā§āĻ¤āĻ°ā§āĻŖ āĻ¯ā§āĻāĻĻāĻžāĻ¨ ("āĻŦāĻāĻ°" āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻāĻ°ā§āĻ¨, āĻāĻŖāĻ¨āĻž āĻāĻ°ā§āĻ¨ (*) āĻĢāĻ¨ā§āĻāĻāĻžāĻāĻŽ āĻā§āĻ°ā§āĻĒ āĻĨā§āĻā§ "āĻŦāĻāĻ°" āĻĻā§āĻŦāĻžāĻ°āĻž c2 āĻšāĻŋāĻ¸āĻžāĻŦā§ ) b āĻ¤ā§ a.âYearâ=bāĨ¤ "āĻŦāĻāĻ°";
āĻ¸āĻžāĻ°āĻŖāĻŋ-ā§§: āĻŦā§āĻā§āĻāĻŽāĻžāĻ°ā§āĻā§ āĻŦā§āĻ¯āĻŦāĻšā§āĻ¤ āĻĒā§āĻ°āĻļā§āĻ¨
āĻā§āĻ¯ā§āĻ¯āĻŧāĻžāĻ°ā§ āĻŽā§āĻ¤ā§āĻ¯ā§āĻĻāĻ¨ā§āĻĄ
āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ āĻ¸ā§āĻāĻŋāĻāĻ¸ā§ āĻāĻžāĻ˛āĻžāĻ¨ā§āĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻĒā§āĻ°āĻļā§āĻ¨ā§āĻ° āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻāĻāĻžāĻ¨ā§ āĻ°āĻ¯āĻŧā§āĻā§: PostgreSQL āĻāĻ¨āĻĄā§āĻā§āĻ¸ āĻ¸āĻš āĻāĻŦāĻ āĻāĻžāĻĄāĻŧāĻž, āĻ¨ā§āĻāĻŋāĻ ClickHouse āĻāĻŦāĻ clickhousedb_fdwāĨ¤ āĻ¸āĻŽāĻ¯āĻŧ āĻŽāĻŋāĻ˛āĻŋāĻ¸ā§āĻā§āĻ¨ā§āĻĄā§ āĻĻā§āĻāĻžāĻ¨ā§ āĻšāĻ¯āĻŧāĨ¤
Q#
āĻĒā§āĻ¸ā§āĻāĻā§āĻ°āĻŋ
PostgreSQL (āĻ¸ā§āĻāĻŋāĻŦāĻĻā§āĻ§)
āĻā§āĻ˛āĻŋāĻāĻšāĻžāĻāĻ¸
clickhousedb_fdw
Q1
27920
19634
23
57
Q2
35124
17301
50
80
Q3
34046
15618
67
115
Q4
31632
7667
25
37
Q5
47220
8976
27
60
Q6
58233
24368
55
153
Q7
30566
13256
52
91
Q8
38309
60511
112
179
Q9
20674
37979
31
81
Q10
34990
20102
56
148
Q11
30489
51658
37
155
Q12
39357
33742
186
1333
Q13
29912
30709
101
384
Q14
54126
39913
124
1364212
Q15
97258
30211
245
259
āĻ¸āĻžāĻ°āĻŖāĻŋ-1: āĻŦā§āĻā§āĻāĻŽāĻžāĻ°ā§āĻā§ āĻŦā§āĻ¯āĻŦāĻšā§āĻ¤ āĻĒā§āĻ°āĻļā§āĻ¨āĻā§āĻ˛āĻŋ āĻāĻžāĻ°ā§āĻ¯āĻāĻ° āĻāĻ°āĻ¤ā§ āĻ¸āĻŽāĻ¯āĻŧ āĻ˛āĻžāĻā§
āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻĻā§āĻā§āĻ¨
āĻā§āĻ°āĻžāĻĢāĻāĻŋ āĻŽāĻŋāĻ˛āĻŋāĻ¸ā§āĻā§āĻ¨ā§āĻĄā§ āĻā§āĻ¯ā§āĻ¯āĻŧāĻžāĻ°ā§ āĻāĻžāĻ°ā§āĻ¯āĻāĻ° āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻĻā§āĻāĻžāĻ¯āĻŧ, X āĻ āĻā§āĻˇāĻāĻŋ āĻāĻĒāĻ°ā§āĻ° āĻā§āĻŦāĻŋāĻ˛ āĻĨā§āĻā§ āĻā§āĻ¯ā§āĻ¯āĻŧāĻžāĻ°ā§ āĻ¨āĻŽā§āĻŦāĻ° āĻĻā§āĻāĻžāĻ¯āĻŧ āĻāĻŦāĻ Y āĻ āĻā§āĻˇāĻāĻŋ āĻŽāĻŋāĻ˛āĻŋāĻ¸ā§āĻā§āĻ¨ā§āĻĄā§ āĻāĻā§āĻ¸āĻŋāĻāĻŋāĻāĻļāĻ¨ āĻ¸āĻŽāĻ¯āĻŧ āĻĻā§āĻāĻžāĻ¯āĻŧāĨ¤ Clickhousedb_fdw āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻĒā§āĻ¸ā§āĻāĻā§āĻ°ā§āĻ¸ āĻĨā§āĻā§ āĻĒā§āĻ¨āĻ°ā§āĻĻā§āĻ§āĻžāĻ° āĻāĻ°āĻž āĻā§āĻ˛āĻŋāĻāĻšāĻžāĻāĻ¸ āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻāĻŦāĻ āĻĄā§āĻāĻž āĻĻā§āĻāĻžāĻ¨ā§ āĻšāĻ¯āĻŧā§āĻā§āĨ¤ āĻā§āĻŦāĻŋāĻ˛ āĻĨā§āĻā§ āĻāĻĒāĻ¨āĻŋ āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻā§āĻā§āĻ¨ āĻ¯ā§ PostgreSQL āĻāĻŦāĻ ClickHouse āĻāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻŦāĻŋāĻļāĻžāĻ˛ āĻĒāĻžāĻ°ā§āĻĨāĻā§āĻ¯ āĻ°āĻ¯āĻŧā§āĻā§, āĻāĻŋāĻ¨ā§āĻ¤ā§ ClickHouse āĻāĻŦāĻ clickhousedb_fdw āĻāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻ¨ā§āĻ¯ā§āĻ¨āĻ¤āĻŽ āĻĒāĻžāĻ°ā§āĻĨāĻā§āĻ¯āĨ¤
āĻāĻ āĻā§āĻ°āĻžāĻĢāĻāĻŋ ClickhouseDB āĻāĻŦāĻ clickhousedb_fdw āĻāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻĒāĻžāĻ°ā§āĻĨāĻā§āĻ¯ āĻĻā§āĻāĻžāĻ¯āĻŧāĨ¤ āĻŦā§āĻļāĻŋāĻ°āĻāĻžāĻ āĻĒā§āĻ°āĻļā§āĻ¨ā§āĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§, FDW āĻāĻāĻžāĻ°āĻšā§āĻĄ āĻ¤āĻ¤ āĻŦā§āĻļāĻŋ āĻ¨āĻ¯āĻŧ āĻāĻŦāĻ Q12 āĻŦā§āĻ¯āĻ¤ā§āĻ¤ āĻā§āĻŦ āĻāĻŽāĻ āĻ¤āĻžā§āĻĒāĻ°ā§āĻ¯āĻĒā§āĻ°ā§āĻŖāĨ¤ āĻāĻ āĻā§āĻ¯ā§āĻ¯āĻŧāĻžāĻ°ā§āĻ¤ā§ āĻ¯ā§āĻāĻĻāĻžāĻ¨ āĻāĻŦāĻ āĻāĻāĻāĻŋ ORDER BY āĻ§āĻžāĻ°āĻž āĻ°āĻ¯āĻŧā§āĻā§āĨ¤ ORDER BY GROUP/BY āĻ§āĻžāĻ°āĻžāĻ° āĻāĻžāĻ°āĻŖā§, ORDER BY āĻā§āĻ˛āĻŋāĻ āĻšāĻžāĻāĻ¸ā§ āĻ¨ā§āĻŽā§ āĻ¯āĻžāĻ¯āĻŧ āĻ¨āĻžāĨ¤
āĻ¸āĻžāĻ°āĻŖāĻŋ 2-āĻ āĻāĻŽāĻ°āĻž Q12 āĻāĻŦāĻ Q13 āĻĒā§āĻ°āĻļā§āĻ¨ā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻ¸āĻŽāĻ¯āĻŧ āĻ˛āĻžāĻĢāĻžāĻ¨ā§ āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻāĨ¤ āĻāĻŦāĻžāĻ°, āĻāĻāĻŋ ORDER BY āĻ§āĻžāĻ°āĻžāĻ° āĻāĻžāĻ°āĻŖā§ āĻšāĻ¯āĻŧāĨ¤ āĻāĻāĻŋ āĻ¨āĻŋāĻļā§āĻāĻŋāĻ¤ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻŽāĻŋ ORDER BY āĻ§āĻžāĻ°āĻž āĻ¸āĻš āĻāĻŦāĻ āĻāĻžāĻĄāĻŧāĻž Q-14 āĻāĻŦāĻ Q-15 āĻĒā§āĻ°āĻļā§āĻ¨āĻā§āĻ˛āĻŋ āĻāĻžāĻ˛āĻŋāĻ¯āĻŧā§āĻāĻŋāĨ¤ ORDER BY āĻā§āĻ˛āĻ āĻŦā§āĻ¯āĻ¤ā§āĻ¤ āĻ¸āĻŽāĻžāĻĒā§āĻ¤āĻŋāĻ° āĻ¸āĻŽāĻ¯āĻŧ 259ms āĻāĻŦāĻ ORDER BY āĻ§āĻžāĻ°āĻžāĻ° āĻ¸āĻžāĻĨā§ āĻāĻāĻŋ 1364212āĨ¤ āĻāĻ āĻā§āĻ¯ā§āĻ¯āĻŧāĻžāĻ°ā§āĻāĻŋ āĻĄāĻŋāĻŦāĻžāĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŽāĻŋ āĻāĻāĻ¯āĻŧ āĻĒā§āĻ°āĻļā§āĻ¨āĻ āĻŦā§āĻ¯āĻžāĻā§āĻ¯āĻž āĻāĻ°āĻāĻŋ āĻāĻŦāĻ āĻāĻāĻžāĻ¨ā§ āĻŦā§āĻ¯āĻžāĻā§āĻ¯āĻžāĻ° āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻ°āĻ¯āĻŧā§āĻā§āĨ¤
āĻĒā§āĻ°āĻļā§āĻ¨ 15: āĻ§āĻžāĻ°āĻž āĻĻā§āĻŦāĻžāĻ°āĻž āĻāĻĻā§āĻļ āĻāĻžāĻĄāĻŧāĻž
bm=# EXPLAIN VERBOSE SELECT a."Year", c1/c2
FROM (SELECT "Year", count(*)*1000 AS c1 FROM fontime WHERE "DepDelay" > 10 GROUP BY "Year") a
INNER JOIN(SELECT "Year", count(*) AS c2 FROM fontime GROUP BY "Year") b ON a."Year"=b."Year";
āĻĒā§āĻ°āĻļā§āĻ¨ 15: āĻ§āĻžāĻ°āĻž āĻĻā§āĻŦāĻžāĻ°āĻž āĻāĻĻā§āĻļ āĻāĻžāĻĄāĻŧāĻžāĻ āĻĒā§āĻ°āĻļā§āĻ¨
QUERY PLAN
Hash Join (cost=2250.00..128516.06 rows=50000000 width=12)
Output: fontime."Year", (((count(*) * 1000)) / b.c2)
Inner Unique: true Hash Cond: (fontime."Year" = b."Year")
-> Foreign Scan (cost=1.00..-1.00 rows=100000 width=12)
Output: fontime."Year", ((count(*) * 1000))
Relations: Aggregate on (fontime)
Remote SQL: SELECT "Year", (count(*) * 1000) FROM "default".ontime WHERE (("DepDelay" > 10)) GROUP BY "Year"
-> Hash (cost=999.00..999.00 rows=100000 width=12)
Output: b.c2, b."Year"
-> Subquery Scan on b (cost=1.00..999.00 rows=100000 width=12)
Output: b.c2, b."Year"
-> Foreign Scan (cost=1.00..-1.00 rows=100000 width=12)
Output: fontime_1."Year", (count(*))
Relations: Aggregate on (fontime)
Remote SQL: SELECT "Year", count(*) FROM "default".ontime GROUP BY "Year"(16 rows)
āĻĒā§āĻ°āĻļā§āĻ¨ 14: āĻ§āĻžāĻ°āĻž āĻĻā§āĻŦāĻžāĻ°āĻž ORDER āĻ¸āĻš āĻĒā§āĻ°āĻļā§āĻ¨
bm=# EXPLAIN VERBOSE SELECT a."Year", c1/c2 FROM(SELECT "Year", count(*)*1000 AS c1 FROM fontime WHERE "DepDelay" > 10 GROUP BY "Year") a
INNER JOIN(SELECT "Year", count(*) as c2 FROM fontime GROUP BY "Year") b ON a."Year"= b."Year"
ORDER BY a."Year";
āĻĒā§āĻ°āĻļā§āĻ¨ 14: ORDER BY āĻā§āĻ˛āĻ āĻ¸āĻš āĻā§āĻ¯āĻŧā§āĻ°āĻŋ āĻĒā§āĻ˛ā§āĻ¯āĻžāĻ¨
QUERY PLAN
Merge Join (cost=2.00..628498.02 rows=50000000 width=12)
Output: fontime."Year", (((count(*) * 1000)) / (count(*)))
Inner Unique: true Merge Cond: (fontime."Year" = fontime_1."Year")
-> GroupAggregate (cost=1.00..499.01 rows=1 width=12)
Output: fontime."Year", (count(*) * 1000)
Group Key: fontime."Year"
-> Foreign Scan on public.fontime (cost=1.00..-1.00 rows=100000 width=4)
Remote SQL: SELECT "Year" FROM "default".ontime WHERE (("DepDelay" > 10))
ORDER BY "Year" ASC
-> GroupAggregate (cost=1.00..499.01 rows=1 width=12)
Output: fontime_1."Year", count(*) Group Key: fontime_1."Year"
-> Foreign Scan on public.fontime fontime_1 (cost=1.00..-1.00 rows=100000 width=4)
Remote SQL: SELECT "Year" FROM "default".ontime ORDER BY "Year" ASC(16 rows)
āĻāĻĒāĻ¸āĻāĻšāĻžāĻ°
āĻāĻ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ° āĻĢāĻ˛āĻžāĻĢāĻ˛āĻā§āĻ˛āĻŋ āĻĻā§āĻāĻžāĻ¯āĻŧ āĻ¯ā§ ClickHouse āĻ¸āĻ¤ā§āĻ¯āĻŋāĻ āĻāĻžāĻ˛ āĻĒāĻžāĻ°āĻĢāĻ°āĻŽā§āĻ¯āĻžāĻ¨ā§āĻ¸ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°ā§, āĻāĻŦāĻ clickhousedb_fdw PostgreSQL āĻĨā§āĻā§ ClickHouse-āĻāĻ° āĻāĻ°ā§āĻŽāĻā§āĻˇāĻŽāĻ¤āĻž āĻ¸ā§āĻŦāĻŋāĻ§āĻž āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°ā§āĨ¤ clickhousedb_fdw āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻāĻŋāĻā§ āĻāĻāĻžāĻ°āĻšā§āĻĄ āĻĨāĻžāĻāĻ˛ā§āĻ, āĻāĻāĻŋ āĻā§āĻ˛āĻŋāĻāĻšāĻžāĻāĻ¸ āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ā§ āĻ¨ā§āĻāĻŋāĻāĻāĻžāĻŦā§ āĻāĻžāĻ˛āĻžāĻ¨ā§āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻ āĻ°ā§āĻāĻŋāĻ¤ āĻāĻ°ā§āĻŽāĻā§āĻˇāĻŽāĻ¤āĻžāĻ° āĻ¸āĻžāĻĨā§ āĻ¨āĻāĻŖā§āĻ¯ āĻāĻŦāĻ āĻ¤ā§āĻ˛āĻ¨ā§āĻ¯āĻŧāĨ¤ āĻāĻāĻŋ āĻ¨āĻŋāĻļā§āĻāĻŋāĻ¤ āĻāĻ°ā§ āĻ¯ā§ PostgreSQL-āĻ fdw āĻāĻŽā§āĻāĻžāĻ° āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°ā§āĨ¤
Clickhouse āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻā§āĻ˛āĻŋāĻā§āĻ°āĻžāĻŽ āĻā§āĻ¯āĻžāĻ
PostgreSQL āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻā§āĻ˛āĻŋāĻā§āĻ°āĻžāĻŽ āĻā§āĻ¯āĻžāĻ
āĻāĻ¤ā§āĻ¸: www.habr.com