0Pricing
SQL Academy · บทเรียน

การรวมข้อมูลแบบต่อเนื่อง

รวมข้อมูลอนุกรมเวลาล่วงหน้าด้วย VIEW ที่จัดเก็บผลลัพธ์แบบ CONTINUOUS AGGREGATE และรีเฟรชแบบเพิ่มเฉพาะส่วน

การรวมข้อมูลแบบต่อเนื่อง เป็นบทเรียน SQL Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน SQL Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน

การรวมข้อมูลแบบต่อเนื่องคืออะไร

การรวมข้อมูลที่คำนวณไว้ล่วงหน้าและรีเฟรชเพิ่มทีละส่วนบนตารางไฮเปอร์ คล้ายกับมุมมองที่คำนวณไว้ล่วงหน้าซึ่งอัปเดตอย่างชาญฉลาดเมื่อมีข้อมูลใหม่เข้ามา

การสร้าง

ค่าเฉลี่ยรายชั่วโมงของอุปกรณ์:

CREATE MATERIALIZED VIEW metrics_hourly
WITH (timescaledb.continuous) AS
SELECT device_id,
       time_bucket('1 hour', ts) AS hour,
       AVG(value) AS avg_value,
       COUNT(*)   AS samples
FROM metrics
GROUP BY device_id, hour;

นโยบายการรีเฟรช

TimescaleDB จะรีเฟรชโดยอัตโนมัติ:

SELECT add_continuous_aggregate_policy('metrics_hourly',
  start_offset => INTERVAL '1 day',
  end_offset   => INTERVAL '1 hour',
  schedule_interval => INTERVAL '15 minutes');
-- Every 15 minutes, refresh the window from 1 day ago to 1 hour ago.

การสอบถาม

ใช้ SELECT ตามปกติ — TimescaleDB จะผสานข้อมูลที่คำนวณไว้ล่วงหน้ากับข้อมูลดิบสำหรับช่วงล่าสุดที่ยังไม่ได้คำนวณไว้ล่วงหน้า:

SELECT * FROM metrics_hourly
WHERE device_id = 42
  AND hour >= NOW() - INTERVAL '7 days'
ORDER BY hour;

การรวมข้อมูลแบบเรียลไทม์

โดยค่าเริ่มต้น การรวมข้อมูลแบบต่อเนื่องจะแสดงข้อมูลที่คำนวณไว้ล่วงหน้า PLUS ข้อมูลดิบสำหรับส่วนท้ายที่ยังไม่ได้คำนวณไว้ล่วงหน้า คุณจะเห็นค่าล่าสุดเสมอ โดยแลกกับการคำนวณส่วนท้ายทันทีระหว่างการใช้งาน

โหมดใช้เฉพาะข้อมูลที่คำนวณไว้ล่วงหน้า

สำหรับแดชบอร์ดที่คำนวณข้อมูลไว้ล่วงหน้าทั้งหมดแล้ว (ไม่มีการคำนวณทันทีระหว่างการใช้งาน) ให้ปิดการรวมข้อมูลแบบเรียลไทม์:

ALTER MATERIALIZED VIEW metrics_hourly
  SET (timescaledb.materialized_only = true);

การรวมข้อมูลหลายระดับ

สร้างจากรายชั่วโมง → รายวัน → รายเดือน:

-- daily aggregate from the hourly cagg
CREATE MATERIALIZED VIEW metrics_daily
WITH (timescaledb.continuous) AS
SELECT device_id, time_bucket('1 day', hour) AS day,
       AVG(avg_value) AS avg_value
FROM metrics_hourly
GROUP BY device_id, day;

การบีบอัดตารางไฮเปอร์ไม่ขัดขวางการรวมข้อมูล

คุณสามารถบีบอัดตารางไฮเปอร์พื้นฐานได้ การรวมข้อมูลแบบต่อเนื่องจะยังทำงานต่อไป

เมื่อการรวมข้อมูลแบบต่อเนื่องดีกว่ามุมมองที่คำนวณไว้ล่วงหน้า

  • ข้อมูลอนุกรมเวลา: มีความหมายด้านเวลาในตัว
  • รีเฟรชเพิ่มทีละส่วน — ไม่ต้องสแกนประวัติทั้งหมดใหม่
  • ผสานส่วนท้ายแบบเรียลไทม์
  • การรวมข้อมูลแบบหลายระดับ

ความเข้ากันได้

การรวมข้อมูลแบบต่อเนื่องทำงานบนตารางไฮเปอร์ของ TimescaleDB สำหรับ PostgreSQL ที่ไม่ใช่ TS คุณต้องสร้างมุมมองที่คำนวณไว้ล่วงหน้าและตรรกะการรีเฟรชขึ้นเอง

การเติมข้อมูลย้อนหลัง

รีเฟรชข้อมูลในอดีตด้วยตนเองหากคุณเปลี่ยนนิยามของการรวมข้อมูล:

CALL refresh_continuous_aggregate('metrics_hourly',
  NULL, NOW());
-- Recompute from the beginning of time.

สรุปทบทวน

การรวมข้อมูลแบบต่อเนื่องคือมุมมองข้อมูลอนุกรมเวลาที่คำนวณไว้ล่วงหน้า

  • กำหนดด้วย WITH (timescaledb.continuous)
  • นโยบายรีเฟรชอัตโนมัติ
  • การผสานข้อมูลแบบเรียลไทม์กับข้อมูลที่คำนวณไว้ล่วงหน้า
  • วางการรวมข้อมูลรายวันหรือรายสัปดาห์ซ้อนบนการรวมข้อมูลรายชั่วโมง

ตรวจสอบอย่างรวดเร็ว

เหตุใดการรวมข้อมูลแบบต่อเนื่องของ TimescaleDB จึงรีเฟรชได้อย่างมีประสิทธิภาพกว่า REFRESH MATERIALIZED VIEW

คำถามที่พบบ่อย

บทเรียน “การรวมข้อมูลแบบต่อเนื่อง” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การรวมข้อมูลแบบต่อเนื่อง” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส SQL Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การรวมข้อมูลแบบต่อเนื่อง”

รวมข้อมูลอนุกรมเวลาล่วงหน้าด้วย VIEW ที่จัดเก็บผลลัพธ์แบบ CONTINUOUS AGGREGATE และรีเฟรชแบบเพิ่มเฉพาะส่วน คุณปฏิบัติ SQL Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน SQL Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน SQL Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “การรวมข้อมูลแบบต่อเนื่อง” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน SQL Academy นี้ได้ไหม

ได้ บทเรียน SQL Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ตารางไฮเปอร์ของ TimescaleDB
  2. การรวมข้อมูลแบบต่อเนื่อง
  3. นโยบายการบีบอัดและการเก็บรักษา
  4. การเลือกดัชนีสำหรับอนุกรมเวลา
← กลับไปที่ SQL Academy