การรวมข้อมูลแบบต่อเนื่อง
รวมข้อมูลอนุกรมเวลาล่วงหน้าด้วย 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ตารางไฮเปอร์ของ TimescaleDB
- การรวมข้อมูลแบบต่อเนื่อง
- นโยบายการบีบอัดและการเก็บรักษา
- การเลือกดัชนีสำหรับอนุกรมเวลา