2016-04-01 20 views
2

Büyük bir veri kümesine sahip olmayan (Azure Blob) bir veri kümesine sahibiz ve birkaç bin kayıt yüklendikten sonra modelimizi yenilemenin oldukça yavaşladığını fark ettik.Büyük veri tabloları üzerinde sorgulamalar

Mevcut sorgu yapısı şöyledir:

#"Load Data" 
    Loads data from the Azure Blob, ~1000 files 
    Parses the files into a table with 3 columns (of list/record types which can be further expanded), ~700k rows 

#"Sessions" 
    Reference #"Load Data" 
    Expand all 'Session' related columns 

#"Users" 
    Reference #"Load Data" 
    Expand all 'User' related columns 

#"Events" 
    Reference #"Load Data" 
    Expand all 'Event' related columns 

#"Events By Name" 
    Reference #"Events" 
    Groups by 'event.name'- generates a column of tables to each event type's events and properties (these vary between events) 

#"Event Name1" (2, 3, etc. one table per event type) 
    Reference #"Events by Name" 
    Expands that event name's Table, and generates a table with event.id and each of the properties for that event type 

bu çalışan ve kaynak monitörü izlerken bellek kullanımı tavan geçer ve disk kullanımına açan Sert Fayların sonunda ton. Sorgu yürütme pop-up'ına bakmadan, bir grup sorgulamanın başlatılması ve paralel olarak çalıştırılması görünüyor.

Verileri yerel bir klasörden yüklüyorsam, bunların hepsinin veri alması, dosyalar üzerinden geçmesi ve başvurulan ortak sorguları paralel olarak yüklemesi gibi görünüyor. Bellek kullanımının haywire'ye gitmesine neden olan şey olduğuna inanıyorum, diskin tekme atması ve sorgulamaların saatler sürmesi.

Başvurulan sorguların önce bir kez çalıştırılacağını ve sonuçta elde edilen tabloların bunu kullanarak tek tek sorgular tarafından başvuruda bulunduğunu varsaydım, ancak durum böyle görünmüyor. Ayrıca, bu sorguların bir kez hesaplanmasını ve sonra bağımlı kişilerle paylaşılmasını sağlamak için "Verileri Yükle" ve # "Olaylar" ın son adımı olarak Table.Buffer'ı kullanmayı denedim, ancak bu yalnızca daha kötüye gidiyor gibi görünüyordu. yolları var mı:

  • sorgu sadece bir kez çalıştırmak olun ve paralel çalışmasını onu
  • önle sorguları başvuran herhangi bir sorgu ileri geçirilen bir sonuç var ve sırayla yerine

Am çalıştırmak Sadece yanlış yöne bakıyor muyum? Bulduğum çok sayıda "performans" makalesinde, Sorgu Katlama'ya izin vermek için sorgularınızı yapılandırmaya değindiniz. Ancak bu durum bizim mevcut durumumuz için bir olanak değildir, çünkü Azure Blob depolama alanı sadece yerel olarak yüklenmesi ve ayrıştırılması gereken 'blob' dosyalarını depolar.

Şu anki 700 bin test olaylarımızda bu sorguları yayınlamak için gerçek bir mücadele olmakta ve bunun gerçek ortamda milyonlara çıkmasını bekliyoruz. Blobları tedavi etmek ve verileri bir SQL veritabanına itmek ve modelimizi bununla ilişkilendirmek için tek seçeneğimiz var mı?

cevap

0

Verilerinizi önce işleyip DB'nizdeki bir tabloya depolarsınız ve bu tabloyu modelinize veri kaynağı olarak kullanırsınız. Zamanlanmış bir aralıkta çalışan ve tabloyu güncelleyen bir işi çalıştırarak, kaynak tablodaki verileri yenileyin.

İlgili konular