ฉันมีสแนปชอตของฐานข้อมูลที่ไม่ใช่ชุดเวลา ตัวอย่างเช่น:
ภาพรวมวันที่ 1:
+----+---------------+------------+------------+ | ID | Title | Category | Date | +----+---------------+------------+------------+ | 1 | My First Post | helloworld | 2015-01-01 | +----+---------------+------------+------------+
Snapshot day 2 (มีการโพสต์ใหม่ในวันนี้):
+----+----------------+------------+------------+ | ID | Title | Category | Date | +----+----------------+------------+------------+ | 1 | My first post | helloworld | 2015-01-01 | | 2 | My second post | other | 2015-01-02 | +----+----------------+------------+------------+
Snapshot วัน 3 (ลบโพสต์ 2 วันนี้):
+----+---------------+------------+------------+ | ID | Title | Category | Date | +----+---------------+------------+------------+ | 1 | My First Post | helloworld | 2015-01-01 | +----+---------------+------------+------------+
ดังนั้นระหว่างวันแถวของตารางอาจมีค่าคงที่หรือไม่ก็ได้ ตอนนี้ฉันต้องสามารถใช้แบบสอบถามเช่นนี้:
SELECT category, COUNT(*) from day1.My_table group by category
นี่คือหนึ่งตารางของหนึ่งวัน หากเราต้องการนับค่าเฉลี่ยของการโพสต์รายวันตามหมวดหมู่ในหนึ่งเดือนเราควรทำสิ่งต่อไปนี้:
SELECT category, SUM(cnt) / 30
from (
SELECT category, COUNT(*) as cnt
from day1.My_table
group by category
UNION ALL SELECT category, COUNT(*) as cnt
from day2.My_table
group by category
UNION ALL ...
UNION ALL SELECT category, COUNT(*) as cnt
from day30.My_table
group by category
) group by category
ตัวอย่างอื่นจำนวนโพสต์ที่เผยแพร่ในหนึ่งเดือน :
SELECT COUNT(distinct id)
from (
SELECT id
from day1.My_table
UNION ALL ...
UNION ALL SELECT id
from day30.My_table
)
โดยทั่วไปเราจะต้องพิจารณาน้ำหนัก หากเรามี day1.My_table และ day5.My_table ทุกโพสต์ที่อยู่ใน day1 และไม่ใช่ใน day5 จะถูกนับเช่นเดียวกับใน 2,3,4 วัน ทุกโพสต์ที่เป็น day1 และ day5 จะถูกนับว่าอยู่ในทุก ๆ วันของเดือน (= จนถึงสแน็ปช็อตถัดไป)
ดังนั้นในกรณีที่ฉันต้องการพิจารณาจำนวนโพสต์เฉลี่ยต่อวันของ> = 6 เดือนต่อไปโดยที่ฉันมีเพียงแค่ภาพสแนปชอต 1 ชุดฉันจะกำหนดน้ำหนักของสแนปชอตที่ 30
ดังนั้นโพสต์เฉลี่ยที่เผยแพร่ในหนึ่งเดือนสำหรับช่วง> = 6 เดือนที่ผ่านมาคือ:
SELECT category, SUM(cnt) / 30
from (
SELECT category, COUNT(*)*30 as cnt
from day1.My_table
group by category --- Note: I'm not considering the range defined from the user in this example.
) group by category;
ในฐานะที่เป็นความคิดเห็นที่ระบุไว้ยังฉันจะต้องทำแบบสอบถามเช่น:
Select category, AVG(*)
from [fromRange-toRange].MyTable;
สำหรับวิธีการแก้ปัญหาที่รุนแรงฉันกำลังพิจารณาความคิดในการใช้ metalanguage เพื่อให้ผู้ใช้ในอนาคต (เช่น marketng people) ทำแบบสอบถามเช่นนี้
คุณคิดว่ามีวิธีที่จะทำให้สำเร็จในการเจาะข้อมูลโดยไม่ใช้ภาษาเมตาหรือไม่? ฉันจะทำสิ่งนี้โดยใช้ UDF แบบเรียกซ้ำ แต่พวกเขาไม่สามารถคืนแบบสอบถามได้
สแนปชอตทุกอันมีขนาดใหญ่ 250GB และฉันต้องการเปรียบเทียบชุดข้อมูลเหล่านี้กับข้อมูลภายนอกอื่น ๆ (ฉันไม่ทราบล่วงหน้าถึงชุดรูปแบบของชุดข้อมูลเหล่านี้)
มีวิธีแก้ปัญหาที่เหมาะสมกับ Apache Drill หรือไม่? หรือมีวิธีแก้ไขปัญหานี้อีกหรือไม่
meta-language หรือกระดาษเกี่ยวกับปัญหานี้ก็ชื่นชม
แก้ไข: เราไม่มีข้อมูลธุรกรรม เรามีข้อมูลที่เปลี่ยนแปลงตามเวลาและสามารถเพิ่มหรือลบออกได้ ด้วยเหตุนี้เราจึงต้องการสแนปชอตทุกวัน นอกจากนี้เราไม่ทราบล่วงหน้าเกี่ยวกับคำถามที่จะดำเนินการดังนั้นเราจึงไม่สามารถทราบได้ว่าจะรวมประเภทใด ทุกแถวมีประมาณ 100 คอลัมน์และมี 250GB ต่อสแน็ปช็อต (ตาราง Mysql) นอกจากนี้เรายังต้องการค้นหาข้อความแบบเต็มเกี่ยวกับข้อมูลนี้ในทุก ๆ แถวในทุกวันที่เป็นไปได้
ตัวอย่างของการค้นหาอาจเป็น "มีโพสต์กี่เรื่องเกี่ยวกับบางครั้ง" ดังนั้นจึงต้องค้นหาข้อความทั้งหมดที่มีคำหลักบางคำ สแนปชอตทุกอันอาจมีหรือไม่มีแถวเหมือนกัน อีกสองสแนปชอตอาจมีโพสต์เดียวกัน แต่แก้ไขเล็กน้อย
table definitions/structures