SQL Nedir?: DWH'cının Bilmesi Gereken Şeyler
SQL Nedir?: DWH'cının Bilmesi Gereken Şeyler
Bu makalenin amacı konuyu öğretmek değil dünyamızda nelerin olduğu hakkında kısaca bilgi
vermek aslında. O yüzden bu makale daha çok soru sorabileceği etrafında kimse olmayan ve
neyi bilmediğini bilmeyen developer arkadaşlar için yazıldı ki bende geçmişte bunlardan
biriydim,umarım faydalı olur😊
SQL Nedir?
SQL,Structured Query Language ifadesinin kısaltmasıdı[Link] tarafından 1970 yılında
database sistemlerinin yönetimi için oluş[Link] programlama dili değildir.
HÜSEYİN ALBAYRAK
Peki bu SQL nerede çalışır bu çalıştığı yeri tanıyalım.
Database Nedir?
Verilerinizi saklamak ve rahatça yönetmek için kullanılan bir yazılımdı[Link] çok farklı
database modeli vardır fakat günümüzde en çok kullanılan model olan RDBMS’tir.(Relational
Database Management System).Genellikle bu yazılımlar her zaman çalışır vaziyette olan
SERVER olarak nitelendirdiğimiz güçlü bilgisayarlar üzerinde kurulu [Link] SERVER’da
birden çok Database’i kurulu olabilir
Aynı zamanda özellikle cloud DWH ürünleri row base değil column
base’[Link],Synapse SQL Pool vb.
Tablo Nedir?
Database’de verileri tutan nesnelerdir.
Satır(Row Or Record):Yatay olarak gördüğümüz kendine özgü veri kümesi bir alt veya üst
satırla hiç bir ilişkisi yoktur kendine ait verileri tutar.
Her satır bir işlemi ifade ederken her sütun bu işlemin özelliklerini ifade eder.
HÜSEYİN ALBAYRAK
View Nedir?
Bir tablo gibi çağırabildiğiniz fakat fiziksel olarak veri tutmayan [Link]ım şekli
olarak bir tablodan farkı [Link] scriptinizin döndürdüğü verileri bir çok yerde
kullanacaksanız ideal bir çözümdü[Link] kullanılırken dikkat edilmesi gereken en önemli
konu View’i yaratmak için kullandığınız SQL scriptinizdeki tabloların verisi değiştiğinde
View’inizde döndürdüğü veriler otomatik olarak değişecektir.
Bir view kullandığınızda bu View’e her eriştiğinizde içerisindeki SELECT ifadesini her
seferinde çalıştırıyorsunuz demektir ve bu sorgunuz kötü performans gösteren bir sorguysa
veya çok büyük veri seti döndürüyor ise kesinlikle kullanmamanız gereken bir yö[Link]
amaçla Materialized View’ler yaratılmıştır veya bir tabloya ilgili data setini basmanız
performans açısından çok daha kullanışlı olacaktır.
HÜSEYİN ALBAYRAK
tablonuz hata döndü[Link] derseniz dosya daki tüm veriler hata alsada tabloyu
kullandığınız SQL ifadeleri çalışmaya devam eder.
[Link]
Index Nedir?
İndexler tablodaki verilere hızlı bir şekilde ulaşmanıza olanak sağ[Link] veya viewler
için yaratılabilir.İki tip index vardır.İndexleme işlemi yaptığımızda bu sütunlara ait veriler
için bir işaretleyici oluştururuz ve bu işaretleyici sayesinde verilere hızlıca ulaşırız.
Clustered İndex:Sıralanmış [Link] tabloda Primary Key olarak
tanımlanan genelde Id olarak ifade edilen sütun için otomatik Clustered Index
oluş[Link] tabloda bir tane PK olanı olacağında sadece bir tane de Clustered Index
olabilir.İlgili sütun Auto Increment olacağından tüm verilerin sırasını biliyor ve ilgili
veriyi bulup hızlıca getiriyor olarak düşünebiliriz.
Non-Clustered Index:Sıralanmamış [Link] çok olabilir.İşlem
sonucunda verinin nerede olduğuna karar verdiği dizinleri disk üzerinde ilgili tablo
dışında bir yerde [Link] da disk maliyetlerimizi arttıracaktı[Link]-Clustered Indexler
Clustered indexlere göre daha yavaş çalışırlar.
Select hızımızı arttırırken Indexli tablolarda Update,Delete ve Insert işlemlerinin daha yavaş
süreceğini unutmamalıyız.
Hemen hemen her zaman aynı sütunları kullanıyorsak WHERE ve JOIN ifadelerinde bu
sütunları indexlemek mantıklı olabilir.Çok fazla farklı sütun kullanılıyorsa her biri için
indexlemek aksine daha da kötü performans [Link] yüzden bir veya birden çok
sütunu indexleyeceksek analizini iyi yapmalıyı[Link]ıca çok az tekil veri barındıran sütunlara
bu işlemi yapmak mantıksızdı[Link] bir sütun olduğunu düşünelim sadece 0 ve 1 tutan
buna index atılmamalıdır index atılacak sütun veya sütunların tekil hali tablonuzun satır
sayısının en az %30’una yakın olmalıdır.
DML islemleri sonucunda Indexler cok hızlı bir şekilde eskiyebilir bu yüzden sık olarak
rebuild edilmelilerdir.
Bu seviyede bilmemize kesinlikle gerek yok bence fakat daha da detay okumak isteyenler
aşağıdaki linki inceleyebilir.
[Link]
HÜSEYİN ALBAYRAK
B-Tree,Leaf,Nodes Nedir?
Mantıksal olarak bilmemiz de yarar olan bir [Link] işlerimizde neredeyse karşımıza
çıkmaz.
İndexlediğimiz verilerin tutulma biçimi ile [Link] ve Leaflerden oluşan ağacı andıran
bir yapıdı[Link] üst node(root)’un belirlendiği değerden küçük değerler için Sol node’a
büyükler için Sağ node [Link] bu işlem ilgili keyin ait olduğu node’a kadar devam
[Link]ısıyla tüm bir tablonun blocklarını okumaktansa sadece ilgili node’a ait blockları
[Link] da ciddi bir performans artışı sağlar SELECT iç[Link],DELETE ve INSERT
için yavaş olma sebebide budur çünkü sadece tabloya bu işlemler yapılmaz aynı zamanda
Index içinde bu işlemlerin yapılması gerekir.
[Link]
[Link]
Synonym Nedir?
Synonym herhangi bir DB’deki başka bir nesneye ulaşmak için yaratılan [Link] bir
tablo olabileceği gibi view,function,prosedürde da [Link] tablo için oluşturulan
Synonymde SELECT,UPDATE,DELETE,INSERT işlemleri yapılabilir referansındaki tablo
da bu değişiklikleri gerçekleş[Link] gibi bunlarda fiziksel olarak diskde yer
kaplamazlar.
Neden kullanırız? N tane DB’de aynı tabloyu kullanmak istediğinizi düşü[Link] durumda
bu tabloda bir değişiklik yapmak istersek N tane DB’de gidip bu değişikliği yapmamız
[Link] bir DB’de tablo olarak yaratıp diğer N-1 DB için Synonym yaratırsak
sadece 1 DB değişikliği yaparız ve tüm DB’ler güncellenmiş [Link] hem maliyet kazancı
hem data tutarlılığını garanti eder.
Ayrıca var olan bir tablonuzun adını değiştirmek bu tabloyu kullanan tüm uygulamalarda
değişiklik yapmanızı [Link] yapmak yerine Synonym kullanabilirsiniz.
HÜSEYİN ALBAYRAK
Sequence Nedir?
Bir tablo için PK gibi çalışan unique ve auto increment birden çok sequence
oluş[Link] kullanıcının işlemi için bir değer atanır Commit edilmemişse dahi ilgili
kayıtlar için değerler atanmıştır Rollback yapıldığında dahi bu işlem geri dö[Link] yüzden
hiç bir işlem için duplice kayıt oluşmadığı garanti edilmiş [Link] veya Descending
olarak increment olacak şekilde yaratılabilir aynı zaman da increment miktarı ve max,min
değerler atanabilir.
Tablo'dan bağımsız bir [Link] nedenle bir çok tabloda unique değer yaratmak için dahi
kullanı[Link] genelde her tabloya tek bir tane oluş[Link]'da çok kullanılan bir
method değildir.
[Link]
Partition Nedir?
Partition bir tabloyu istediğimiz sütuna göre tablolara bö[Link] tablo gibi davrandığından
sorgularınızda bir tablonun herhangi bir partitionını [Link] yönetmeyi
kolaylaştırdığı gibi performansı ciddi bir şekilde attırı[Link] çok Partition yapısı vardır en çok
kullanılan methodların açıklamalarını aşağıda paylaşacağım..Tablonuzda yarattığınız
partitionların gruplandırma kuralı dışında bir veri insert etmeye çalışırsanız hata alırsını[Link]
yüzden önce ilgili verinin girebileceği bir partition yaratıp sonra insert veya update etmeniz
gerekmektedir.2 tip kullanımı vardır [Link] direk tabloyu çağırırsınız ve WHERE veya JOIN
lerde partitionlamanızı sağlayan sütunu kısıtlarsınız ve bunun sonucunda ilgili partition(lar)a
gider veya [Link] direk ilgili partitionları FROM veya JOIN de refere ederiz.
Range: Tablonuzdaki verileri ve yeni gelecek verileri belli aralıklara göre
bölmenizi sağlayan yapıdı[Link] aralık bir tarih,sayı veya metin [Link] da
özellikle Fact tablo dediğimiz tablolarda çok sık tarihe göre ayrılmış partitionlar
görebilirsiniz.
List: Tablonuzdaki verileri belirli değerlere göre bölebilirsiniz.Örnek vermek
gerekirse bir sütununuz var ve A'dan Z'ye kadar değerler alabilir ve bu değerlere sahip
binlerce kaydınız varsa A partitionına sadece A değerine sahip kayıtlar gelecek B
partitiona sadece B değerine sahip kayıtlar [Link] List partitiona ait birden çok
değerde tanımlayabilirsiniz.Örneğin Partition 1'a A,B,C değerleri girecektir
diyebilirsiniz.
Hash:Range ve List tiplerinde net bir kural çizebiliyorduk Hash genellikle
herhangi net bir kırılım olmayan durumlarda tablonuzu istediğiniz x parçaya
bölmenize sağlar.
HÜSEYİN ALBAYRAK
Daha fazla detay için aşağıdaki linki ziyaret edebilirsiniz.
[Link]
Constraint Nedir?
Bir constraint tablonuzdaki veri tutarlığını sağlamak için kullanılan kısıtlayıcılardı[Link]
tabloda NULL değer içermemesi gereken bir sütununuz var ise constraint koyarak bunu
garantileyebilirsiniz veya 3 sütun üzeirnden uniqueliği sağladığınız bir durumda bu 3 sütunu
içeren bir unique constraint oluşturabilirsiniz.
Detaylar için:
[Link]
Tablespace Nedir?
Fiziksel olarak yer tutan index,tablo,materilazed view’ler belirtmiş olduğumuz
tablespacelerde [Link]’lar datafile’ların genel adını oluşturan mantıksal bir
kavramdı[Link] olarak datayı tutmazlar datayı tutan aslında datafile’lardı[Link] bir
tablespace birden çok sayıda datafile'da [Link] en çok karşımıza çıkacak sorun
tablespace’in dolu olmasıdı[Link] aslında ilgili datafile’larda yer kalmadı demektir bu durumda
ya var olan datafile’ların boyutu arttırılır ya da yeni datafile’lar [Link] diğer karşımıza
çıkabileceği konu yeni bir tablespace yaratılması [Link] da yine ilgili datafile’lar
yaratılır bu file’ları tutacak mantıksal kavrama isim [Link] sonra yaratacağınız bir
tabloda iligli tablespace’i seçerseniz artık bu yeni file’larda verileriniz
HÜSEYİN ALBAYRAK
tutulacaktı[Link]’lerinizde yeteri kadar yer olmazsa DML işlemlerinizde hata alırsınız
önemli bir konudur
Genelde DBA’lerin işidir fakat bazen ETL süreçlerimizde bu hatayı alabiliriz DBA’lerin
gözünden kaçmış olabilir bu tip durumlarda doğru tanı koyabilmek için bilinmesinde fayda
vardır.
Sistem tablolarından veya bazı DB connection için kullanılan IDE’lerde bunları rahatça analiz
edebilirsiniz.
[Link]
Function Nedir?
Bir fonksiyon aslında belli bir amacı gerçekleştirmek için kullanılan bir SQL [Link]
seferinde kod bloğunu tekrar yazmaktansa belli bir isimle DB'de saklayıp çağırılmasına yarar.
Herhangi bir sayıda girdiği değerine sahip olabilir sonucunda fonksiyonun amacına göre tek
bir değer veya bir tablo döndürebilir.İki tür fonksyion vardır:
System Defined Functions:Bu fonksiyonlar DB kurulumda veya sonradan
eklenen modüllere erişilen DB'ye özgür fonksiyonlardı[Link] hemen her DB'de
farklı isimler ile aynı işi yapan fonksiyonlara rastlayabilirsiniz.(Oracle
için: [Link]
User Defined Functions:Kullanıcılar tarafından oluşturulan
fonksiyonlardı[Link] fonksiyonlarının talebinize yetersiz kaldığı durumlarda
yazarız.
PL/SQL Nedir?
SQL'in genişletilmiş halidir [Link]'in yetersiz kaldığı durumlarda PL/SQL'e geçiş
yapmamız [Link] kod bloğunuz var ve bunun tablonuzdaki farklı değerler için
çalışmasını istiyorsanız döngülerle bu kod bloğunuzu o değerler için defalarca
çalıştı[Link] herhangi bir koşul gerçekleşirse bir kod bloğu gerçekleşmezse başka bir
kod bloğu çalıştırmak istersek PL/SQL'e baş[Link] PL/SQL çağıramazken PL/SQL
tüm SQL komutlarını çağırabilir.
HÜSEYİN ALBAYRAK
EXCEPTION(Zorunlu Değil):Hataları yakalayıp ilgili hataları alırsa ne
yapmak istediğinize karar verdiğiniz kısımdır.
END
kaynak2:[Link]
Peki aynı kod bloğunu hem stored procedure hem functionla çalıştırabiliyorsak ne zaman
function ne zaman stored procedure kullanmalıyı[Link]'da da sıkça kullanılır
Package Nedir?
Bir package değişkenleri,cursorleri ve alt program bloklarını tutmak için yaratılan bir
[Link]'de saklanır ve birden çok kullanıcı ve uygulama tarafından kullanılabilir.
Genellikle aynı amaca hizmet eden kod bloklarını bir arada tutmak için yaratılı[Link] cursor
tanımlarsanız bu tüm kod bloklarında kullanabilirsiniz ve tek seferlik memory ayırırsınız.
HÜSEYİN ALBAYRAK
Bu kod bloklarını SP olarak düşü[Link]ıca paketin bir alt programını çağırdığınız
tüm paket için plan oluşur ve diğer alt programlar için bir daha memoryde yer aç[Link]'da
da sıkça kullanılır.
Trigger Nedir?
Aslında bir SP'[Link]'de verdiğiniz koşullar sağlandığında otomatik çalışır.3 farklı durum için
de trigger yaratılabilir.
DML Triggers:Bir tabloya INSERT,UPDATE,DELETE işlemi yapıldığında
çalışmasını istediğiniz triggerlar.
DDL Triggers: CREATE,DROP,ALTER gibi işlemler yapıldığında
çalışmasını sitediğiniz triggerlar.
DB Operation Triggers:LOGON,LOGOFF,SERVERERROR gibi DB
operasyonlarında çalışmasını istediğimiz triggerlar.
Bir trigger için tetikleyici işlemden önce veya sonra için çağrılabilir yeni ve eski değerleri
çağı[Link] tablodaki belli bir kısım sütuna update geldiğinde eski değerleri kaybetmek
istemediğiniz bir durumda bu veriler için bir trigger yaratıp başka bir tabloda tutabiliriz.
[Link]
server-ver15
DBLink Nedir?
Bir databeseden başka bir databese erişim sağlayan bir DB [Link] nesneyi yarattıktan
sonra bunun aracılığıyla diğer DB'nin tablo ve view'lerine erişebilirsiniz.İlgili DB'de yaratma
yetkileri bağlanmak istediğiniz remote DB'de session yetkinizin olması gerekmektedir.
HÜSEYİN ALBAYRAK
Daha fazla bilgi için
: [Link]
FK,PK Nedir?
Primary Key:Bir veya birden çok sütunlardan oluşan bir satırı diğerlerinden
ayırmaya yarayan tekilliği garanti edilmiş sütunlardı[Link] tabloda sadece bir PK alanı
bulunabilir.
Foreign Key:Bir veya birden çok sütundan oluşan ve başka bir tablonun
primary keyi olan sütunlardı[Link]ğiniz bir satırdaki foreign keyin değeri primary
keyi olan tablodada olmalıdı[Link] sayesinde veri bütünlüğü sağalanıp tablolar
arasında ilişki [Link] tabloda birden çok FK alanı olabilir.
[Link]
[Link]
HÜSEYİN ALBAYRAK
Explain Plan Nedir?
Bir sql komutu çalıştırdığınızda DB’niz optimizer’ı sorgunuz için bir çok plan içinden en
uygun planı bulmaya çalışır ve genelde bu planı yürütür.
Bir explain plan hangi tabloya önce gidecek,hangi tabloya nasıl erişecek,join varsa nasıl bir
join seçeceği,filtrelemeler aggregationlar vb barındırır.
Çünkü sorgunuz geç çalışmasının başlıca sebeplerinden biri FULL SCAN etmenizdir tabloları
işte Explain planla bunları tespit edebiliriz.
Explain Plan okumak ve adımları başka bir yazının konusu olacak genel tanım için yeterli
sanırım bu açıklama.
[Link]
OLTP Nedir?
Online Transaction Processing’in kısaltmasıdı[Link]’ımız için “Source” olan
DB’[Link] önceliği dataların güvenle eklenip,güncellenmesi ve son kullanıcıya
bilgilerinin gö[Link] e-ticaret sitesinden alışveriş yaptığınızı düşünün burdaki
sepetiniz,ödemeleriniz,siparişleriniz,üye bilgileriniz her biri bir tabloda tutulmakta bir biriyle
konuşmaktadı[Link] verdiğiniz sipariş için bir insert atılır tabloya veya güncellemelerinizde
update atılı[Link] DB’lerdeki Select’lerde genelde çok ufak bir kitle döndürü[Link]
sekmesine girdiğinizde gördüğünüz tüm bilgiler o anda DB’den dönen select ifadesinin
sonuçlarıdı[Link] olarak normalize yapıda olurlar bu en önemli farkıdır OLAP’tan(Kimball
model için).
HÜSEYİN ALBAYRAK
Normalizasyon Nedir(3NF)?
Data tekrarını azaltmak,insert,update ve deletelerde ortaya çıkabilecek tutarsızlıklardan
kaçınmak ve büyük tabloları daha ufak tablolara bölmek için geliştirilen databese dizayn
tekniğ[Link] çok formu vardır fakat genelde 3rd Normal Form’a kadar geliştirilir.
Her bir adım bir önceki adımların üzerine yeni kurallar gelmesi ile devam [Link]ısıyla
1NF olmadan 2NF [Link] method uyguluyorsanız çok işiniz düşmez.
OLAP Nedir?
Online Analytical Processing’in kısaltmasıdı[Link] bir OLAP [Link] amacı son
kullanıcıya bilgileri göstermesidir fakat bunu yaparken çok büyük data setlerini
[Link] insert ve update(tavsiye edilmez) OLTP gibi transaction transaction değil
bulk’tı[Link] güncelliği besleyen ETL’in sıklığı kadardı[Link] datalar denormalize olarak
tutulurlar OLTP’den en büyük farkı budur.(Kimball model için)
DWH Nedir?
Birden çok kaynakdan gelen dataların toplanması için kullanılan DB’[Link] BI
araçlarımız bu DB üzerine kuruludur ve bu şekilde son kullanıcıya rapor ve analiz imkanı
tanırı[Link] destek sistemleri olarakda adlandırıldığı olur(DSS).DWH’lar genellikle t-1
olarak ifade edilen bir gün öncesine kadar gü[Link]ı tablolar veya Data
Martlar(DM’ler) real time veya near real time olabilir.
Resim
kaynağı:[Link]
Tüm DWH yapıları bu şekildedir demek doğru olmaz genelde Data Sources->ETL->DWH-
>BI Tools adımları zorunlu diğerleri opsiyonel demek daha doğru olabilir.
HÜSEYİN ALBAYRAK
Data Mart Nedir?
DWH’ın tek konuya odaklanmış halidir.(Satış,Finans vb).3 Çeşit DM vardır:
1. Bağımlı DM’ler:DWH’da tüm süreç işledikten sonra DM’ye bilgi çıkılır.O
yüzden DM,DWH’a bağımlıdır.
2. Bağımsız DM’ler:DWH’dan tamamen ayrı bir süreç dolayısıyla yönetilmesi
çok ve ayağa kaldırılması çok [Link] sonrasında her DM için ETL süreçleri kendi
mantıkları daha da zor hale gelebilir.
3. Hibrit:Bazı tabloların DWH’dan bazılarının direk sourcedan geldiği DM’ler.
DM’ler farklı bir DB’ye çıkabileceği gibi DWH içerisinde DM mantığıyla da tutulabiliyor.
Fact Nedir?
Fact tablolar Kimball methodunun ana tablolarıdır.İçerisinde yalnızca Foreign Key’ler ve
Mesaure’lar [Link] Keyler Dimension table’lara gitmemiz için gereken bağlantı
sütunları iken Measure’lar ölçümlenen herş[Link] tablolar Star Schema ve Snowflake’in
tam ortasında yer alırlar. Bu tablolarda genelde PK alanı [Link] bir PK olacaksa bu
tablodaki tüm FK’lardır.
Bu tablolar dikine büyürler ve gerçekten çok büyük veri [Link] yüzden bu tabloların
partitionlı olması çok ö[Link] partition factinizin tipine ve iş sürecinize göre
değişiklik gö[Link] FK’larınızı doldurken kontrol adımları koyup
koşullarınıza uymayan kayıtlar için -1,-2 gibi id’ler basabilir dimension tablolarınıza bu
eklediğiniz -1,-2 kayıtları için kayıt atıp son kullancıya bir sorun olduğunu gösterebilirsiniz.
HÜSEYİN ALBAYRAK
Fact tabloları parititonlı yaptığımız durumlarda ETL sürecimize partitionı yoksa ekle adımı
eklediğimizden emin olmalıyız yoksa ETL sürecimiz hata alacaktır.
Factinizde yer alan CustomerID FK alanı için 1 yazıyorsa bunun hiç bir anlamı [Link]
Dim_Customer tablonuzda bu 1’in karşısında Hüseyin yazdığında veya bu customerin ili
İstanbul yazdığında kimin veya hangi ilin ne kadarlık sipariş ettiğini anlamlandırdınız
demektir.
HÜSEYİN ALBAYRAK
Resim Kaynak :[Link]
Snowflake Nedir?
Star Schemadan tek farkı Dimension table’lardan başka Dimension table’lara gittiğimiz
durumlar olabilmekte mantıksal olarak bir farkı yoktur.
HÜSEYİN ALBAYRAK
Resim Kaynak :[Link]
Geliştirilmesi daha hızlı olduğu ve daha az karmaşık olduğu için tercih [Link] çok fazla
değişikliğin olduğu yapılarda çok uygun değildir.
HÜSEYİN ALBAYRAK
3 farklı tipte tablodan oluşur:
Hub:Hublar ilgili tablonun Id'lerini,bunların yükleme zamanını ve hangi
kaynaktan gelen tutan tablolardır.
Link:Bu tablolar birbiriyle konuşacak Hubların ID'lerini ve yükleme
zamanlarını ve kaynağını tutarlar.
Satellite:Bu tablolar asıl veriyi tutan tablolardı[Link] Id'ye ait tüm veriler bu
tablolarda [Link] Satellite tablonun sadece bir tane Hub tablosu olmalıdır.
Resim kaynağı:[Link]
İnmon,Kimball ve Data Vault kıyaslamalı güzel bir araştırma yazsının linkini bırakıyorum
avantaj ve dezavantajlarına bakabilirsiniz
HÜSEYİN ALBAYRAK
[Link]
es_modeling_approaches_Inmon_Kimball_and_Data_Vault/link/5f19972892851cd5fa3f5976
/download
ETL Nedir?
Extract-Transform-Load'un kısaltmasıdı[Link] veri kaynağındandan başka bir veri kaynağına
data taşıma işleminin adıdı[Link] bir veya birden çok source DB veya Flat File'dan DWH'a
veri aktarımı için kullanılır fakat tam tersi olduğu durumlarda [Link] adımında
kaynakdan veri alınır,Transform adımında data temizliği,parçalanması veya aggregate işlemi
yapılır,Load adımında ise dönüştürülen veri yü[Link] ETL süreci için bir çok farklı firma
ürün çıkarmıştır bunlardan en çok kullanılanları şöyledir:SSIS,İnformatica,SSIS,Data
Stage,Talend,Data Services vb..Tüm bu toollar aynı şeyi yaparlar isimlendirme farkları vardır
sadece birini iyi anladığınızda diğerlerini öğrenmeniz çok kısa sürer ve genelde 1 firma
sadece 1 tanesini kullanır hepsini öğrenmek zorunda değilsiniz.
ETL aracı kullanırken olabilidiğince tool'a ait componentleri kullanmaya özen göstermeliyiz
bu yönetilebilirliği arttıracaktır.Çoğu zaman yazılan SQL'i basıp geçmek size ciddi zaman
kazandırır ama ETL sürecinde bir şey değiştirmek istediğinizde SQL'i tekrar analiz etmeniz
[Link]ıca ilişkileri kopardığınız için hangi tablo veya sütun nerede kullanılmış bilgilerini
kaybederseniz ve ciddi bir reengineering sürecine girerseniz işin içinden çıkamayabilirsiniz.
PL/SQL ile de ETL sürecinin bir kısmını veya tamamını yönetenler var fakat tavsiye
etmiyorum kodlar bir noktadan sonra çok fazla karışabiliyor.
ELT Nedir?
ELT olarak data aktarım yöntemini seçersek Extract-Load-Transform olarak süreç
değiş[Link]ı DWH'a yükledikten sonra istemiş olduğunuz transform işlemlerini DWH
üzerinde yapar.
HÜSEYİN ALBAYRAK
ETL ve ELT arasındaki farkları merak edenler için :[Link]
SCD Nedir?
Slowly Changing Dimensions ifadesinin kısaltmasıdı[Link] Dimension tablolardaki veriler
değişebilir ve bu değişim bizim için anlamlı ise bunu kaybetmek istemeyiz işte bu durumda
Dimension tablolarımızı SCD yapılarına dönüştürürü[Link] çok farklı versiyonu olmakla
beraber en çok kullanılanı Type 2 'dir.Örneğin Dim_Customer diye bir dimension tablonuz
var ve medeni durumu değişiyor ve bu sizin raporlamalarınızda önemli bir alan bu durumda
Type 2 aynı müşteri için yeni bir kayıt yarat fakat bu her iki kaydada başlangıç ve bitiş
tarihleri ve hangisinin güncel olduğunu rahatça yakalamak için de bir flag koy [Link]
durumda herhangi bir tarihte o müşterinin medeni durumu nedir rahatlıkla bulabiliriz.
HÜSEYİN ALBAYRAK
[Link] süresi kısaltmada bu yöntem elbette tek başına yeterli değil diğerlerini başka
bir yazıda uzunca yazağım.
CDC yapabilmek için elinizde bir tarih veya sayısal bir alan olmalı DWH'ıma yüklediğim son
kayıt budur diyebilmek iç[Link] bu alandan büyük verileri sadece çektiğinizde daha ufak bir
data seti elde [Link] önemli nokta şu PK alanınızı alamazsınız.Çünkü CDC
içersinde insert kadar update de barındırı[Link] yüklediğiniz PK 100 olsun 50 tane insert 30
tane update geldi bu durumda siz sadece 50 tane insert olanı yakalayabilirsiniz çünkü 100den
büyükleri alacaksını[Link] aslında siz 30 update'i almanız lazım o yüzden update veya insert
geldiğinde tablonuzdaki değeri güncelleyen bir alan olmalı.50 inserti yüklemek kolay çünkü
zaten DWH'da yok fakat updateler için DWH'da var olan kayıtları silip yüklemeniz gerekir.
BI Nedir?
Business Intelligence ifadesinin kısaltmasıdı[Link]ç ilgili toollarla anlamlı
analizler,dashboardlar hazırlamak ve çıkarımlar yapmaktı[Link]'ın üzerine kuruludur aslında
tüm ETL ve DWH işlerimizin görünmeye başladığı kısım [Link]ığımız DWH görsele
dönüşü[Link]ıca son kullanıcılara(iş birimleri) self servis imkanı da sağlamamıza yarar ve
herkes istediği kırılım ve filtrelerde analizlerini [Link]ıcının her isteği aslında ilgili
tablolara bir sql isteği olarak [Link] BI toolu kendine özgü farklılıklar ve yetenekler
barındırsa da genel amaç dashboardlar-self servis yapılarıdır ve herkesin yetkisi dahilinde
bilgiye ulaşmasıdır.
HÜSEYİN ALBAYRAK
Data Mining Nedir?
Büyük veri setlerinde şirketin karlılığını arttıracak anormallikler,farkında olunmayan ilişkiler
ve korelasyonların tespiti için yapılan işlemler [Link] istatistik bilgileriyle,makine
öğrenmesi veya yapay zekayla verilerinizi analiz edebilir çıktılar [Link]
dünyasında DWH'cıların direk ilgi alanı olmamakla beraber data mining yapan ekiplere veri
sağladığımız için aslında ilişkimiz bulunmaktadı[Link] medya veya web sitesi
ziyaretlerinizde karşınızda çıkan reklamlarda kişiselleştirilmiş reklamlar olup bir mining
sonucunda size o reklam sunuluyor veya netflix de bir bir dizi spotifyda bir sanatçıda.
Basit bir excelde de çıkardığınız bulgular basit düzeyde bir mining sayılabilir fakat piyasada
en çok kullanılan ve daha profesyonel düzeyde kullanılan toollar ve diller
şöyle:SPSS,SAS,R,Pyhton,Knime,Rapidminer vb.
FTP Nedir?
File Transfer Protocol’ün kısaltmasıdır.
İki farklı bilgisayar arasında dosya transferi yapmanıza izin veren bir yapıdı[Link] FTP’de
bizim için source veya target olabilir.
SFTP olarak güvenlikli versiyonu daha çok tercih [Link]ı şey olmakla beraber
SFTP daha güvenlikli bir yapıdı[Link] bir kullanıcı ve şifre verdikten sonra ilgili SFTP’ye
bağ[Link] da yetkilendirmeler mevcuttur her klasör ve dosya için okuma,yazma
ve execute etme yetkisi verilebilir ihityaca gö[Link] r,w,x olarak ifade edildiği gibi
rakamlarla da edilebilir.
HÜSEYİN ALBAYRAK
Daha fazlası için : [Link]
Cron Nedir?
Cron Unix işletim sisteminde belirli aralıkla komutlarınızı otomatik yürütmek için yazılan bir
zamanlayıcıdı[Link] Task Scheduler’a benzer.
Bazı ETL toolların da geliştirme işlemi yaptıktan sonra bu ETL job'ımızın her gece veya her
saat başı çalışmasını isteriz.İşte bu durumlarda sh uzantılı dosyamız için bir cron yazarız ve
unix makinemizde istenilen aralıkta bu job çalışmaya başlayacaktı[Link]ıcısı bir tık
farklı merak edenler için link bırakıyorum.
[Link]
Öncelikle bir tane Partition function yaratmanız [Link] function için hangi aralıkda
tarihler olmalı ise onları belirtebilirsiniz gün gün veya ay [Link] kaç farklı partition
oluşturduğunuz çok öenmli adedi not edin çünkü +1 adedi için parititon scheme
oluşturacağız.
HÜSEYİN ALBAYRAK
Informatica
Nifi
Airflow
AWS Glue
Pentaho
IBM Datastage
Diğer
BI Araçları Nelerdir?
Power BI
SSRS
Tableau
SAP BO
Oracle BI
Qlik
Looker
IBM Cognos
MicroStrategy
Diğer
Microsoft
Amazon
Google
Ortaya çıkış amacı DWH’ın yetersiz kalmasıydı ve çünkü unstructured veya semi-
structured formatlarda sorun yaşı[Link] data size’lar çok ciddi bir şekilde artmış
ayrıca bir çok veri birimi bu verilere ulaşıp işlemek istediğinden merkezi bir konum bir
lake ve ham halde verilerin burada tutulması fikri kabul görmüştür.
Aynı zaman diğer SaaS yani servisleri de burayla entegre kullanmak çok rahattır
çünkü bir ML çalıştırmak istediğinizde veya Databricks ya da Spark kullanmak
istediğinizde bunların on-prem sistemde ayağa kaldırıp hepsinin düzgün çalışmasını
ve birbiri ile ileitşime girmesi için izinlerle uğraşılması vs inanılmaz yorucu
olacağından yine çok mantıklı bir hale gelir.
Türkiye de Cloud ürünler, özellikle KVKK ve diğer regülasyonlardan dolayı hala çok
sık kullanılmasada geleceğin burada olduğu kesindir.
HÜSEYİN ALBAYRAK
Ayrıca bu kadar büyük dataları işlemek için on-prem sistemlerde yatay mimari
kurmak özellikle küçük-orta firmalar için çok zorlayıcı olacağından Cloud öne
çıkmaktadır.
Bir çok daha güçsüz makineyi birleştirip çok güçlü bir makine elde etmektir
aslı[Link] load balancing ile yük bu makineler arasında dağılır ve biri çökerse
hemen diğeri işe devam [Link] makinelerede isterseniz hardware ekleyebilirsiniz
ama yeni bir server eklemek daha uygunsa bunu da yapabilirsiniz ve performansı
arttırabilirsiniz.
Columnar DB Nedir?
Bir diğer adı column-oriented databasedir.Özellikle OLAP sistemlerde çok kullanılır
çünkü bizim sorgularımız genellikle bir kaç sütun üzerinde aggregate şeklindedir bu
da bize tüm satırlar yerine belirli sütunlarla hızlı performans sağlar.
Örnek DB’ler Amazon Redshift,Google Bigquery,Snowflake,Synapse SQL pool vb.
HÜSEYİN ALBAYRAK
MPP(Massively Parallel Processing) Nedir?
Tüm klasik cloud lake çözümlerinin databaseleri aslında bu yapıda çalışır demek
yanlış olmaz.Özellikle DWH’da çok kullanılan bu yöntem vermiş olduğumuz devasa
boyuttaki dataları altında çalışan birimlere böler ve sonra birleştirip size geri
döndürür.
Bu sayede çok hızlı bir şekilde sonuca ulaşırız ama burada unutmamak gereken
konu sorgu süresi en uzun süreniz biriminizin süresi+ birleştirme süresidir.
Azure SQL Pool üzerinden örnek verirsek bir control node vardır bu compute node
yani işi yapacak nodelara sorguyu bö[Link] sizin datalarınız tek bir node üzerine
yığılmışsa işte bu çok uzun sürer sanki MPP değilmiş gibi tek node’u [Link] da
Data skew dediğimiz konudur.
HÜSEYİN ALBAYRAK
CTE(Common Table Expression) Nedir?
Aslında subquery olarak yazdığımız sorgulardı[Link] subquery’de bunu
yazmaktansa With ifadesi ile yazar memory’de bunu saklarız ve defalarca
[Link] subquery olarak yazsaydık aynı sorguyu defalarca kez yazmamız
gerekirdi bu da defalarca okuma işlemi demekti.
Eğer aynı subquery’i birden çok kez kullanıyorsanız sorgularınızda bunu WITH ile bir
temp tabloya memoryde tek bir kere okuduğunuzdan sorgunuz inanılmaz
hızlanacaktır.
HÜSEYİN ALBAYRAK