PostgreSQL, ClickHouse เจ…เจคเฉ‡ clickhousedb_fdw (PostgreSQL) เจตเจฟเฉฑเจš เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃเจพเจคเจฎเจ• เจธเจตเจพเจฒเจพเจ‚ เจฆเฉ‡ เจชเฉเจฐเจฆเจฐเจธเจผเจจ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเจจเจพ

เจ‡เจธ เจ…เจงเจฟเจเจจ เจตเจฟเฉฑเจš, เจฎเฉˆเจ‚ เจ‡เจน เจฆเฉ‡เจ–เจฃเจพ เจšเจพเจนเฉเฉฐเจฆเจพ เจธเฉ€ เจ•เจฟ PostgreSQL เจฆเฉ€ เจฌเจœเจพเจ เจ‡เฉฑเจ• ClickHouse เจกเฉ‡เจŸเจพ เจธเจฐเฉ‹เจค เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจชเฉเจฐเจฆเจฐเจธเจผเจจ เจตเจฟเฉฑเจš เจ•เจฟเจนเฉœเฉ‡ เจธเฉเจงเจพเจฐ เจ•เฉ€เจคเฉ‡ เจœเจพ เจธเจ•เจฆเฉ‡ เจนเจจเฅค เจฎเฉˆเจจเฉ‚เฉฐ เจ•เจฒเจฟเจ•เจนเจพเจŠเจธ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจคเฉ‹เจ‚ เจชเฉเจฐเจพเจชเจค เจ‰เจคเจชเจพเจฆเจ•เจคเจพ เจฒเจพเจญเจพเจ‚ เจฌเจพเจฐเฉ‡ เจชเจคเจพ เจนเฉˆเฅค เจ•เฉ€ เจ‡เจน เจฒเจพเจญ เจœเจพเจฐเฉ€ เจฐเจนเจฟเจฃเจ—เฉ‡ เจœเฉ‡เจ•เจฐ เจฎเฉˆเจ‚ เจ‡เฉฑเจ• เจตเจฟเจฆเฉ‡เจธเจผเฉ€ เจกเฉ‡เจŸเจพ เจฐเฉˆเจชเจฐ (FDW) เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ PostgreSQL เจคเฉ‹เจ‚ เจ•เจฒเจฟเจ•เจนเจพเจŠเจธ เจคเฉฑเจ• เจชเจนเฉเฉฐเจš เจ•เจฐเจฆเจพ เจนเจพเจ‚?

เจ…เจงเจฟเจเจจ เจ•เฉ€เจคเฉ‡ เจ—เจ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจตเจพเจคเจพเจตเจฐเจฃ เจนเจจ PostgreSQL v11, clickhousedb_fdw เจ…เจคเฉ‡ ClickHouse เจกเฉ‡เจŸเจพเจฌเฉ‡เจธเฅค เจ†เจ–เจฐเจ•เจพเจฐ, PostgreSQL v11 เจคเฉ‹เจ‚ เจ…เจธเฉ€เจ‚ เจ†เจชเจฃเฉ‡ clickhousedb_fdw เจฆเฉเจ†เจฐเจพ เจ•เจฒเจฟเจ•เจนเจพเจŠเจธ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจคเฉฑเจ• เจฐเฉ‚เจŸ เจ•เฉ€เจคเฉ€เจ†เจ‚ เจตเฉฑเจ–-เจตเฉฑเจ– SQL เจชเฉเฉฑเจ›เจ—เจฟเฉฑเจ›เจพเจ‚ เจจเฉ‚เฉฐ เจšเจฒเจพเจตเจพเจ‚เจ—เฉ‡เฅค เจ…เจธเฉ€เจ‚ เจซเจฟเจฐ เจฆเฉ‡เจ–เจพเจ‚เจ—เฉ‡ เจ•เจฟ FDW เจฆเฉ€ เจ•เจพเจฐเจ—เฉเจœเจผเจพเจฐเฉ€ เจฎเฉ‚เจฒ PostgreSQL เจ…เจคเฉ‡ เจฎเฉ‚เจฒ เจ•เจฒเจฟเจ•เจนเจพเจŠเจธ เจตเจฟเฉฑเจš เจšเฉฑเจฒ เจฐเจนเฉ€เจ†เจ‚ เจ‡เฉฑเจ•เฉ‹ เจธเจตเจพเจฒเจพเจ‚ เจจเจพเจฒ เจ•เจฟเจตเฉ‡เจ‚ เจคเฉเจฒเจจเจพ เจ•เจฐเจฆเฉ€ เจนเฉˆเฅค

เจ•เจฒเจฟเจ•เจนเจพเจŠเจธ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ

เจ•เจฒเจฟเจ•เจนเจพเจŠเจธ เจ‡เฉฑเจ• เจ“เจชเจจ เจธเฉ‹เจฐเจธ เจ•เจพเจฒเจฎเจจเจฐ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจชเฉเจฐเจฌเฉฐเจงเจจ เจธเจฟเจธเจŸเจฎ เจนเฉˆ เจœเฉ‹ เจฐเจตเจพเจ‡เจคเฉ€ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจชเจนเฉเฉฐเจšเจพเจ‚ เจจเจพเจฒเฉ‹เจ‚ 100-1000 เจ—เฉเจฃเจพ เจคเฉ‡เจœเจผเฉ€ เจจเจพเจฒ เจชเฉเจฐเจฆเจฐเจธเจผเจจ เจจเฉ‚เฉฐ เจชเฉเจฐเจพเจชเจค เจ•เจฐ เจธเจ•เจฆเจพ เจนเฉˆ, เจ‡เฉฑเจ• เจธเจ•เจฟเฉฐเจŸ เจคเฉ‹เจ‚ เจตเฉ€ เจ˜เฉฑเจŸ เจธเจฎเฉ‡เจ‚ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจ…เจฐเจฌ เจคเฉ‹เจ‚ เจตเฉฑเจง เจ•เจคเจพเจฐเจพเจ‚ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจ•เจฐเจจ เจฆเฉ‡ เจธเจฎเจฐเฉฑเจฅ เจนเฉˆเฅค

Clickhousedb_fdw

clickhousedb_fdw - เจ•เจฒเจฟเจ•เจนเจพเจŠเจธ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ, เจœเจพเจ‚ FDW เจฒเจˆ เจฌเจพเจนเจฐเฉ€ เจกเจพเจŸเจพ เจฐเฉˆเจชเจฐ, เจชเจฐเจ•เฉ‹เจจเจพ เจฆเจพ เจ‡เฉฑเจ• เจ“เจชเจจ เจธเฉ‹เจฐเจธ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจนเฉˆเฅค เจ‡เฉฑเจฅเฉ‡ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจฆเฉ‡ GitHub เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจฒเจˆ เจ‡เฉฑเจ• เจฒเจฟเฉฐเจ• เจนเฉˆ.

เจฎเจพเจฐเจš เจตเจฟเฉฑเจš เจฎเฉˆเจ‚ เจ‡เฉฑเจ• เจฌเจฒเฉŒเจ— เจฒเจฟเจ–เจฟเจ† เจœเฉ‹ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจธเจพเจกเฉ‡ FDW เจฌเจพเจฐเฉ‡ เจนเฉ‹เจฐ เจฆเฉฑเจธเจฆเจพ เจนเฉˆ.

เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจคเฉเจธเฉ€เจ‚ เจฆเฉ‡เจ–เฉ‹เจ—เฉ‡, เจ‡เจน 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-เจ†เจฎ #45~16.04.1-Ubuntu
  • PostgreSQL: เจธเฉฐเจธเจ•เจฐเจฃ 11

เจฌเฉˆเจ‚เจšเจฎเจพเจฐเจ• เจŸเฉˆเจธเจŸ

เจ‡เจธ เจŸเฉˆเจธเจŸ เจฒเจˆ เจ•เฉเจ เจฎเจธเจผเฉ€เจจ เจฆเฉเจ†เจฐเจพ เจคเจฟเจ†เจฐ เจ•เฉ€เจคเฉ‡ เจกเฉ‡เจŸเจพ เจธเฉˆเฉฑเจŸ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเฉ€ เจฌเจœเจพเจ, เจ…เจธเฉ€เจ‚ 1987 เจคเฉ‹เจ‚ 2018 เจคเฉฑเจ• "เจธเจฎเฉ‡เจ‚ เจฆเฉ€ เจฐเจฟเจชเฉ‹เจฐเจŸ เจ•เฉ€เจคเฉ‡ เจ†เจชเจฐเฉ‡เจŸเจฐ เจŸเจพเจˆเจฎ เจฆเฉเจ†เจฐเจพ เจ‰เจคเจชเจพเจฆเจ•เจคเจพ" เจกเฉ‡เจŸเจพ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เฉ€เจคเฉ€เฅค เจคเฉเจธเฉ€เจ‚ เจกเฉ‡เจŸเจพ เจคเฉฑเจ• เจชเจนเฉเฉฐเจš เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจ‡เฉฑเจฅเฉ‡ เจ‰เจชเจฒเจฌเจง เจธเจพเจกเฉ€ เจธเจ•เฉเจฐเจฟเจชเจŸ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ.

เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจฆเจพ เจ†เจ•เจพเจฐ 85 GB เจนเฉˆ, 109 เจ•เจพเจฒเจฎเจพเจ‚ เจฆเฉ€ เจ‡เฉฑเจ• เจธเจพเจฐเจฃเฉ€ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจฆเจพ เจนเฉˆเฅค

เจฌเฉˆเจ‚เจšเจฎเจพเจฐเจ• เจธเจตเจพเจฒ

เจ‡เฉฑเจฅเฉ‡ เจ‰เจน เจธเจตเจพเจฒ เจนเจจ เจœเฉ‹ เจฎเฉˆเจ‚ ClickHouse, clickhousedb_fdw เจ…เจคเฉ‡ PostgreSQL เจฆเฉ€ เจคเฉเจฒเจจเจพ เจ•เจฐเจจ เจฒเจˆ เจตเจฐเจคเฉ€เจ†เจ‚ เจธเจจเฅค

Q#
เจชเฉเฉฑเจ›เจ—เจฟเฉฑเจ› เจตเจฟเฉฑเจš เจเจ—เจฐเฉ€เจ—เฉ‡เจŸเจธ เจ…เจคเฉ‡ เจ‡เจธ เจ…เจจเฉเจธเจพเจฐ เจธเจฎเฉ‚เจน เจธเจผเจพเจฎเจฒ เจนเจจ

Q1
เจนเจซเจคเฉ‡ เจฆเจพ เจฆเจฟเจจ เจšเฉเจฃเฉ‹, เจ“เจจเจŸเจพเจˆเจฎ เจคเฉ‹เจ‚ เจ—เจฟเจฃเฉ‹ (*) เจ•เจฟเฉฑเจฅเฉ‡ เจธเจพเจฒ >= 2000 เจ…เจคเฉ‡ เจธเจพเจฒ <= 2008 เจฆเจฟเจจ-เจ†เจซ เจนเจซเจคเฉ‡ เจฆเฉ‡ เจ•เฉเจฐเจฎ เจฆเฉเจ†เจฐเจพ c DESC เจฆเฉเจ†เจฐเจพ เจธเจฎเฉ‚เจน;

Q2
เจนเจซเจคเฉ‡ เจฆเจพ เจฆเจฟเจจ เจšเฉเจฃเฉ‹, เจ“เจจเจŸเจพเจˆเจฎ เจคเฉ‹เจ‚ เจ—เจฟเจฃเฉ‹ (*) เจ•เจฟเฉฑเจฅเฉ‡ DepDelay>10 เจ…เจคเฉ‡ เจธเจพเจฒ >= 2000 เจ…เจคเฉ‡ เจธเจพเจฒ <= 2008 เจ—เจฐเฉเฉฑเจช BY DayOfweek ORDER by c DESC;

Q3
เจฎเฉ‚เจฒ เจšเฉเจฃเฉ‹, เจ—เจฃเจจเจพ(*) เจ“เจจเจŸเจพเจˆเจฎ เจคเฉ‹เจ‚ c เจฆเฉ‡ เจคเฉŒเจฐ 'เจคเฉ‡ เจ•เจฐเฉ‹ เจœเจฟเฉฑเจฅเฉ‡ DepDelay>10 เจ…เจคเฉ‡ เจธเจพเจฒ >= 2000 เจ…เจคเฉ‡ เจธเจพเจฒ <= 2008 เจฎเฉ‚เจฒ เจ†เจฐเจกเจฐ เจฆเฉเจ†เจฐเจพ c DESC เจธเฉ€เจฎเจพ 10 เจฆเฉเจ†เจฐเจพ เจธเจฎเฉ‚เจน;

Q4
เจ•เฉˆเจฐเฉ€เจ…เจฐ เจšเฉเจฃเฉ‹, เจ—เจฟเจฃเจคเฉ€() เจ“เจจเจŸเจพเจˆเจฎ เจคเฉ‹เจ‚ เจ•เจฟเฉฑเจฅเฉ‡ DepDelay>10 เจ…เจคเฉ‡ เจธเจพเจฒ = 2007 เจ•เฉˆเจฐเฉ€เจ…เจฐ เจฆเฉเจ†เจฐเจพ เจ—เจฟเจฃเจจ เจฆเฉเจ†เจฐเจพ เจธเจฎเฉ‚เจน () DESC;

Q5
เจšเฉเจฃเฉ‹ a. เจ•เฉˆเจฐเฉ€เจ…เจฐ, c, c2, c1000/c2 เจคเฉ‹เจ‚ c3 เจตเจœเฉ‹เจ‚ (เจšเฉเจฃเฉ‹ เจ•เฉˆเจฐเฉ€เจ…เจฐ, เจ—เจฟเจฃเจคเฉ€() เจ“เจจเจŸเจพเจˆเจฎ เจคเฉ‹เจ‚ เจ•เจฟเฉฑเจฅเฉ‡ DepDelay>10 เจ…เจคเฉ‡ เจธเจพเจฒ = 2007 เจ•เฉˆเจฐเฉ€เจ…เจฐ เจฆเฉเจ†เจฐเจพ เจ—เจฐเฉเฉฑเจช ) เจ‡เฉฑเจ• เจ…เฉฐเจฆเจฐเฉ‚เจจเฉ€ เจœเฉเฉœเฉ‹ ( เจ•เฉˆเจฐเฉ€เจ…เจฐ เจจเฉ‚เฉฐ เจšเฉเจฃเฉ‹, เจ—เจฟเจฃเจคเฉ€ (*) เจ“เจจเจŸเจพเจˆเจฎ เจคเฉ‹เจ‚ c2 เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจœเจฟเฉฑเจฅเฉ‡ เจธเจพเจฒ = เจ•เฉˆเจฐเฉ€เจ…เจฐ เจฆเฉเจ†เจฐเจพ 2007 เจ—เจฐเฉเฉฑเจช) b a.Carrier=b.ORDERCarrier 'เจคเฉ‡ C3 DESC เจฆเฉเจ†เจฐเจพ;

Q6
เจšเฉเจฃเฉ‹ a. เจ•เฉˆเจฐเฉ€เจ…เจฐ, c, c2, c1000/c2 เจคเฉ‹เจ‚ c3 เจตเจœเฉ‹เจ‚ (เจšเฉเจฃเฉ‹ เจ•เฉˆเจฐเฉ€เจ…เจฐ, เจ—เจฟเจฃเจคเฉ€() เจ“เจจเจŸเจพเจˆเจฎ เจคเฉ‹เจ‚ เจ•เจฟเฉฑเจฅเฉ‡ DepDelay>10 เจ…เจคเฉ‡ เจธเจพเจฒ >= 2000 เจ…เจคเฉ‡ เจธเจพเจฒ <= เจ•เฉˆเจฐเฉ€เจ…เจฐ เจฆเฉเจ†เจฐเจพ 2008 เจ—เจฐเฉเฉฑเจช) เจ‡เฉฑเจ• เจ…เฉฐเจฆเจฐเฉ‚เจจเฉ€ เจœเฉเฉœเฉ‹ (เจ•เฉˆเจฐเฉ€เจ…เจฐ เจจเฉ‚เฉฐ เจšเฉเจฃเฉ‹, เจ—เจฟเจฃเจคเฉ€ (*) เจ“เจจเจŸเจพเจˆเจฎ เจคเฉ‹เจ‚ c2 เจตเจœเฉ‹เจ‚ เจœเจฟเฉฑเจฅเฉ‡ เจธเจพเจฒ >= 2000 เจ…เจคเฉ‡ เจธเจพเจฒ <= 2008 เจ•เฉˆเจฐเฉ€เจ…เจฐ ) b 'เจคเฉ‡ a.Carrier=b.C3 DESC เจฆเฉเจ†เจฐเจพ เจ•เฉˆเจฐเฉ€เจ…เจฐ เจ†เจฐเจกเจฐ;

Q7
เจ•เฉˆเจฐเฉ€เจ…เจฐ เจšเฉเจฃเฉ‹, เจ”เจธเจค(DepDelay) * 1000 AS c3 เจ“เจจเจŸเจพเจˆเจฎ เจคเฉ‹เจ‚ เจ•เจฟเฉฑเจฅเฉ‡ เจธเจพเจฒ >= 2000 เจ…เจคเฉ‡ เจธเจพเจฒ <= เจ•เฉˆเจฐเฉ€เจ…เจฐ เจฆเฉเจ†เจฐเจพ 2008 เจ—เจฐเฉเฉฑเจช;

Q8
เจธเจพเจฒ เจšเฉเจฃเฉ‹, เจ”เจจเจŸเจพเจˆเจฎ เจคเฉ‹เจ‚ เจ”เจธเจค(DepDelay) เจธเจพเจฒ เจ…เจจเฉเจธเจพเจฐ เจ—เจฐเฉเฉฑเจช;

Q9
เจธเจพเจฒ เจšเฉเจฃเฉ‹, เจธเจพเจฒ เจฆเฉ‡ เจนเจฟเจธเจพเจฌ เจจเจพเจฒ เจ”เจจเจŸเจพเจˆเจฎ เจ—เจฐเฉเฉฑเจช เจคเฉ‹เจ‚ c1 เจตเจœเฉ‹เจ‚ เจ—เจฟเจฃเฉ‹;

Q10
เจ”เจจเจŸเจพเจˆเจฎ เจคเฉ‹เจ‚ เจ”เจธเจค (cnt) เจšเฉเจฃเฉ‹ (เจธเจพเจฒ, เจฎเจนเฉ€เจจเจพ, เจ—เจฟเจฃเจคเฉ€ (*) เจ”เจจเจŸเจพเจˆเจฎ เจคเฉ‹เจ‚ cnt เจฆเฉ‡ เจคเฉŒเจฐ 'เจคเฉ‡ เจšเฉเจฃเฉ‹ เจœเจฟเฉฑเจฅเฉ‡ DepDel15=1 เจธเจพเจฒ, เจฎเจนเฉ€เจจเฉ‡ เจฆเฉเจ†เจฐเจพ เจ—เจฐเฉเฉฑเจช) a;

Q11
(เจธเจพเจฒ,เจฎเจนเฉ€เจจเจพ,เจ—เจฟเจฃเจคเฉ€(*) เจคเฉ‹เจ‚ เจ”เจจเจŸเจพเจˆเจฎ เจ—เจฐเฉเฉฑเจช เจคเฉ‹เจ‚ c1 เจตเจœเฉ‹เจ‚ เจธเจพเจฒ,เจฎเจนเฉ€เจจเฉ‡ เจฆเฉ€ เจšเฉ‹เจฃ เจ•เจฐเฉ‹) a;

Q12
OriginCityName, DestCityName, เจ—เจฃเจจเจพ(*) เจจเฉ‚เฉฐ เจ“เจจเจŸเจพเจˆเจฎ เจคเฉ‹เจ‚ เจšเฉเจฃเฉ‹, เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจฎเฉ‚เจฒ เจธเจผเจนเจฟเจฐ เจฆเฉ‡ เจจเจพเจฎ เจฆเฉเจ†เจฐเจพ เจ—เจฐเฉเฉฑเจช, C DESC เจธเฉ€เจฎเจพ 10 เจฆเฉเจ†เจฐเจพ DestCityName เจ†เจฐเจกเจฐ;

Q13
OriginCityName เจจเฉ‚เฉฐ เจšเฉเจฃเฉ‹, C DESC LIMIT 10 เจฆเฉเจ†เจฐเจพ OriginCityName เจฆเฉ‡ เจ†เจฐเจกเจฐ เจฆเฉเจ†เจฐเจพ เจ“เจจเจŸเจพเจˆเจฎ เจ—เจฐเฉเฉฑเจช เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจ—เจฟเจฃเจคเฉ€(*);

เจชเฉเฉฑเจ›เจ—เจฟเฉฑเจ› เจตเจฟเฉฑเจš เจธเจผเจพเจฎเจฒ เจนเจจ

Q14
เจšเฉเจฃเฉ‹ a.Year, c1/c2 FROM ( เจธเจพเจฒ เจšเฉเจฃเฉ‹, เจ—เจฟเจฃเจคเฉ€()1000 เจ“เจจเจŸเจพเจˆเจฎ เจคเฉ‹เจ‚ c1 เจฆเฉ‡ เจคเฉŒเจฐ 'เจคเฉ‡ เจœเจฟเฉฑเจฅเฉ‡ DepDelay>เจธเจพเจฒ เจฆเฉ‡ เจนเจฟเจธเจพเจฌ เจจเจพเจฒ 10 เจ—เจฐเฉเฉฑเจช) เจ‡เฉฑเจ• เจ…เฉฐเจฆเจฐเฉ‚เจจเฉ€ เจœเฉเฉœเฉ‹ (เจธเจพเจฒ เจšเฉเจฃเฉ‹, เจ—เจฟเจฃเจคเฉ€ (*) c2 เจฆเฉ‡ เจคเฉŒเจฐ 'เจคเฉ‡ เจ†เจจเจŸเจพเจˆเจฎ เจ—เจฐเฉเฉฑเจช เจคเฉ‹เจ‚ เจธเจพเจฒ เจฆเฉ‡ เจนเจฟเจธเจพเจฌ เจจเจพเจฒ) b เจจเฉ‚เฉฐ a.Year=b.year ORDER BY a.Year;

Q15
เจšเฉเจฃเฉ‹ a."เจธเจพเจฒ", c1/c2 FROM ("เจธเจพเจฒ" เจšเฉเจฃเฉ‹, เจ—เจฟเจฃเจคเฉ€()1000 เจซเฉŒเจ‚เจŸเจพเจˆเจฎ เจคเฉ‹เจ‚ c1 เจฆเฉ‡ เจคเฉŒเจฐ 'เจคเฉ‡ เจœเจฟเฉฑเจฅเฉ‡ โ€œDepDelayโ€>10 GROUP BY โ€œYearโ€) เจ‡เฉฑเจ• เจ…เฉฐเจฆเจฐเฉ‚เจจเฉ€ เจœเฉเฉœเฉ‹ (โ€œเจธเจพเจฒโ€ เจจเฉ‚เฉฐ เจšเฉเจฃเฉ‹, โ€œเจธเจพเจฒโ€ เจฆเฉเจ†เจฐเจพ เจซเฉŒเจ‚เจŸเจพเจˆเจฎ เจ—เจฐเฉเฉฑเจช เจคเฉ‹เจ‚ c2 เจตเจœเฉ‹เจ‚ เจ—เจฟเจฃเฉ‹ (*) ) a.โ€Yearโ€=b เจ‰เฉฑเจคเฉ‡เฅค "เจธเจพเจฒ";

เจธเจพเจฐเจฃเฉ€-1: เจฌเฉˆเจ‚เจšเจฎเจพเจฐเจ• เจตเจฟเฉฑเจš เจตเจฐเจคเฉ‡ เจ—เจ เจธเจตเจพเจฒ

เจชเฉเฉฑเจ›เจ—เจฟเฉฑเจ› เจ…เจฎเจฒเจพเจ‚

เจตเฉฑเจ–-เจตเฉฑเจ– เจกเจพเจŸเจพเจฌเฉ‡เจธ เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจตเจฟเฉฑเจš เจšเฉฑเจฒเจฃ เจตเฉ‡เจฒเฉ‡ เจนเจฐเฉ‡เจ• เจธเจตเจพเจฒ เจฆเฉ‡ เจจเจคเฉ€เจœเฉ‡ เจ‡เฉฑเจฅเฉ‡ เจฆเจฟเฉฑเจคเฉ‡ เจ—เจ เจนเจจ: PostgreSQL เจธเจฎเฉ‡เจค เจ…เจคเฉ‡ เจฌเจฟเจจเจพเจ‚ เจธเฉ‚เจšเจ•เจพเจ‚เจ•, เจฎเฉ‚เจฒ เจ•เจฒเจฟเจ•เจนเจพเจŠเจธ เจ…เจคเฉ‡ 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 เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจชเฉ‹เจธเจŸเจ—เฉเจฐเฉ‡เจธ เจคเฉ‹เจ‚ เจชเฉเจฐเจพเจชเจค เจ•เฉ€เจคเฉ‡ เจ•เจฒเจฟเจ•เจนเจพเจŠเจธ เจจเจคเฉ€เจœเฉ‡ เจ…เจคเฉ‡ เจกเฉ‡เจŸเจพ เจฆเจฟเจ–เจพเจ‡เจ† เจ—เจฟเจ† เจนเฉˆเฅค เจธเจพเจฐเจฃเฉ€ เจคเฉ‹เจ‚ เจคเฉเจธเฉ€เจ‚ เจฆเฉ‡เจ– เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจ•เจฟ PostgreSQL เจ…เจคเฉ‡ ClickHouse เจตเจฟเจšเจ•เจพเจฐ เจฌเจนเฉเจค เจตเฉฑเจกเจพ เจ…เฉฐเจคเจฐ เจนเฉˆ, เจชเจฐ Clickhouse เจ…เจคเฉ‡ clickhousedb_fdw เจตเจฟเจšเจ•เจพเจฐ เจฌเจนเฉเจค เจ˜เฉฑเจŸ เจ…เฉฐเจคเจฐ เจนเฉˆเฅค

PostgreSQL, ClickHouse เจ…เจคเฉ‡ clickhousedb_fdw (PostgreSQL) เจตเจฟเฉฑเจš เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃเจพเจคเจฎเจ• เจธเจตเจพเจฒเจพเจ‚ เจฆเฉ‡ เจชเฉเจฐเจฆเจฐเจธเจผเจจ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเจจเจพ

เจ‡เจน เจ—เฉเจฐเจพเจซ 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 เจนเฉˆเฅค เจ‡เจธ เจชเฉเฉฑเจ›เจ—เจฟเฉฑเจ› เจจเฉ‚เฉฐ เจกเฉ€เจฌเฉฑเจ— เจ•เจฐเจจ เจฒเจˆ เจฎเฉˆเจ‚ เจฆเฉ‹เจตเฉ‡เจ‚ เจธเจตเจพเจฒเจพเจ‚ เจฆเฉ€ เจตเจฟเจ†เจ–เจฟเจ† เจ•เจฐ เจฐเจฟเจนเจพ เจนเจพเจ‚ เจ…เจคเฉ‡ เจ‡เฉฑเจฅเฉ‡ เจตเจฟเจ†เจ–เจฟเจ† เจฆเฉ‡ เจจเจคเฉ€เจœเฉ‡ เจนเจจเฅค

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)

เจธเจฟเฉฑเจŸเจพ

เจ‡เจนเจจเจพเจ‚ เจชเฉเจฐเจฏเฉ‹เจ—เจพเจ‚ เจฆเฉ‡ เจจเจคเฉ€เจœเฉ‡ เจฆเจฐเจธเจพเจ‰เจ‚เจฆเฉ‡ เจนเจจ เจ•เจฟ เจ•เจฒเจฟเจ•เจนเจพเจŠเจธ เจ…เจธเจฒ เจตเจฟเฉฑเจš เจตเจงเฉ€เจ† เจชเฉเจฐเจฆเจฐเจธเจผเจจ เจฆเฉ€ เจชเฉ‡เจธเจผเจ•เจธเจผ เจ•เจฐเจฆเจพ เจนเฉˆ, เจ…เจคเฉ‡ clickhousedb_fdw PostgreSQL เจคเฉ‹เจ‚ Clickhouse เจฆเฉ‡ เจชเฉเจฐเจฆเจฐเจธเจผเจจ เจฒเจพเจญเจพเจ‚ เจฆเฉ€ เจชเฉ‡เจธเจผเจ•เจธเจผ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจœเจฆเฉ‹เจ‚ เจ•เจฟ clickhousedb_fdw เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจธเจฎเฉ‡เจ‚ เจ•เฉเจ เจ“เจตเจฐเจนเฉˆเฉฑเจก เจนเฉเฉฐเจฆเจพ เจนเฉˆ, เจ‡เจน เจ•เจฒเจฟเจ•เจนเจพเจŠเจธ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ 'เจคเฉ‡ เจจเฉ‡เจŸเจฟเจต เจคเฉŒเจฐ 'เจคเฉ‡ เจšเจฒเจพเจ‰เจฃ เจฆเฉเจ†เจฐเจพ เจชเฉเจฐเจพเจชเจค เจ•เฉ€เจคเฉ€ เจ•เจพเจฐเจ—เฉเจœเจผเจพเจฐเฉ€ เจฆเฉ‡ เจฎเฉเจ•เจพเจฌเจฒเฉ‡ เจฌเจนเฉเจค เจ˜เฉฑเจŸ เจ…เจคเฉ‡ เจคเฉเจฒเจจเจพเจคเจฎเจ• เจนเฉˆเฅค เจ‡เจน เจ‡เจน เจตเฉ€ เจชเฉเจธเจผเจŸเฉ€ เจ•เจฐเจฆเจพ เจนเฉˆ เจ•เจฟ PostgreSQL เจตเจฟเฉฑเจš fdw เจธเจผเจพเจจเจฆเจพเจฐ เจจเจคเฉ€เจœเฉ‡ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจฆเจพ เจนเฉˆเฅค

เจ•เจฒเจฟเจ•เจนเจพเจŠเจธ เจฐเจพเจนเฉ€เจ‚ เจŸเฉˆเจฒเฉ€เจ—เฉเจฐเจพเจฎ เจšเฉˆเจŸ https://t.me/clickhouse_ru
PostgreSQL เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจŸเฉˆเจฒเฉ€เจ—เฉเจฐเจพเจฎ เจšเฉˆเจŸ https://t.me/pgsql

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹