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.
table definitions/structures