คลังข้อมูล: ฉันจะค้นหาภาพรวมรายวันได้อย่างไร


9

ฉันมีสแนปชอตของฐานข้อมูลที่ไม่ใช่ชุดเวลา ตัวอย่างเช่น:

  • ภาพรวมวันที่ 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
vmachan

เพราะฉันไม่ต้องการกำหนดตารางใหม่ก่อนที่จะโหลดชุดข้อมูลของฉัน แน่นอนว่าถ้ามีวิธีแก้ปัญหาที่สามารถจัดการกับปัญหานี้ได้ แต่ต้องมีตารางที่จะกำหนดไว้ข้างหน้าฉันจะเลือกมันต่อไป
Federico Ponzi

ภาพรวมรายวัน 250GB หรือไม่ ด้วยความต้องการเหล่านั้น อย่างไร?
Tom V - ลอง topanswers.xyz

ทำไมต้องสแนปชอตรายวัน เท่าไหร่ที่ 250 GB เปลี่ยนต่อวัน? เกิดอะไรขึ้นกับมิติการเปลี่ยนแปลงที่ช้าลง
59

โปรดอย่าคิดว่าปัญหานี้ในแง่ของการจัดเก็บข้อมูล แต่ในแง่ของวิธีการสืบค้นและ / หรือข้อมูลขนาดใหญ่ ฉันมีสแนปชอตรายวันที่แตกต่างกันของฐานข้อมูลของฉันและฉันต้องการวิธีสืบค้นได้อย่างมีประสิทธิภาพ
Federico Ponzi

คำตอบ:


2

ลองคิดนอกกรอบดู แทนที่จะมี "สแน็ปช็อต" เราจะมี "บันทึก" สิ่งที่คุณมีอยู่คือสถานะ "สิ่งปัจจุบัน" การเพิ่ม "บันทึก" จะให้ "ประวัติ" ซึ่งอาจได้รับข้อมูล 'สูญหาย'

วิธีหนึ่งในการนำบันทึกไปใช้คือการTRIGGERเปิดINSERTหรือUPDATEตารางและให้ทริกเกอร์เขียนลงในไฟล์บันทึก บันทึกนี้จะไม่พอใจสำหรับการสอบถามเฉพาะกิจดังนั้นมีงานคืน (หรืออาจจะทุกชั่วโมง) ที่สรุปการเปลี่ยนแปลงสำหรับวัน - กำไรสุทธิ (หรือสูญเสีย) จำนวนโพสต์ ฯลฯ ข้อมูล "day2" และ ข้อมูล "เดือนที่แล้ว" นั้นสามารถได้รับจากตารางสรุปนี้อย่างรวดเร็ว หรืออาจเป็นระดับที่สองของการสรุปที่ประกาศสิ่งที่รัฐเป็นในแต่ละวัน ฉันสงสัยว่าUNIONจะต้อง "ภาพรวม" จะไม่เกี่ยวข้อง


1
ฉันถามว่าจะค้นหาสแน็ปช็อตรายวันได้อย่างไรคุณเพิ่งพูดถึงการเพิ่มประสิทธิภาพ - ฉันจะคิดถึงในภายหลัง ขอบคุณ
Federico Ponzi

1
ภาพรวมเป็นเรื่องยากที่จะจัดการกับ (ในความคิดของฉัน) ดังนั้นฉันจึงพยายามที่จะนำเสนอวิธีการแก้ปัญหา 'จริง' แทนที่จะได้รับการรบกวนในการแก้ปัญหาที่ยาก นอกจากนี้การสรุปจะช่วยให้สามารถสืบค้นได้เร็วขึ้นอย่างมีนัยสำคัญ
Rick James

2

ดังนั้นสิ่งที่ฉันกำลังมองหาคือระบบชนิดใหม่ที่เกี่ยวข้องกับ Datawarehousing: Data Lake System

คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับWikipedia :

ดาต้าดาต้าเป็นวิธีการเก็บข้อมูลภายในระบบที่อำนวยความสะดวกในการจัดวางข้อมูลในสคีมาตัวแปรและรูปแบบโครงสร้างโดยปกติแล้ววัตถุ blobs หรือไฟล์ Hadoop และแพลตฟอร์ม AWS S3 สามารถใช้เพื่อสร้างคลังข้อมูลทะเลสาบ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.