Veri Ambarı: Günlük anlık görüntüleri nasıl sorgulayabilirim?


9

Ben zaman çizelgesi olmayan bir veritabanı bazı anlık görüntüleri var. Örneğin:

  • Anlık gün 1:

    +----+---------------+------------+------------+        
    | ID |     Title     |  Category  |    Date    |
    +----+---------------+------------+------------+
    | 1  | My First Post | helloworld | 2015-01-01 |
    +----+---------------+------------+------------+
  • Anlık görüntü 2. gün (Bugün yeni bir yayın eklenir):

    +----+----------------+------------+------------+        
    | ID |      Title     |  Category  |    Date    |
    +----+----------------+------------+------------+
    | 1  | My first post  | helloworld | 2015-01-01 |
    | 2  | My second post | other      | 2015-01-02 |
    +----+----------------+------------+------------+
  • Anlık görüntü günü 3 (Yayın 2 bugün kaldırıldı):

    +----+---------------+------------+------------+        
    | ID |     Title     |  Category  |    Date    |
    +----+---------------+------------+------------+
    | 1  | My First Post | helloworld | 2015-01-01 |
    +----+---------------+------------+------------+

Bu nedenle günler arasında, tablonun bir satırı sabit olabilir veya olmayabilir. Şimdi, böyle bir sorgu kullanabilmek gerekir:

SELECT category, COUNT(*) from day1.My_table group by category

Bu bir günlük bir masa içindir. Biz ise bir ay içinde kategoriye göre mesajların günlük ortalama saymak istediğiniz biz böyle bir şey yapmak gerekir:

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

Başka bir örnek, bir ayda yayınlanan yayın sayısı :

SELECT COUNT(distinct id) 
from ( 
    SELECT id 
    from day1.My_table 
    UNION ALL ... 
    UNION ALL SELECT id 
              from day30.My_table
) 

Temelde bir ağırlık düşünmeliyiz. Eğer day1.My_table ve day5.My_table varsa, day1 gününde değil, day5 içinde olmayan her yazı, 2,3,4 günündeki gibi sayılacaktır. 1. gün ve 5. gün olan her yayın, ayın her günü gibi sayılır (= sonraki anlık görüntüye kadar).

Bu nedenle, sadece 1 anlık görüntüye sahip olduğum günlük = 6 aylık bir günlük ortalama posta sayısını düşünmek istersem, bu anlık görüntüye 30 ağırlık atarım.

Yani, bir ayda> = 6 ay önceki bir aralıkta yayınlanan ortalama gönderi:

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;

Yorum da belirtildiği gibi, ben gibi bir sorgu yapmak gerekir:

Select category, AVG(*) 
from [fromRange-toRange].MyTable; 

Aşırı bir çözüm için, gelecekteki kullanıcının (örn. Pazar insanı) böyle bir sorgu yapmasına izin vermek için bir meta dil uygulama fikrini düşünüyorum.

Meta dil olmadan Drill'de bunu başarmanın bir yolu olduğunu düşünüyor musunuz? Bunu özyinelemeli bir UDF kullanarak yapardı ama sorguları iade edemez.

Her anlık görüntü 250GB büyüklüğündedir ve bu veri kümesini diğer harici verilerle karşılaştırmak istiyorum (bu veri kümesinin şemasını önceden bilmiyorum).

Apache Matkap için uygun bir çözüm var mı? Yoksa bu sorunun başka bir çözümü var mı?

Ayrıca bu sorunla ilgili herhangi bir meta dil veya makale takdir edilmektedir.

Düzenleme: İşlem verimiz yok. Zaman içinde değişen ve eklenebilen veya çıkarılabilen verilerimiz var; bu nedenle günlük fotoğraflara ihtiyacımız var. Ayrıca, gerçekleştirilecek sorguları önceden bilmiyoruz, bu nedenle ne tür bir toplama yapılacağını bilemeyiz. Ayrıca her satırın yaklaşık 100 sütunu vardır ve anlık görüntü başına 250 GB (Mysql tabloları) vardır. Ayrıca, her gün, her gün bu veriler üzerinde tam metin aramaya ihtiyacımız var.

Arama örneği "sometopic hakkında kaç gönderiydi?" Bu yüzden bazı mesajlarda bazı anahtar kelimeleri aramak zorundadır. Her anlık görüntü aynı satıra sahip olabilir veya olmayabilir. Ayrıca iki anlık görüntü aynı gönderiye sahip olabilir, ancak biraz değiştirilmiş olabilir.


Verileriniz için iyi bir yapıya sahip olduğunuz görülüyor .. Şema içermeyen bir çözüm aramanın özel bir nedeni var mı? Şema tarafından varsayıyorumtable definitions/structures
vmachan

Çünkü veri kümelerimi yüklemeden önce yeni tablolar tanımlamak istemiyorum. Tabii bu sorunu halledebilir bir çözüm varsa ama önceden tanımlanması için tablo gerekiyorsa zaten seçerim.
Federico Ponzi

250GB günlük anlık görüntüler? Bu şartlarla? Nasıl?
Tom V - topanswers.xyz'yi deneyin

Neden günlük görüntüler? Günde 250 GB'lık değişikliklerin ne kadarı var? Yavaşça Değişen Boyutlar yaklaşımında sorun nedir?
dnoeth

Lütfen bu sorunu veri ambarı olarak değil, nasıl veri sorgulayacağınız ve / veya büyük veri açısından düşünün. Veritabanımın farklı günlük anlık görüntüleri var ve bunları etkin bir şekilde sorgulamak için bir yol istiyorum.
Federico Ponzi

Yanıtlar:


2

Kutunun dışında düşünelim. "Anlık görüntü" yerine "günlük" alalım. Şu anda sahip olduğunuz şey "şu anki" durumdur; "log" eklenmesi, "kayıp" bilgisinden türetilebilecek "geçmişi" sağlayacaktır.

Günlüğü uygulamanın bir yolu , tablonun TRIGGERaçık INSERTveya UPDATEtablolu olması ve tetikleyicinin günlük dosyasına yazmasını sağlamaktır. Bu günlük geçici sorgular için hoş olmayacaktır, bu nedenle günlük değişiklikleri özetleyen her gün (veya belki saatlik olarak) - gönderi sayısının net kazancı (veya kaybı), vb. "geçen ay" bilgisi bu özet tablosundan oldukça hızlı bir şekilde türetilebilir. Ya da belki devletin her gün ne olduğunu açıklayan ikinci bir özetleme seviyesi. UNIONGerekirse şüpheliyim . "Anlık görüntü" eklenmez.


1
Günlük anlık görüntüleri nasıl sorgulayacağımı sordum, sadece bir optimizasyondan bahsediyorsunuz - daha sonra düşüneceğim. Teşekkürler
Federico Ponzi

1
Anlık görüntülerle uğraşmak zor (bence), bu yüzden zor bir çözümde bataklık yapmak yerine 'gerçek' sorunu çözmek için bir yol sunmaya çalışıyordum. Ayrıca, özetleme önemli ölçüde daha hızlı sorgulara izin verecektir.
Rick James

2

Aradığım şey, Datawarehousing: Data Lake System ile ilgili yeni bir sistem türüdür.

Wikipedia'da daha fazla bilgi edinebilirsiniz :

Bir veri gölü, bir sistem içinde veri depolamak için bir yöntemdir, verilerin değişken şemalarda ve yapısal formlarda, genellikle nesne bloblarında veya dosyalarında yer değiştirmesini kolaylaştırır. Hadoop ve AWS S3 platformu, veri gölü depoları oluşturmak için kullanılabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.