เด เดชเด เดจเดคเตเดคเดฟเตฝ, PostgreSQL-เดจเตเดเตเดเดพเตพ เดเดฐเต ClickHouse เดกเดพเดฑเตเดฑเดพ เดเดฑเดตเดฟเดเด เดเดชเดฏเตเดเดฟเดเตเดเต เดเดจเตเดคเต เดชเตเดฐเดเดเดจ เดฎเตเดเตเดเดชเตเดชเตเดเตเดคเตเดคเดฒเตเดเตพ เดจเตเดเดพเดจเดพเดเตเดฎเตเดจเตเดจเต เดเดพเดฃเดพเตป เดเดพเตป เดเดเตเดฐเดนเดฟเดเตเดเต. ClickHouse เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเดคเดฟเดฒเตเดเต เดเดจเดฟเดเตเดเต เดฒเดญเดฟเดเตเดเตเดจเตเดจ เดเตฝเดชเตเดชเดพเดฆเดจเดเตเดทเดฎเดคเดพ เดจเตเดเตเดเดเตเดเตพ เดเดจเดฟเดเตเดเดฑเดฟเดฏเดพเด. เดเดฐเต เดซเตเดฑเดฟเตป เดกเดพเดฑเตเดฑ เดฑเดพเดชเตเดชเตผ (FDW) เดเดชเดฏเตเดเดฟเดเตเดเต เดเดพเตป PostgreSQL-เตฝ เดจเดฟเดจเตเดจเต ClickHouse เดเดเตเดธเดธเต เดเตเดฏเตเดคเดพเตฝ เด เดเดจเตเดเตเดฒเตเดฏเดเตเดเตพ เดคเตเดเดฐเตเดฎเต?
PostgreSQL v11, clickhousedb_fdw, ClickHouse เดกเดพเดฑเตเดฑเดพเดฌเตเดธเต เดเดจเตเดจเดฟเดตเดฏเดพเดฃเต เดชเด เดฟเดเตเด เดกเดพเดฑเตเดฑเดพเดฌเตเดธเต เดชเดฐเดฟเดคเดธเตเดฅเดฟเดคเดฟเดเตพ. เดเดคเตเดฏเดจเตเดคเดฟเดเดฎเดพเดฏเดฟ, PostgreSQL v11-เตฝ เดจเดฟเดจเตเดจเต เดเดเตเดเตพ เดเดเตเดเดณเตเดเต clickhousedb_fdw เดตเดดเดฟ ClickHouse เดกเดพเดฑเตเดฑเดพเดฌเตเดธเดฟเดฒเตเดเตเดเต เดตเดฟเดตเดฟเดง SQL เด เดจเตเดตเตเดทเดฃเดเตเดเตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเดเตเดเตเด. เดจเตเดฑเตเดฑเตเดตเต PostgreSQL-เดฒเตเด เดจเตเดฑเตเดฑเตเดตเต ClickHouse-เดฒเตเด เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจ เด เดคเต เดเตเดฆเตเดฏเดเตเดเดณเตเดฎเดพเดฏเดฟ FDW-เดจเตเดฑเต เดชเตเดฐเดเดเดจเด เดเดเตเดเดจเต เดคเดพเดฐเดคเดฎเตเดฏเด เดเตเดฏเตเดฏเตเดจเตเดจเตเดตเตเดจเตเดจเต เดจเดฎเตเดเตเดเต เด เดชเตเดชเตเตพ เดเดพเดฃเดพเด.
เดเตเดฒเดฟเดเตเดเตเดนเตเดธเต เดกเดพเดฑเตเดฑเดพเดฌเตเดธเต
เดชเดฐเดฎเตเดชเดฐเดพเดเดค เดกเดพเดฑเตเดฑเดพเดฌเตเดธเต เดธเดฎเตเดชเดจเดเตเดเดณเตเดเตเดเดพเตพ 100-1000 เดฎเดเดเตเดเต เดตเตเดเดคเตเดคเดฟเตฝ เดชเตเดฐเดเดเดจเด เดเตเดตเดฐเดฟเดเตเดเดพเตป เดเดดเดฟเดฏเตเดจเตเดจ เดเดฐเต เดเดชเตเดชเตบ เดธเตเดดเตโเดธเต เดเตเดณเด เดกเดพเดฑเตเดฑเดพเดฌเตเดธเต เดฎเดพเดจเตเดเตโเดฎเตเดจเตเดฑเต เดธเดฟเดธเตเดฑเตเดฑเดฎเดพเดฃเต ClickHouse, เดเดฐเต เดธเตเดเตเดเตปเดกเดฟเตฝ เดคเดพเดดเต เดธเดฎเดฏเดคเตเดคเดฟเดจเตเดณเตเดณเดฟเตฝ เดเดฐเต เดฌเดฟเดฒเตเดฏเตบ เดตเดฐเดฟเดเตพ เดชเตเดฐเตเดธเดธเตเดธเต เดเตเดฏเตเดฏเดพเตป เดเดดเดฟเดฏเตเด.
Clickhousedb_fdw
clickhousedb_fdw - ClickHouse เดกเดพเดฑเตเดฑเดพเดฌเตเดธเดฟเดจเดพเดฏเตเดณเตเดณ เดฌเดพเดนเตเดฏ เดกเดพเดฑเตเดฑ เดฑเดพเดชเตเดชเตผ, เด
เดฒเตเดฒเตเดเตเดเดฟเตฝ FDW, เดชเตเตผเดเตเดเตเดฃเดฏเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดเดฐเต เดเดชเตเดชเตบ เดธเตเดดเตเดธเต เดชเตเดฐเตเดเดเตเดฑเตเดฑเดพเดฃเต.
เดจเดฟเดเตเดเตพเดเตเดเต เดเดพเดฃเดพเดจเดพเดเตเดจเตเดจเดคเตเดชเตเดฒเต, เดเดคเต ClickHouse-เดจเดพเดฏเดฟ เดเดฐเต FDW เดจเตฝเดเตเดจเตเดจเต, เด เดคเต PostgreSQL v11 เดธเตเตผเดตเดฑเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ ClickHouse เดกเดพเดฑเตเดฑเดพเดฌเตเดธเดฟเตฝ เดจเดฟเดจเตเดจเต SELECT เดเตเดฏเตเดฏเดพเดจเตเด เดเตปเดธเตเตผเดเตเดเต เดเตเดฏเตเดฏเดพเดจเตเด เด เดจเตเดตเดฆเดฟเดเตเดเตเดจเตเดจเต.
เดธเดฎเดพเดนเดฐเดฟเดเตเดเตเด, เดเตเดฐเตเด เดคเตเดเดเตเดเดฟเดฏ เดตเดฟเดชเตเดฒเดฎเดพเดฏ เดซเตเดเตเดเดฑเตเดเดณเต FDW เดชเดฟเดจเตเดคเตเดฃเดฏเตเดเตเดเตเดจเตเดจเต. เด เดฑเดฟเดธเตเดดเตเดธเต-เดเดจเตเดฑเตปเดธเตเดตเต เดเดชเตเดชเดฑเตเดทเดจเตเดเตพเดเตเดเดพเดฏเดฟ เดฑเดฟเดฎเตเดเตเดเต เดธเตเตผเดตเดฑเดฟเดจเตเดฑเต เดเดฑเดตเดฟเดเดเตเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเต เดเดคเต เดชเตเดฐเดเดเดจเด เดเดฃเตเดฏเดฎเดพเดฏเดฟ เดฎเตเดเตเดเดชเตเดชเตเดเตเดคเตเดคเตเดจเตเดจเต.
เดฌเตเดเตเดเตเดฎเดพเตผเดเตเดเต เดชเดฐเดฟเดธเตเดฅเดฟเดคเดฟ
- เดธเตเดชเตเดชเตผเดฎเตเดเตเดฐเต เดธเตเตผเดตเตผ:
- Intelยฎ Xeonยฎ CPU E5-2683 v3 @ 2.00GHz
- 2 เดธเตเดเตเดเดฑเตเดฑเตเดเตพ / 28 เดเตเดฑเตเดเตพ / 56 เดคเตเดฐเตเดกเตเดเตพ
- เดฎเตเดฎเตเดฎเดฑเดฟ: 256 เดเดฟเดฌเดฟ เดฑเดพเด
- เดธเดเดญเดฐเดฃเด: Samsung SM863 1.9TB เดเดจเตเดฑเตผเดชเตเดฐเตเดธเต SSD
- เดซเดฏเตฝเดธเดฟเดธเตเดฑเตเดฑเด: ext4/xfs
- OS: Linux smblade01 4.15.0-42-generic #45~16.04.1-Ubuntu
- PostgreSQL: เดชเดคเดฟเดชเตเดชเต 11
เดฌเตเดเตเดเตเดฎเดพเตผเดเตเดเต เดเตเดธเตเดฑเตเดฑเตเดเตพ
เด เดเตเดธเตเดฑเตเดฑเดฟเดจเดพเดฏเดฟ เดฎเตเดทเตเตป เดเดจเดฑเตเดฑเตเดฑเดกเต เดกเดพเดฑเตเดฑ เดธเตเดฑเตเดฑเต เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเต เดชเดเดฐเด, 1987 เดฎเตเดคเตฝ 2018 เดตเดฐเตเดฏเตเดณเตเดณ "เดชเตเดฐเตเดกเดเตเดเดฟเดตเดฟเดฑเตเดฑเดฟ เดฌเต เดเตเด เดฑเดฟเดชเตเดชเตเตผเดเตเดเต เดเตเดฏเตเดค เดเดชเตเดชเดฑเตเดฑเตเดฑเตผ เดเตเด" เดกเดพเดฑเตเดฑเดฏเดพเดฃเต เดเดเตเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเดคเต. เดจเดฟเดเตเดเตพเดเตเดเต เดกเดพเดฑเตเดฑ เดเดเตเดธเดธเต เดเตเดฏเตเดฏเดพเตป เดเดดเดฟเดฏเตเด
เดกเดพเดฑเตเดฑเดพเดฌเตเดธเต เดตเดฒเตเดชเตเดชเด 85 GB เดเดฃเต, 109 เดจเดฟเดฐเดเดณเตเดณเตเดณ เดเดฐเต เดชเดเตเดเดฟเด เดจเตฝเดเตเดจเตเดจเต.
เดฌเตเดเตเดเตเดฎเดพเตผเดเตเดเต เดเตเดฆเตเดฏเดเตเดเตพ
ClickHouse, clickhousedb_fdw, PostgreSQL เดเดจเตเดจเดฟเดต เดคเดพเดฐเดคเดฎเตเดฏเด เดเตเดฏเตเดฏเดพเตป เดเดพเตป เดเดชเดฏเตเดเดฟเดเตเด เดเตเดฆเตเดฏเดเตเดเตพ เดเดคเดพ.
Q#
เด
เดจเตเดตเตเดทเดฃเดคเตเดคเดฟเตฝ เด
เดเตเดฐเดเตเดฑเตเดฑเตเดเดณเตเด เดเตเดฐเตเดชเตเดชเตเด เด
เดเดเตเดเดฟเดฏเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต
Q1
DayOfWeek เดคเดฟเดฐเดเตเดเตเดเตเดเตเดเตเด, เดเดตเดฟเดเต เดตเตผเดทเด >= 2000-เดเด เดตเตผเดทเด <= 2008 เดเตเดฐเตเดชเตเดชเตเด เดเตบเดเตเด เดฎเตเดคเตฝ c DESC เดชเตเดฐเดเดพเดฐเด เดกเตเดเดซเต เดตเตเดเตเดเต เดเตผเดกเตผ เดเตเดฏเตเดฏเตเด;
Q2
DayOfWeek เดคเดฟเดฐเดเตเดเตเดเตเดเตเดเตเด, เดกเตเดชเตโเดกเดฟเดฒเต>10-เดเด เดตเตผเดทเดตเตเด >= 2000-เดเด เดตเตผเดทเดตเตเด <= 2008 เดเตเดฐเตเดชเตเดชเต เดกเตเดเดซเตโเดตเตเดเตเดเต เดชเตเดฐเดเดพเดฐเด เดเตบเดเตเด เดฎเตเดคเตฝ เดธเดฟ เดกเตเดธเตโเดเต เดชเตเดฐเดเดพเดฐเด เดเตผเดกเตผ เดเตเดฏเตเดฏเตเด;
Q3
เดเดคเตเดญเดตเด เดคเดฟเดฐเดเตเดเตเดเตเดเตเดเตเด, เดกเตเดชเตโเดกเดฟเดฒเต>10 เดเด เดตเตผเดทเดตเตเด >= 2000 เดเด เดตเตผเดทเดตเตเด <= 2008 เดเตเดฐเตเดชเตเดชเต เดเดฑเดฟเดเดฟเตป เดชเตเดฐเดเดพเดฐเด เดเตบเดเตเด เดฎเตเดคเตฝ เดธเดฟ เดกเตเดธเตโเดเต เดฒเดฟเดฎเดฟเดฑเตเดฑเต 10 เดชเตเดฐเดเดพเดฐเด เดเดฃเตเดฃเตเด;
Q4
เดเดพเดฐเดฟเดฏเตผ เดคเดฟเดฐเดเตเดเตเดเตเดเตเดเตเด, เดเดฃเตเดฃเตเด() เดเตบเดเตเด เดฎเตเดคเตฝ เดเดตเดฟเดเต DepDelay>10 เดเด เดตเตผเดทเดตเตเด = 2007 เดเตเดฐเตเดชเตเดชเต เดชเตเดฐเดเดพเดฐเด เดเดพเดฐเดฟเดฏเตผ เดเตผเดกเตผ เดชเตเดฐเดเดพเดฐเด เดเดฃเตเดฃเด() DESC;
Q5
a.Carrier, c, c2, c เดคเดฟเดฐเดเตเดเตเดเตเดเตเดเตเดC1000 เดเดฏเดฟ 2/c3 (เดเดพเดฐเดฟเดฏเตผ เดคเดฟเดฐเดเตเดเตเดเตเดเตเดเตเด, เดเดฃเตเดฃเด() เดเดเดธเต เดธเดฟ เดเตบเดเตเด เดเดตเดฟเดเตเดฏเดพเดฃเต เดกเตเดชเตโเดกเตเดฒเต>10 เดเด เดตเตผเดทเดตเตเด=2007 เดเตเดฐเตเดชเตเดชเต เดเดพเดฐเดฟเดฏเตผ ) เดเดฐเต เดเดจเตเดคเดฐเดฟเด เดเตเดฐเตฝ (เดเดพเดฐเดฟเดฏเตผ เดคเดฟเดฐเดเตเดเตเดเตเดเตเดเตเด,เดเดฃเตเดฃเด(*) เดธเดฟ 2 เดเตบเดเตเด เดเดตเดฟเดเต เดจเดฟเดจเตเดจเต เดตเตผเดทเด=2007 เดเตเดฐเตเดชเตเดชเต เดเดพเดฐเดฟเดฏเตผ เดชเตเดฐเดเดพเดฐเด)b on a.Carrier=b.Carrier Order C3 DESC เดตเดดเดฟ;
Q6
a.Carrier, c, c2, c เดคเดฟเดฐเดเตเดเตเดเตเดเตเดเตเดC1000 เดเดฏเดฟ 2/c3 (เดเดพเดฐเดฟเดฏเตผ เดคเดฟเดฐเดเตเดเตเดเตเดเตเดเตเด, เดเดฃเตเดฃเด() เดเดเดธเต เดธเดฟ เดเตบเดเตเด เดเดตเดฟเดเต เดกเตเดชเตโเดกเตเดฒเต>10 เดเด เดตเตผเดทเดตเตเด >= 2000 เดเด เดตเตผเดทเด <= 2008 เดเตเดฐเตเดชเตเดชเต เดฌเต เดเดพเดฐเดฟเดฏเตผ) เดเดฐเต เดเดจเตเดคเดฐเดฟเด เดเตเดฐเตฝ (เดเดพเดฐเดฟเดฏเตผ เดคเดฟเดฐเดเตเดเตเดเตเดเตเดเตเด, เดเดฃเตเดฃเตเด(*) เดธเดฟ2 เดเดฏเดฟ เดเตบเดเตเด เดฎเตเดคเตฝ เดเดตเดฟเดเต เดตเตผเดทเด >= 2000 เดเด เดตเตผเดทเด <= 2008 เดจเตเด เดฎเตเดเดณเดฟเตฝ เดเดพเดฐเดฟเดฏเตผ ) b เดเตบ a.Carrier=b.C3 DESC เดตเดดเดฟ เดเดพเดฐเดฟเดฏเตผ เดเตผเดกเตผ;
Q7
เดเดพเดฐเดฟเดฏเตผ เดคเดฟเดฐเดเตเดเตเดเตเดเตเดเตเด, เดถเดฐเดพเดถเดฐเดฟ (DepDelay) * 1000 AS c3 เดเตบเดเตเด เดฎเตเดคเตฝ เดเดตเดฟเดเต เดตเตผเดทเด >= 2000, เดตเตผเดทเด <= 2008 เดเดพเดฐเดฟเดฏเตผ เดเตเดฐเตเดชเตเดชเต;
Q8
เดเตบเดเตเด เดเตเดฐเตเดชเตเดชเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเตผเดทเด, เดถเดฐเดพเดถเดฐเดฟ (เดกเตเดชเตเดกเดฟเดฒเต) เดคเดฟเดฐเดเตเดเตเดเตเดเตเดเตเด;
Q9
เดตเตผเดทเด เดคเดฟเดฐเดเตเดเตเดเตเดเตเดเตเด, เดเตบเดเตเด เดเตเดฐเตเดชเตเดชเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเตผเดทเด เด
เดจเตเดธเดฐเดฟเดเตเดเต (*) c1 เดเดฏเดฟ เดเดฃเดเตเดเดพเดเตเดเตเด;
Q10
เดถเดฐเดพเดถเดฐเดฟ (cnt) เดฎเตเดคเตฝ (เดตเตผเดทเด, เดฎเดพเดธเด, เดเดฃเตเดฃเด (*) เดคเดฟเดฐเดเตเดเตเดเตเดเตเดเตเด, เดเตบเดเตเด เดฎเตเดคเตฝ cnt เดเดตเดฟเดเต DepDel15=1 เดเตเดฐเตเดชเตเดชเต เดตเตผเดทเด, เดฎเดพเดธเด) a;
Q11
(เดตเตผเดทเด,เดฎเดพเดธเด,เดเดฃเตเดฃเด(*) เดเดจเตเดจเดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดถเดฐเดพเดถเดฐเดฟ(c1) เดคเดฟเดฐเดเตเดเตเดเตเดเตเดเตเด, เดตเตผเดทเด, เดฎเดพเดธเด เดชเตเดฐเดเดพเดฐเด เดเตบเดเตเด เดเตเดฐเตเดชเตเดชเดฟเตฝ เดจเดฟเดจเตเดจเต c1 เดเดฏเดฟ เดคเดฟเดฐเดเตเดเตเดเตเดเตเดเตเด;
Q12
OriginCityName, DestCityName เดคเดฟเดฐเดเตเดเตเดเตเดเตเดเตเด, เดเตบเดเตเด เดเตเดฐเตเดชเตเดชเดฟเตฝ เดจเดฟเดจเตเดจเต เดเดฑเดฟเดเดฟเตปเดธเดฟเดฑเตเดฑเดฟเดฏเตเดเต เดชเตเดฐเต, DestCityName เดเตผเดกเตผ เดชเตเดฐเดเดพเดฐเด c DESC LIMIT 10 เดชเตเดฐเดเดพเดฐเด เดเดฃเตเดฃเตเด (*);
Q13
เดเดฑเดฟเดเดฟเตปเดธเดฟเดฑเตเดฑเดฟเดฏเตเดเต เดชเตเดฐเต เดคเดฟเดฐเดเตเดเตเดเตเดเตเดเตเด, เดเตบเดเตเด เดเตเดฐเตเดชเตเดชเดฟเตฝ เดจเดฟเดจเตเดจเต เดเดฑเดฟเดเดฟเตปเดธเดฟเดฑเตเดฑเดฟเดฏเตเดเต เดชเตเดฐเต เด
เดจเตเดธเดฐเดฟเดเตเดเต เดเดฃเตเดฃเตเด(*) เดธเดฟ เดกเตเดธเตโเดเต เดฒเดฟเดฎเดฟเดฑเตเดฑเต 10 เดชเตเดฐเดเดพเดฐเด เดเตผเดกเตผ เดเตเดฏเตเดฏเตเด;
เด เดจเตเดตเตเดทเดฃเดคเตเดคเดฟเตฝ เดเตเดฐเดฒเตเดเตพ เด เดเดเตเดเดฟเดฏเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต
Q14
เดเดฐเต เดตเตผเดทเด, c1/c2 เดคเดฟเดฐเดเตเดเตเดเตเดเตเดเตเด ( เดตเตผเดทเด เดคเดฟเดฐเดเตเดเตเดเตเดเตเดเตเด, เดเดฃเตเดฃเตเด()1000 เดเตบเดเตเด เดฎเตเดคเตฝ c1 เดเดฏเดฟ, เดเดตเดฟเดเต เดกเตเดชเตเดกเตเดฒเต>10 เดเตเดฐเตเดชเตเดชเต เดฌเต เดเดฏเตผ) เดเดฐเต เดเตปเดฑเตผ เดเตเดฏเดฟเตป (เดเดฏเตผ เดคเดฟเดฐเดเตเดเตเดเตเดเตเดเตเด, เดเตบเดเตเด เดเตเดฐเตเดชเตเดชเต เดฌเต เดเดฏเตผ เดเดจเตเดจเดคเดฟเตฝ เดจเดฟเดจเตเดจเต c2 เดเดฏเดฟ เดเดฃเดเตเดเดพเดเตเดเตเด(*) b. เดตเตผเดทเด=b. เดตเตผเดทเด เดชเตเดฐเดเดพเดฐเดฎเตเดณเตเดณ เดเตผเดกเตผ;
Q15
เดเดฐเต.โเดตเตผเดทเดโ, c1/c2 เดเดจเตเดจเดฟเดตเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดคเดฟเดฐเดเตเดเตเดเตเดเตเดเตเด (โเดตเตผเดทเดโ เดคเดฟเดฐเดเตเดเตเดเตเดเตเดเตเด, เดเดฃเตเดฃเตเด()1000 เดซเตเตบเดเตเดฎเดฟเตฝ เดจเดฟเดจเตเดจเต c1 เดเดฏเดฟ "DepDelay">10 เดเตเดฐเตเดชเตเดชเต เดชเตเดฐเดเดพเดฐเด "เดตเตผเดทเด") เดเดฐเต เดเดจเตเดคเดฐเดฟเด เดเตเดฐเตฝ ("เดตเตผเดทเด" เดคเดฟเดฐเดเตเดเตเดเตเดเตเดเตเด, "เดตเตผเดทเด" เดเดจเตเดจเดคเดฟเตฝ เดจเดฟเดจเตเดจเต c2 เดเดฏเดฟ เดเดฃเดเตเดเดพเดเตเดเตเด(*) ) b on a.โyearโ=b. "เดตเตผเดทเด";
เดชเดเตเดเดฟเด-1: เดฌเตเดเตเดเตเดฎเดพเตผเดเตเดเดฟเตฝ เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจ เดเตเดฆเตเดฏเดเตเดเตพ
เดเตเดตเดฑเดฟ เดเดเตเดธเดฟเดเตเดฏเตเดทเดจเตเดเตพ
เดตเตเดฏเดคเตเดฏเดธเตโเดค เดกเดพเดฑเตเดฑเดพเดฌเตเดธเต เดเตเดฐเดฎเตเดเดฐเดฃเดเตเดเดณเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเดเตเดเตเดฎเตเดชเตเตพ เดเดฐเต เดเตเดฆเตเดฏเดเตเดเดณเตเดเตเดฏเตเด เดซเดฒเดเตเดเตพ เดเดคเดพ: เดธเตเดเดฟเดเดเดณเตเดเตเดฏเตเด เด เดฒเตเดฒเดพเดคเตเดฏเตเด PostgreSQL, เดจเตเดฑเตเดฑเตเดตเต ClickHouse, clickhousedb_fdw. เดธเดฎเดฏเด เดฎเดฟเดฒเตเดฒเดฟเดธเตเดเตเดเตปเดกเดฟเตฝ เดเดพเดฃเดฟเดเตเดเตเดจเตเดจเต.
Q#
PostgreSQL เดเดจเตเดจเต
PostgreSQL (เดธเตเดเดฟเด)
เดเตเดฒเดฟเดเตเดเตเดน ouse เดธเต
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 เดเดชเดฏเตเดเดฟเดเตเดเต postgres-เตฝ เดจเดฟเดจเตเดจเต เดตเตเดฃเตเดเตเดเตเดคเตเดค ClickHouse เดซเดฒเดเตเดเดณเตเด เดกเดพเดฑเตเดฑเดฏเตเด เดเดพเดฃเดฟเดเตเดเตเดจเตเดจเต. PostgreSQL เดเด ClickHouse เดเด เดคเดฎเตเดฎเดฟเตฝ เดตเดฒเดฟเดฏ เดตเตเดฏเดคเตเดฏเดพเดธเดฎเตเดฃเตเดเตเดจเตเดจเต เดชเดเตเดเดฟเดเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดจเดฟเดเตเดเตพเดเตเดเต เดเดพเดฃเดพเตป เดเดดเดฟเดฏเตเด, เดเดจเตเดจเดพเตฝ ClickHouse เดเด clickhousedb_fdw เดเด เดคเดฎเตเดฎเดฟเตฝ เดเตเดฑเดเตเด เดตเตเดฏเดคเตเดฏเดพเดธเดฎเตเดฃเตเดเต.
ClickhouseDB, clickhousedb_fdw เดเดจเตเดจเดฟเดต เดคเดฎเตเดฎเดฟเดฒเตเดณเตเดณ เดตเตเดฏเดคเตเดฏเดพเดธเด เด เดเตเดฐเดพเดซเต เดเดพเดฃเดฟเดเตเดเตเดจเตเดจเต. เดฎเดฟเดเตเด เดเตเดฆเตเดฏเดเตเดเดณเดฟเดฒเตเด, FDW เดเดตเตผเดนเตเดกเต เด เดคเตเดฐ เดเดฏเตผเดจเตเดจเดคเดฒเตเดฒ, Q12 เดเดดเดฟเดเต เด เดคเต เดตเดณเดฐเต เดชเตเดฐเดพเดงเดพเดจเตเดฏเดฎเตเดณเตเดณเดคเดฒเตเดฒ. เด เด เดจเตเดตเตเดทเดฃเดคเตเดคเดฟเตฝ เดเตเดฐเดฒเตเดเดณเตเด เดเตเดฒเตเดธเต เดชเตเดฐเดเดพเดฐเด เดเดฐเต เดเตผเดกเตผ เดเตพเดชเตเดชเตเดเตเดจเตเดจเต. GROUP/BY เดเตเดฒเตเดธเต เดชเตเดฐเดเดพเดฐเด เดเตผเดกเตผ เดเตเดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเดพเตฝ, ORDER BY เดเตเดฒเดฟเดเตเดเตเดนเตเดธเดฟเดฒเตเดเตเดเต เดกเตเดฐเตเดชเตเดชเต เดเตเดฏเตเดฏเตเดจเตเดจเดฟเดฒเตเดฒ.
เดชเดเตเดเดฟเด 2-เตฝ Q12, Q13 เดเดจเตเดจเต เดเตเดฆเตเดฏเดเตเดเดณเดฟเดฒเต เดเตเด เดเดฎเตเดชเต เดจเดฎเตเดฎเตพ เดเดพเดฃเตเดจเตเดจเต. เดตเตเดฃเตเดเตเด, เดเดคเต เดเตผเดกเตผ เดฌเต เดเตเดฒเตเดธเต เดเดพเดฐเดฃเดฎเดพเดฃเต. เดเดคเต เดธเตเดฅเดฟเดฐเตเดเดฐเดฟเดเตเดเดพเตป, เดเดพเตป เดเตเดฏเต-14, เดเตเดฏเต-15 เดเดจเตเดจเดฟเดต เดเตเดฐเดฎเด เด เดจเตเดธเดฐเดฟเดเตเดเต เดเตผเดกเตผ เดจเตฝเดเดฟเดฏเตเด เด เดฒเตเดฒเดพเดคเตเดฏเตเด เดจเดเดคเตเดคเดฟ. เดเตผเดกเตผ เดฌเต เดเตเดฒเตเดธเต เดเดฒเตเดฒเดพเดคเต เดชเตเตผเดคเตเดคเตเดเดฐเดฃ เดธเดฎเดฏเด 259ms เดเดฃเต, เดเตเดเดพเดคเต เดเตผเดกเตผ เดชเตเดฐเดเดพเดฐเด เดเตเดฒเตเดธเต 1364212 เดเดฃเต. เด เดเตเดฆเตเดฏเด เดกเตเดฌเดเต เดเตเดฏเตเดฏเดพเตป เดเดพเตป เดฐเดฃเตเดเต เดเตเดฆเตเดฏเดเตเดเดณเตเด เดตเดฟเดถเดฆเตเดเดฐเดฟเดเตเดเตเดจเตเดจเต, เดตเดฟเดถเดฆเตเดเดฐเดฃเดคเตเดคเดฟเดจเตเดฑเต เดซเดฒเดเตเดเตพ เดเดคเดพ.
Q15: เดเตเดฒเตเดธเต เดชเตเดฐเดเดพเดฐเด เดเตผเดกเตผ เดเดฒเตเดฒเดพเดคเต
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";
Q15: เดเตเดฒเตเดธเต เดชเตเดฐเดเดพเดฐเด เดเตผเดกเตผ เดเดฒเตเดฒเดพเดคเต เดเตเดฆเตเดฏเด
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)
Q14: เดเตเดฒเตเดธเต เดชเตเดฐเดเดพเดฐเด เดเตผเดกเตผ เดเดชเดฏเตเดเดฟเดเตเดเต เด เดจเตเดตเตเดทเดฃเด
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";
Q14: เดเตเดฒเตเดธเต เดชเตเดฐเดเดพเดฐเดฎเตเดณเตเดณ เดเตผเดกเตผ เดธเดนเดฟเดคเด เดเตเดตเดฑเดฟ เดชเตเดฒเดพเตป
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 เดเดชเดฏเตเดเดฟเดเตเดเตเดฎเตเดชเตเตพ เดเดฟเดฒ เดเดตเตผเดนเตเดกเต เดเดฃเตเดเตเดเตเดเดฟเดฒเตเด, ClickHouse เดกเดพเดฑเตเดฑเดพเดฌเตเดธเดฟเตฝ เดจเตเดฑเตเดฑเตเดตเต เดเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเดคเดฟเดฒเตเดเต เดจเตเดเดฟเดฏ เดชเตเดฐเดเดเดจเดตเตเดฎเดพเดฏเดฟ เดเดคเต เดจเดฟเดธเตเดธเดพเดฐเดตเตเด เดคเดพเดฐเดคเดฎเตเดฏเดชเตเดชเตเดเตเดคเตเดคเดพเดตเตเดจเตเดจเดคเตเดฎเดพเดฃเต. PostgreSQL-เดฒเต fdw เดฎเดฟเดเดเตเด เดซเดฒเดเตเดเตพ เดจเตฝเดเตเดจเตเดจเตเดตเตเดจเตเดจเตเด เดเดคเต เดธเตเดฅเดฟเดฐเตเดเดฐเดฟเดเตเดเตเดจเตเดจเต.
Clickhouse เดตเดดเดฟ เดเตเดฒเดฟเดเตเดฐเดพเด เดเดพเดฑเตเดฑเต
PostgreSQL เดเดชเดฏเตเดเดฟเดเตเดเต เดเตเดฒเดฟเดเตเดฐเดพเด เดเดพเดฑเตเดฑเต
เด เดตเดฒเดเดฌเด: www.habr.com