แƒแƒœแƒแƒšแƒ˜แƒขแƒ˜แƒ™แƒฃแƒ แƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒขแƒ”แƒกแƒขแƒ˜แƒ แƒ”แƒ‘แƒ PostgreSQL, ClickHouse แƒ“แƒ clickhousedb_fdw (PostgreSQL)

แƒแƒ› แƒ™แƒ•แƒšแƒ”แƒ•แƒแƒจแƒ˜ แƒ›แƒ˜แƒœแƒ“แƒแƒ“แƒ แƒ›แƒ”แƒœแƒแƒฎแƒ, แƒ—แƒฃ แƒ แƒ แƒ’แƒแƒฃแƒ›แƒฏแƒแƒ‘แƒ”แƒกแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒฆแƒฌแƒ”แƒ•แƒ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒแƒ“แƒ ClickHouse แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒฌแƒงแƒแƒ แƒแƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—, แƒ•แƒ˜แƒ“แƒ แƒ” PostgreSQL. แƒ›แƒ” แƒ•แƒ˜แƒชแƒ˜ แƒžแƒ แƒแƒ“แƒฃแƒฅแƒขแƒ˜แƒฃแƒšแƒแƒ‘แƒ˜แƒก แƒกแƒแƒ แƒ’แƒ”แƒ‘แƒ”แƒšแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒ•แƒ˜แƒฆแƒ”แƒ‘ ClickHouse-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—. แƒ’แƒแƒ’แƒ แƒซแƒ”แƒšแƒ“แƒ”แƒ‘แƒ แƒ—แƒฃ แƒแƒ แƒ แƒ”แƒก แƒจแƒ”แƒฆแƒแƒ•แƒแƒ—แƒ”แƒ‘แƒ˜, แƒ—แƒฃ แƒ›แƒ” แƒ›แƒ˜แƒ•แƒ›แƒแƒ แƒ—แƒแƒ• ClickHouse-แƒก PostgreSQL-แƒ“แƒแƒœ แƒฃแƒชแƒฎแƒแƒฃแƒ แƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒจแƒ”แƒคแƒฃแƒ—แƒ•แƒ˜แƒก (FDW) แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—?

แƒจแƒ”แƒกแƒฌแƒแƒ•แƒšแƒ˜แƒšแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒ›แƒ แƒแƒ แƒ˜แƒก PostgreSQL v11, clickhousedb_fdw แƒ“แƒ ClickHouse แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒ. แƒกแƒแƒ‘แƒแƒšแƒแƒ แƒฏแƒแƒ›แƒจแƒ˜, PostgreSQL v11-แƒ“แƒแƒœ แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ•แƒฃแƒจแƒ•แƒ˜แƒ— แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ SQL แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒ’แƒแƒ“แƒแƒขแƒแƒœแƒ˜แƒšแƒ˜แƒ แƒฉแƒ•แƒ”แƒœแƒ˜ clickhousedb_fdw แƒ›แƒ”แƒจแƒ•แƒ”แƒแƒ‘แƒ˜แƒ— ClickHouse แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒแƒจแƒ˜. แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ“แƒแƒ•แƒ˜แƒœแƒแƒฎแƒแƒ•แƒ—, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒแƒ“แƒแƒ แƒ”แƒ‘แƒก FDW-แƒ˜แƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ›แƒแƒ•แƒ” แƒจแƒ”แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ”แƒ‘แƒก, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ›แƒจแƒแƒ‘แƒšแƒ˜แƒฃแƒ  PostgreSQL-แƒจแƒ˜ แƒ“แƒ แƒ›แƒจแƒแƒ‘แƒšแƒ˜แƒฃแƒ  ClickHouse-แƒจแƒ˜.

Clickhouse แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒ

ClickHouse แƒแƒ แƒ˜แƒก แƒฆแƒ˜แƒ แƒ™แƒแƒ“แƒ˜แƒก แƒกแƒ•แƒ”แƒขแƒแƒ•แƒแƒœแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒ˜แƒก แƒ›แƒแƒ แƒ—แƒ•แƒ˜แƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒ›แƒ˜แƒแƒฆแƒฌแƒ˜แƒแƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒแƒก 100-1000-แƒฏแƒ”แƒ  แƒฃแƒคแƒ แƒ แƒกแƒฌแƒ แƒแƒคแƒแƒ“, แƒ•แƒ˜แƒ“แƒ แƒ” แƒขแƒ แƒแƒ“แƒ˜แƒชแƒ˜แƒฃแƒšแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒ˜แƒก แƒ›แƒ˜แƒ“แƒ’แƒแƒ›แƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒ›แƒ˜แƒšแƒ˜แƒแƒ แƒ“แƒ–แƒ” แƒ›แƒ”แƒขแƒ˜ แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ˜แƒก แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ แƒฌแƒแƒ›แƒ–แƒ” แƒœแƒแƒ™แƒšแƒ”แƒ‘ แƒ“แƒ แƒแƒจแƒ˜.

Clickhousedb_fdw

clickhousedb_fdw - แƒ’แƒแƒ แƒ” แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒคแƒฃแƒ—แƒ•แƒ ClickHouse แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒแƒœ FDW, แƒแƒ แƒ˜แƒก แƒฆแƒ˜แƒ แƒ™แƒแƒ“แƒ˜แƒก แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜ Percona-แƒกแƒ’แƒแƒœ. แƒแƒฅ แƒแƒ แƒ˜แƒก แƒ‘แƒ›แƒฃแƒšแƒ˜ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก GitHub แƒกแƒแƒชแƒแƒ•แƒ—แƒแƒœ.

แƒ›แƒแƒ แƒขแƒจแƒ˜ แƒ“แƒแƒ•แƒฌแƒ”แƒ แƒ” แƒ‘แƒšแƒแƒ’แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฃแƒคแƒ แƒ แƒ›แƒ”แƒขแƒก แƒ’แƒ”แƒขแƒงแƒ•แƒ˜แƒ— แƒฉแƒ•แƒ”แƒœแƒ˜ FDW-แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘.

แƒ แƒแƒ’แƒแƒ แƒช แƒฎแƒ”แƒ“แƒแƒ•แƒ—, แƒ”แƒก แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒก ClickHouse-แƒก FDW-แƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒแƒซแƒšแƒ”แƒ•แƒก SELECT-แƒ“แƒแƒœ แƒ“แƒ แƒฉแƒแƒกแƒ•แƒแƒ— ClickHouse แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒ PostgreSQL v11 แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒ“แƒแƒœ.

FDW แƒ›แƒฎแƒแƒ แƒก แƒฃแƒญแƒ”แƒ แƒก แƒ›แƒแƒฌแƒ˜แƒœแƒแƒ•แƒ” แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒก, แƒ แƒแƒ’แƒแƒ แƒ˜แƒชแƒแƒ แƒแƒ’แƒ แƒ”แƒ’แƒแƒชแƒ˜แƒ แƒ“แƒ แƒจแƒ”แƒ”แƒ แƒ—แƒ”แƒ‘แƒ. แƒ”แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒœแƒแƒ“ แƒแƒฃแƒ›แƒฏแƒแƒ‘แƒ”แƒกแƒ”แƒ‘แƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒแƒก แƒ“แƒ˜แƒกแƒขแƒแƒœแƒชแƒ˜แƒฃแƒ แƒ˜ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒ แƒ”แƒกแƒฃแƒ แƒกแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— แƒแƒ› แƒ แƒ”แƒกแƒฃแƒ แƒกแƒ–แƒ” แƒ˜แƒœแƒขแƒ”แƒœแƒกแƒ˜แƒฃแƒ แƒ˜ แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.

แƒกแƒแƒแƒ แƒ˜แƒ”แƒœแƒขแƒแƒชแƒ˜แƒ แƒ’แƒแƒ แƒ”แƒ›แƒ

  • แƒกแƒฃแƒžแƒ”แƒ แƒ›แƒ˜แƒ™แƒ แƒ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜:
    • Intelยฎ Xeonยฎ CPU E5-2683 v3 @ 2.00 GHz
    • 2 แƒกแƒแƒ™แƒ”แƒขแƒ˜ / 28 แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜ / 56 แƒซแƒแƒคแƒ˜
    • แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ: 256 GB แƒแƒžแƒ”แƒ แƒแƒขแƒ˜แƒฃแƒšแƒ˜ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ
    • แƒจแƒ”แƒœแƒแƒฎแƒ•แƒ: Samsung SM863 1.9TB Enterprise SSD
    • แƒคแƒแƒ˜แƒšแƒฃแƒ แƒ˜ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ: ext4/xfs
  • แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒฃแƒšแƒ˜ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ: 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
SELECT DayOfWeek, count(*) AS c FROM ontime WHERE แƒฌแƒ”แƒšแƒ˜ >= 2000 แƒ“แƒ แƒฌแƒ”แƒšแƒ˜ <= 2008 GROUP BY DayOfWeek ORDER BY c DESC;

Q2
SELECT DayOfWeek, count(*) AS c FROM ontime WHERE DepDelay>10 AND Year >= 2000 AND Year <= 2008 GROUP BY DayOfWeek ORDER BY c DESC;

Q3
SELECT Origin, count(*) AS c FROM ontime WHERE DepDelay>10 AND Year >= 2000 AND Year <= 2008 GROUP BY Origin ORDER BY c DESC LIMIT 10;

Q4
แƒแƒ˜แƒ แƒฉแƒ˜แƒ”แƒ— แƒแƒžแƒ”แƒ แƒแƒขแƒแƒ แƒ˜, แƒ“แƒแƒ—แƒ•แƒแƒšแƒ”แƒ—() FROM ontime WHERE DepDelay>10 แƒ“แƒ แƒฌแƒ”แƒšแƒ˜ = 2007 แƒฏแƒ’แƒฃแƒคแƒ˜ แƒแƒžแƒ”แƒ แƒแƒขแƒแƒ แƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ— แƒจแƒ”แƒ™แƒ•แƒ”แƒ—แƒ แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ— () DESC;

Q5
SELECT a.Carrier, c, c2, c1000/c2 แƒ แƒแƒ’แƒแƒ แƒช c3 FROM ( SELECT Carrier, count() AS c FROM ontime WHERE DepDelay>10 AND Year=2007 GROUP BY Carrier ) a INNER JOIN ( SELECT Carrier,count(*) AS c2 FROM ontime WHERE Year=2007 GROUP BY Carrier)b on a.Carrier=b.ORDER BY c3 DESC;

Q6
SELECT a.Carrier, c, c2, c1000/c2 แƒ แƒแƒ’แƒแƒ แƒช c3 FROM ( SELECT Carrier, count() AS c FROM ontime WHERE DepDelay>10 AND Year >= 2000 AND Year <= 2008 GROUP BY Carrier) a INNER JOIN ( SELECT Carrier, count(*) AS c2 FROM ontime WHERE Year >= 2000 AND Year GROUP BY <= 2008 Carrier ) b on a.Carrier=b.Carrier ORDER BY c3 DESC;

Q7
SELECT Carrier, avg(DepDelay) * 1000 AS c3 FROM ontime WHERE แƒฌแƒ”แƒšแƒ˜ >= 2000 แƒ“แƒ แƒฌแƒ”แƒšแƒ˜ <= 2008 GROUP BY Carrier;

Q8
SELECT แƒฌแƒ”แƒšแƒ˜, แƒกแƒแƒจแƒฃแƒแƒšแƒ (DepDelay) FROM ontime GROUP BY Year;

Q9
แƒแƒ˜แƒ แƒฉแƒ˜แƒ”แƒ— แƒฌแƒ”แƒšแƒ˜, แƒ“แƒแƒ˜แƒ—แƒ•แƒแƒšแƒ”แƒ—(*) แƒ แƒแƒ’แƒแƒ แƒช c1 แƒ“แƒ แƒแƒ˜แƒ—แƒ˜ แƒฏแƒ’แƒฃแƒคแƒ˜แƒ“แƒแƒœ แƒฌแƒšแƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ—;

Q10
SELECT avg(cnt) FROM (SELECT แƒฌแƒ”แƒšแƒ˜, แƒ—แƒ•แƒ”, แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ(*) AS cnt FROM ontime WHERE DepDel15=1 GROUP BY BY, Month) a;

Q11
แƒแƒ˜แƒ แƒฉแƒ˜แƒ”แƒ— avg(c1) from (แƒแƒ˜แƒ แƒฉแƒ˜แƒ”แƒ— แƒฌแƒ”แƒšแƒ˜, แƒ—แƒ•แƒ”, แƒ“แƒแƒ—แƒ•แƒšแƒ (*) แƒ แƒแƒ’แƒแƒ แƒช c1 แƒ“แƒ แƒแƒ˜แƒ—แƒ˜ แƒฏแƒ’แƒฃแƒคแƒ˜แƒ“แƒแƒœ แƒฌแƒšแƒ˜แƒก, แƒ—แƒ•แƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ—) a;

Q12
SELECT OriginCityName, DestCityName, count(*) AS c FROM ontime GROUP BY OriginCityName, DestCityName ORDER BY c DESC LIMIT 10;

Q13
SELECT OriginCityName, count(*) AS c FROM ontime GROUP BY OriginCityName ORDER BY c DESC LIMIT 10;

แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒจแƒ”แƒ”แƒ แƒ—แƒ”แƒ‘แƒ”แƒ‘แƒก

Q14
SELECT a.Year, c1/c2 FROM ( แƒแƒ˜แƒ แƒฉแƒ˜แƒ”แƒ— แƒฌแƒ”แƒšแƒ˜, แƒ“แƒแƒ—แƒ•แƒšแƒ()1000 แƒ แƒแƒ’แƒแƒ แƒช c1 แƒ“แƒ แƒแƒ˜แƒ“แƒแƒœ WHERE DepDelay>10 GROUP BY By Year) แƒจแƒ˜แƒ“แƒ แƒจแƒ”แƒ”แƒ แƒ—แƒ”แƒ‘แƒ (แƒแƒ˜แƒ แƒฉแƒ˜แƒ”แƒ— แƒฌแƒ”แƒšแƒ˜, แƒ“แƒแƒ˜แƒ—แƒ•แƒแƒšแƒ”แƒ— (*) แƒ แƒแƒ’แƒแƒ แƒช c2 แƒ“แƒ แƒแƒ˜แƒ“แƒแƒœ GROUP BY By Year ) b on a.Year=b.Year ORDER BY A.Year;

Q15
SELECT a.โ€Yearโ€, c1/c2 FROM ( แƒแƒ˜แƒ แƒฉแƒ˜แƒ”แƒ— โ€œYearโ€, count()1000 แƒ แƒแƒ’แƒแƒ แƒช c1 FROM fontime WHERE โ€œDepDelayโ€>10 GROUP BY โ€œYearโ€) แƒจแƒ˜แƒ“แƒ แƒจแƒ”แƒ”แƒ แƒ—แƒ”แƒ‘แƒ (แƒแƒ˜แƒ แƒฉแƒ˜แƒ”แƒ— โ€œYearโ€, แƒ“แƒแƒ˜แƒ—แƒ•แƒแƒšแƒ”แƒ—(*) แƒ แƒแƒ’แƒแƒ แƒช c2 FROM fontime GROUP BY โ€œYearโ€ ) b on a.โ€Yearโ€=b. "แƒฌแƒ”แƒšแƒ˜";

แƒชแƒฎแƒ แƒ˜แƒšแƒ˜-1: แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ‘แƒ”แƒœแƒฉแƒ›แƒแƒ แƒ™แƒจแƒ˜

แƒจแƒ”แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ˜แƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ

แƒแƒฅ แƒ›แƒแƒชแƒ”แƒ›แƒฃแƒšแƒ˜แƒ แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒจแƒ”แƒ“แƒ”แƒ’แƒ”แƒ‘แƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒ˜แƒก แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒจแƒ˜ แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒกแƒแƒก: PostgreSQL แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ”แƒ‘แƒ˜แƒ— แƒ“แƒ แƒ›แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”, แƒ›แƒจแƒแƒ‘แƒšแƒ˜แƒฃแƒ แƒ˜ ClickHouse แƒ“แƒ clickhousedb_fdw. แƒ“แƒ แƒ แƒœแƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ˜แƒ แƒ›แƒ˜แƒšแƒ˜แƒฌแƒแƒ›แƒ”แƒ‘แƒจแƒ˜.

Q#
PostgreSQL
PostgreSQL (แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜)
clickhouse
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 แƒฆแƒ”แƒ แƒซแƒ˜ แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒแƒก แƒ›แƒ˜แƒšแƒ˜แƒฌแƒแƒ›แƒ”แƒ‘แƒจแƒ˜. แƒœแƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ˜แƒ ClickHouse-แƒ˜แƒก แƒจแƒ”แƒ“แƒ”แƒ’แƒ”แƒ‘แƒ˜ แƒ“แƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ postgres-แƒ“แƒแƒœ 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 แƒแƒ  แƒฉแƒแƒ›แƒแƒ“แƒ˜แƒก ClickHouse-แƒ–แƒ”.

แƒชแƒฎแƒ แƒ˜แƒšแƒจแƒ˜ 2 แƒฉแƒ•แƒ”แƒœ แƒ•แƒฎแƒ”แƒ“แƒแƒ•แƒ— แƒ“แƒ แƒแƒ˜แƒก แƒœแƒแƒฎแƒขแƒแƒ›แƒก Q12 แƒ“แƒ Q13 แƒจแƒ”แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ”แƒ‘แƒจแƒ˜. แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ”แƒ แƒ—แƒฎแƒ”แƒš, แƒ”แƒก แƒ’แƒแƒ›แƒแƒฌแƒ•แƒ”แƒฃแƒšแƒ˜แƒ ORDER BY แƒžแƒฃแƒœแƒฅแƒขแƒ˜แƒ—. แƒแƒ›แƒ˜แƒก แƒ“แƒแƒกแƒแƒ“แƒแƒกแƒขแƒฃแƒ แƒ”แƒ‘แƒšแƒแƒ“ แƒ›แƒ” แƒจแƒ”แƒ•แƒแƒกแƒ แƒฃแƒšแƒ” แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜ Q-14 แƒ“แƒ Q-15 ORDER BY แƒžแƒฃแƒœแƒฅแƒขแƒ˜แƒ— แƒ“แƒ แƒ›แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”. 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: แƒจแƒ”แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ ORDER BY แƒžแƒฃแƒœแƒฅแƒขแƒ˜แƒ—

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: แƒจแƒ”แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ˜แƒก แƒ’แƒ”แƒ’แƒ›แƒ 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 แƒ’แƒ—แƒแƒ•แƒแƒ–แƒแƒ‘แƒ— ClickHouse-แƒ˜แƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒ แƒ’แƒ”แƒ‘แƒ”แƒšแƒก PostgreSQL-แƒ“แƒแƒœ. แƒ›แƒ˜แƒฃแƒฎแƒ”แƒ“แƒแƒ•แƒแƒ“ แƒ˜แƒ›แƒ˜แƒกแƒ, แƒ แƒแƒ› clickhousedb_fdw-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒกแƒแƒก แƒแƒ แƒ˜แƒก แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒ˜ แƒ–แƒ”แƒ“แƒœแƒแƒ“แƒ”แƒ‘แƒ˜, แƒ˜แƒก แƒฃแƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ แƒ“แƒ แƒจแƒ”แƒ“แƒแƒ แƒ”แƒ‘แƒแƒ“แƒ˜แƒ ClickHouse แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒแƒจแƒ˜ แƒ›แƒจแƒแƒ‘แƒšแƒ˜แƒฃแƒ แƒแƒ“ แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒ— แƒ›แƒ˜แƒฆแƒฌแƒ”แƒฃแƒš แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒแƒกแƒ—แƒแƒœ. แƒ”แƒก แƒแƒกแƒ”แƒ•แƒ” แƒแƒ“แƒแƒกแƒขแƒฃแƒ แƒ”แƒ‘แƒก, แƒ แƒแƒ› fdw PostgreSQL-แƒจแƒ˜ แƒ˜แƒซแƒšแƒ”แƒ•แƒ แƒจแƒ”แƒกแƒแƒœแƒ˜แƒจแƒœแƒแƒ• แƒจแƒ”แƒ“แƒ”แƒ’แƒ”แƒ‘แƒก.

Telegram แƒฉแƒแƒขแƒ˜ Clickhouse-แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ— https://t.me/clickhouse_ru
Telegram แƒฉแƒแƒขแƒ˜ PostgreSQL-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— https://t.me/pgsql

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ