SQL, veri mühendisleri tarafından iş mantığını modellemek, temel performans ölçütlerini çıkarmak ve yeniden kullanılabilir veri yapıları oluşturmak için kullanılan temel araçlardan biridir. Bununla birlikte, veri mühendisleri için dikkate alınması gereken farklı SQL türleri vardır: Temel, Gelişmiş Modelleme, Verimli, Büyük Veri ve Programatik. SQL öğrenmenin yolu, bu farklı türleri aşamalı olarak öğrenmeyi içerir.
“Temel SQL” öğrenmek, örneğin toplama, tahıl ve birleştirme gibi verileri işlemek için SQL'deki temel işlemleri öğrenmekle ilgilidir.
Temel SQL, W3C gibi web sitelerinden öğrenilebilir veya Datacamp veya DataQuest gibi web sitelerinden öğrenmeye yönelik daha pratik bir yaklaşım aranabilir . Bu web siteleri, farklı işlemler, işlevler, alt sorgular ve birleştirmeler gibi SQL'in temel kavramlarını iyi bir şekilde kavramamızı sağlar. Veri mühendisliğindeki temel kavramlardan bazıları, örneğin bir tablo / veri kümesiyle çalışmak gibi, genellikle hak ettikleri kadar kapsamlı bir şekilde tartışılmaz.
SQL öğrenmenin temel zorluklarından biri veritabanını kurmak ve veri setlerine erişimdir. Bugünlerde yerel bir veritabanı kurmak oldukça kolay hale geldi, ancak veritabanını kurmak biraz zaman alıyor. Bundan sonra, tabloların oluşturulması ve pratik öğrenmede kullanılabilir hale gelmeden önce veri kümelerinin bunlara yüklenmesi gerekir.
Bu tür bilgiler, adayların taneciklik veya birleştirme gibi kavramları nasıl kavradığını anlamak için genellikle histogramdaki gibi mülakat sorularının taranması sırasında test edilir . Bu tür mülakat sorusu, veri mühendislerinin kariyerlerine yeni başlayan mezunlar için beklenen tipik SQL bilgi düzeyindedir.
Veri mühendislerinin karmaşık dönüşümleri modelleyebilmesi gerekir. Bazı gelişmiş analitik SQL öğrenmek, bu tür davranışları modellemeye yardımcı olur. Bu tür bir kullanım senaryosunun desteklenmesine iki ana şey yardımcı olur 1) Gelişmiş Sorgular 2) Veri Modelleri.
Pencere işlevleri , ek özelliklere sahip özel bir işlev sınıfıdır. Aksi takdirde aynı sonuçları elde etmek için alt sorgular ve birleştirmelerin bir karışımını gerektirecek dönüşümleri daha kolay tanımlamaya yardımcı olurlar. Gerçek verilere dayalı olarak oturum açma, tercih seçimleri veya optimizasyon gibi daha ağır veri dönüşümlerinin üstesinden gelmeye yardımcı olabilirler.
REGEXP ve ilişkili işlevleri, normal
LIKEişleçten daha kapsamlı metin deseni eşleşmeleri yapmanın bir yolunu sağlar .
Koleksiyon, işlevleri toplar, içerdiği veri kümesini özetlemeye izin verir, tipik işlevler
LISTAGGve
array_agg. Özetlenmiş veri kümesinden doğal olarak daha ayrıntılı bir düzeyde olacak bazı verileri sağlamak için yararlı olabilirler. Örneğin, belirli ürün türlerinin belirli bir e-ticaret siparişine dahil edilip edilmediğini bilmek kullanım örneğini ele alalım. Bu, ham sipariş kalemleri verilerinden hesaplanabilir, ancak aynı zamanda bir toplanmış alanı temel alan bir sipariş tablosundan da çok kolay bir şekilde hesaplanabilir
jsonb_object_agg.
Özyinelemeli CTE'ler / hiyerarşik sorgular, genellikle pencere işlevi / regexp veya koleksiyon toplama işlevleri gibi diğer dönüştürme türlerinden daha az kullanılır. Bununla birlikte, belirli türdeki sorunları çözmek için gereklidirler.
Veri modelleri, kullanılan veri modellerinin türü özellikle etkili olabilir. Üç tür
Normal Form: Veri mühendislerinin veritabanı normalleştirmenin faydalarını, farklı normal formların ne anlama geldiğini ve nerede kullanılması gerektiğini anlamaları önemlidir .
Yavaşça Boyutları değiştirme: kurma ve yararlanarak tip II yavaş değişen boyut (OHA) böyle belirli bir sigorta sözleşmesi için zaman içinde bir sigorta prim olarak özellikle kolay böyle evrimi, hesaplama gibi belirli kullanım durumları işlemek için bunu yapabilir tablolar. Tip I SDC tabloları , mevcut kullanıcı demografisinin yaş grubuna göre dağılımına görünürlük sağlamak için daha uygun olacaktır.
Normalleştirilmiş Tasarım: Normalden arındırma , verilerin bir veri ambarında açığa çıkma eğiliminde olmasının tipik yoludur ve normal olmayan tasarımda kullanılan ön talepleri ve yıldız ve kar taneleri şemaları gibi farklı yaklaşımları anlamak, mantıklı bir veri ambarı tutmak için önemlidir.
Gelişmiş analitik SQL için temel öğrenme materyallerinden biri, veritabanının resmi belgeleridir. İş problemlerini modellemek gerektiğinde neyin mevcut olduğunu ve neyin ilgi çekici olabileceğini anlamak önemlidir. Bazı kitaplar , pencere işlevlerine pratik uygulamalar, özyinelemeli sorgu uygulama örnekleri veya satır örüntü eşlemesini işleme örnekleri sağlayan Pratik Oracle SQL gibi bu modelleme kullanım durumlarına en iyi şekilde SQL'in nasıl uygulanacağına dair iyi bir genel bakış sağlar.
Veri modelleri için, bazı kritik modelleme ilkelerini öğreten birkaç veritabanı sınıfı [1] [2] [3] vardır. Bunların pratikte uygulanması gerekir. Sadece Ölümlüler için İşletme Bilgilerinin Modellenmesi veya Veritabanı Tasarımı gibi kitaplar , konuya derinlemesine dalmak için faydalı referanslar sağlar.
Gelişmiş modelleme ile ilgili sorular, bir SQL vaka çalışmasının bir parçası olarak görüşmelerde ortaya çıkma eğilimindedir, örneğin, belirli bir kullanım senaryosu için bir tablo yapısı ve dönüşüm tasarlama veya normal form sürümleri arasındaki farkı açıklamak gibi daha teorik olabilir. .
Veri mühendisi olmanın işinin bir parçası da verimli kod yazmaktır. Bu bağlamda bilinmesi gereken birkaç şey var. 1) karmaşıklığı iyi kavramak 2) veri yapısı, verimli veri modeli ve sorgu modellerini iyi anlamak ve 3) planı analiz edip açıklamak ve optimize edici tarafından ne yapıldığını anlamak.
Ayrıca, ilişkili alt sorgular gibi bazı yaklaşımlar hakkında genel bilgi sahibi olmak özellikle pahalıdır ; veri mühendislerinin yapılan farklı dönüşümlerin zaman ve mekan karmaşıklığını hem saf bir şekilde hem de veritabanları tarafından optimize edilmiş şekilde anlaması esastır .
Dizin ve bölümler gibi kavramları ve daha yüksek verimliliğe nasıl katkıda bulunabileceklerini ve bunların etrafında modellemenin nasıl fayda sağlayabileceğini anlamak. Günlük anlık görüntülenen tablo örneğini ele alalım - bu, varlığın güncelleme sürecini desteklemek için harika bir yol olabilir, önceki gün bölümünden yararlanarak ve değişiklikleri en üstte uygulayabilir.
WITH daily_updates AS ( SELECT customer_id, name, created_on, ROW_NUMBER () OVER (PARTITION BY customer_id ORDER BY created_on DESC) as rn FROM customer_updates cu WHERE cu.ds = '2020-02-02' ) INSERT INTO dim_user SELECT '2020-01-02' AS ds, COALESCE(daily.customer_id, du.customer_id) AS customer_id, COALESCE(daily.name, du.name) AS name, COALESCE(daily.created_on, du.last_login_on) AS last_login_on FROM dim_user du FULL OUTER JOIN daily_updates daily ON du.customer_id = daily.customer_id AND daily.rn = 1 WHERE du.ds = '2020-01-01'
Veritabanları ile uğraşırken bir açıklama planının nasıl okunacağını anlamak gereklidir. Optimize edicinin hangi kararı aldığını ve gerçekleştirilen farklı adımları size söyler. Bu, veri mühendislerine hangi işlemlerin pahalı olduğunu ve optimize edilebileceğini görme yeteneği verir . Örneğin,
nested loopsbir
hash join.
Sorguları açıklama planı tarafından döndürülenlere göre optimize etmenin farklı yöntemleri vardır ve açıklama planının analizi bu optimizasyon tekniklerine bağlı olmalıdır 1) sorgu yeniden yazmaları 2) endekslerin tanıtılması, önceden sıralama adımları, bölümler ... 3 ) optimize edici / planlayıcı ipuçlarının kullanımı 4) tablo istatistiklerinin güncellenmesi.
Verimli SQL kodu yazmayı öğrenmenin en tipik yolu, verimsiz veya yavaş işlemlerle karşılaşmak ve bunları zorunluluktan optimize etmektir. Veritabanlarında öğrenilecek bilgilerin bir kısmını sağlayan kitaplar ve kurslar vardır, bunun gibi çevrimiçi öğrenme platformlarından makaleler , daha verimli SQL yazmak için neler yapılabileceğine dair içgörü sağlar. Bununla birlikte, bunun için en önemli bilgi kaynaklarından biri, resmi veritabanı belgelerini okumaktan ve deneyimlerden ders almaktan gelir.
Verimlilik soruları genellikle deneyime sahip adaylar için yapılan görüşmelerde ortaya çıkar. Genellikle bir modelleme alıştırmasının takip soruları olarak gelirler ve dönüşümün nasıl daha verimli hale getirilebileceğini sorarlar. Bununla birlikte, bazı şirketler, verimli kod yazmaya ve sorgu optimizasyonuna özellikle odaklanır. Bu tür röportajlar için, sadece bahsedilen yöntemlerden bazılarını anlamak değil, aynı zamanda başlık altında neler olduğunu ve optimize edicinin sorguyu nasıl yeniden yazdığını ve düzleştirme, satır içi gibi teknikler gibi onları daha verimli hale getirdiğini gerçekten anlamak da çok önemlidir. tahmin , aşağı itme , bölüm kısma ,…
Büyük Veri teknolojileri için SQL ile uğraşmanın belirli özellikleri vardır. Paketler veya kümeleme gibi belirli veri yapısı seçenekleri, büyük veri teknolojileri için çok gelenekseldir.
Kullanılması olasılık veri yapıları gibi belirli işlevler de
approx_distinctpresto, ayrıca tipik geleneksel veri tabanlarında mevcut olan bu fonksiyonların bazılarını rağmen büyük veri teknolojilerinden yararlanan SQL kodunda bulunan bir şeydir.
Büyük Veri SQL ile başa çıkmanın birçok yönü, sistemin sorguları nasıl planladığına ve yürüttüğüne benzer şekilde, belirli dağıtılmış sistemlerde başlık altında neler olduğunu anlamaktır.
Büyük veri SQL öğrenmenin çoğu, büyük veri sistemleriyle çalışmaktan ve olan biteni ayıklamaya çalışmaktan gelir. Spark veya Hive gibi kullanılan platforma ait özel dokümantasyon, neler olduğuna dair üst düzey bir görünüm sağlayacaktır. Harvard'ın Büyük Veri Algoritmaları gibi kurslar , Büyük Veri'de kullanılan bazı olasılık algoritmaları ve veri yapılarının başlığı altında neler olup bittiğine dair çok daha derinlemesine bir açıklama sunar.
Programatik SQL, prosedürler aracılığıyla bir işlem akışını düzenlemenin bir yolunu sunar. Kontrol akışı (döngüler, ifs,…), değişkenler, istisnaları işleme ve hatta dinamik olarak SQL sorguları oluşturma ve yürütme yoluyla programlı bir dilin özünü sağlar.
Programlı SQL kullanımı, veri değişmezliğini ve tam yeniden yüklemeyi ve artımlı güncellemeleri tercih eden modern veri mühendisliği hareketlerinden bazılarının yanı sıra Airflow veya Prefect gibi iş akışı motorlarının yükselişiyle bir nebze de olsa gözden düşmüş olsa da, hala faydalı ve çok sayıda şirkette kullanılıyor.
Çoğu RDBMS, MsSQL için T-SQL, Oracle için PL / SQL veya Postgres için PL / pgSQL gibi bir programlı SQL çeşidini destekler ve bu nedenle dil, büyük ölçüde satıcıya özgüdür.
Spesifik satıcı tarafından sağlanan dokümantasyon, prosedür dilini denemek veya spesifik olarak belirli işlevleri aramak için iyi bir ilk geçiş sunar. Bununla birlikte, Oracle PL / SQL Programlama veya PostgreSQL Sunucu Programlama gibi bu dillerle tanışmak için bazı iyi kitaplar vardır .
Deneyimlerime göre, programatik SQL soruları, kısmen dilin satıcı spesifikliğinden dolayı bir röportajda doğrudan sorulma eğiliminde değildir. Ancak, belirli bir veritabanı satıcısıyla deneyime sahip kişiler arayan bazı şirketler, programatik SQL ile ilgili bazı sorular içeren bazı otomatik testleri tamamlamayı isteyebilir.
Hacking Analytics hakkında benden daha fazlası :
Bir keresinde kocam çöplerimizi karmaşık çöp bidonumuza götürürken, dost canlısı, kayıp bir kedi yavrusuyla karşılaştı. Onu eve götürmeye ve ardından sahibini bulmaya karar verdi - ta ki kadın miyavlayana kadar.
MIT Seçim Laboratuvarı'nda yüksek lisans araştırmacısı ve doktora derecesi olan Jesse Clark tarafından yazılmıştır.
Oakland, CA'da halka açık verileri kullanarak hava kalitesini tahmin etmek Google ve EDF, Oakland'daki hava kirliliğini haritalama çalışmalarını yayınladığında, bu çalışmanın sonuçları büyük ilgi gördü. Yayınladıkları veriler, hava kalitesinin Doğu ve Batı Oakland'daki şehir bloklarına göre nasıl değiştiğini gösteren ilk veri kümelerinden biriydi.
Daniel Fleck ve David Lubert ile yazılmıştır Dizimizin ilk blogu, bir veri bilimi projesini uygun şekilde değerlendirmek için Net Şimdiki Değer (NPV), İç Getiri Oranı (IRR) ve Karlılık Endeksi'ni (PI) kullanmaya odaklanacaktır. Ayrıca, bir veri bilimi metodolojisinin kullanılmasının, bu aynı ekonomik ölçütlerin girdilerini daha yüksek kaliteli değerlendirmeler geliştirmek için nasıl daha da iyileştirebileceğini tartışacağız.
Öz bileşimi ve SVD için yararlı olan doğrusal cebir temel kavramını anlayın Bu makalede, öz ayrıştırma veya tekil değer ayrıştırma (SVD) gibi matris çarpanlara ayırma yöntemlerini anlamanın ilginç bir yolu olan temel kavramını öğreneceksiniz. Tanımlar Temel, vektör uzaylarını (vektör setleri) tanımlamak için kullanılan bir koordinat sistemidir.