PostgreSQL, ClickHouse, clickhousedb_fdw (PostgreSQL) เดŽเดจเตเดจเดฟเดตเดฏเดฟเดฒเต† เด…เดจเดฒเดฟเดฑเตเดฑเดฟเด•เตเด•เตฝ เด…เดจเตเดตเต‡เดทเดฃเด™เตเด™เดณเตเดŸเต† เดชเตเดฐเด•เดŸเดจเด‚ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเต

เดˆ เดชเด เดจเดคเตเดคเดฟเตฝ, 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, เดชเต†เตผเด•เตเด•เต‹เดฃเดฏเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เด’เดฐเต เด“เดชเตเดชเตบ เดธเต‹เดดเตเดธเต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดพเดฃเต. เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเดจเตเดฑเต† GitHub เดถเต‡เด–เดฐเดฃเดคเตเดคเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เด’เดฐเต เดฒเดฟเด™เตเด•เต เด‡เดคเดพ.

เดฎเดพเตผเดšเตเดšเดฟเตฝ เดžเดพเตป เดžเด™เตเด™เดณเตเดŸเต† เดŽเดซเตโ€Œเดกเดฟเดกเดฌเตเดฒเตเดฏเตเดตเดฟเดจเต† เด•เตเดฑเดฟเดšเตเดšเต เดจเดฟเด™เตเด™เดณเต‹เดŸเต เด•เต‚เดŸเตเดคเตฝ เดชเดฑเดฏเตเดจเตเดจ เด’เดฐเต เดฌเตเดฒเต‹เด—เต เดŽเดดเตเดคเดฟ.

เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด•เดพเดฃเดพเดจเดพเด•เตเดจเตเดจเดคเตเดชเต‹เดฒเต†, เด‡เดคเต 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 เด‰เด‚ เดคเดฎเตเดฎเดฟเตฝ เด•เตเดฑเดžเตเดž เดตเตเดฏเดคเตเดฏเดพเดธเดฎเตเดฃเตเดŸเต.

PostgreSQL, ClickHouse, clickhousedb_fdw (PostgreSQL) เดŽเดจเตเดจเดฟเดตเดฏเดฟเดฒเต† เด…เดจเดฒเดฟเดฑเตเดฑเดฟเด•เตเด•เตฝ เด…เดจเตเดตเต‡เดทเดฃเด™เตเด™เดณเตเดŸเต† เดชเตเดฐเด•เดŸเดจเด‚ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเต

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 เดตเดดเดฟ เดŸเต†เดฒเดฟเด—เตเดฐเดพเด‚ เดšเดพเดฑเตเดฑเต https://t.me/clickhouse_ru
PostgreSQL เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดŸเต†เดฒเดฟเด—เตเดฐเดพเด‚ เดšเดพเดฑเตเดฑเต https://t.me/pgsql

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•