ETL nedir?
ETL, birden çok kaynak sistemden veri çıkaran, değiştiren (hesaplamalar, birleştirmeler vb. yoluyla) ve ardından Veri Ambarı sistemine koyan bir süreçtir. ETL, Ayıkla, Dönüştür ve Yükle anlamına gelir.
Bir Veri ambarı oluşturmanın, çok sayıda kaynaktan veri çekmek ve onu bir Veri ambarı veritabanına beslemek kadar basit olduğuna inanmak kolaydır. Bu durumdan çok uzaktır ve karmaşık bir ETL prosedürü gereklidir. Teknik olarak karmaşık olan ETL süreci, geliştiriciler, analistler, testçiler ve üst düzey yöneticiler dahil olmak üzere çeşitli paydaşların aktif katılımını içerir.
Bir karar verme aracı olarak değerini korumak için, veri ambarı sisteminin ticari gelişmelerle senkronize bir şekilde gelişmesi gerekir. ETL, çevik, otomatikleştirilmiş ve uygun şekilde belgelenmesi gereken bir veri ambarı sisteminin düzenli (günlük, haftalık, aylık) bir sürecidir.
ETL Nasıl Çalışır?
Burada ETL sürecinin nasıl çalıştığını adım adım öğreneceğiz:
Adım 1) Ekstraksiyon
Veriler, kaynak sistemden çıkarılır ve çıkarma sırasında hazırlama alanına yerleştirilir. Herhangi bir dönüşüm gerekiyorsa, kaynak sistemin performansının zarar görmemesi için aşamalandırma alanında gerçekleştirilir. Hasarlı veriler doğrudan kaynaktan Veri ambarı veritabanına aktarılırsa geri alma zor olacaktır. Ayıklanan verileri Veri ambarına taşımadan önce, hazırlama alanında doğrulanabilir.
Veri ambarları, farklı donanımlara, veritabanı yönetim sistemlerine, işletim sistemlerine ve iletişim protokollerine sahip sistemleri birleştirebilir. Veri ambarları, sistemleri farklı DBMS, donanım, işletim sistemleri ve iletişim protokolleriyle birleştirmelidir. Kaynaklar, ana bilgisayarlar, özelleştirilmiş uygulamalar, ATM'ler ve çağrı anahtarları gibi temas noktası cihazları, metin dosyaları, elektronik tablolar, ERP, satıcılardan ve ortaklardan alınan veriler vb. gibi eski programları içerebilir.
Bu nedenle, verileri çıkarmadan ve fiziksel olarak yüklemeden önce mantıksal bir veri haritası gereklidir. Kaynaklar ve hedef veriler arasındaki bağlantı bu veri haritasında gösterilir.
Üç Veri Çıkarma yöntemi:
- Kısmi Ekstraksiyon – Bir kayıt değiştirildiğinde kaynak sistem sizi uyarıyorsa, verileri elde etmenin en basit yolu budur.
- Kısmi Çıkarma (güncelleme bildirimi olmadan) – Bir güncelleme gerçekleştiğinde tüm sistemler bir bildirim gönderemez; ancak değiştirilen kayıtları belirtebilir ve bu kayıtların çıkarılmasını sağlayabilirler.
- Tam özü – Bazı sistemler hangi verilerin değiştirildiğini belirleyemez. Bu senaryoda, verileri sistemden çıkarmanın tek yolu tam bir ayıklama gerçekleştirmektir. Bu yaklaşım, önceki ekstrenin yedeğini almayı gerektirir.
yapılan değişiklikleri tanımlamak için eldeki aynı format.
Kullanılan yöntem ne olursa olsun, ayıklamanın kaynak sistemlerin performansı veya yanıt süresi üzerinde bir etkisi olmamalıdır. Bunlar gerçek zamanlı üretim veritabanlarıdır. Herhangi bir yavaşlama veya kilitlenme şirketin kârlılığını etkileyebilir.
Adım 2) Dönüşüm
Kaynak sunucudan alınan veriler hamdır ve orijinal durumunda kullanılamaz. Sonuç olarak, temizlenmesi, haritalanması ve dönüştürülmesi gerekir. Gerçekte bu, anlamlı BI raporları üretmek için ETL sürecinin değer kattığı ve verileri dönüştürdüğü kilit adımdır.
Ayıklanan verilere bir dizi işlev uyguladığınız temel bir ETL konseptidir. Doğrudan hareket or içinden geçmeka, herhangi bir dönüşüm gerektirmeyen veri türüdür.
Dönüşüm adımında veriler üzerinde özelleştirilmiş işlemler gerçekleştirebilirsiniz. Örneğin, müşterinin veritabanında olmayan bir satış toplamı geliri istediğini varsayalım. veya bir tablodaki ad ve soyadlar ayrı sütunlardaysa. Yüklemeden önce birleştirilebilirler.
Aşağıda, veri bütünlüğü sorunlarına ilişkin bazı örnekler verilmiştir:
- Aynı kişinin Prashant, Parshant vb. gibi farklı yazımları.
- Bir şirket adını temsil etmenin Google, Google Inc. gibi birçok yolu vardır.
- Cleaveland ve Cleveland gibi çeşitli isimler kullanılmaktadır.
- Aynı müşteri için farklı uygulamalar tarafından birden fazla hesap numarası üretilmesi mümkündür.
- Bazı veri gerekli dosyalar boş bırakılmıştır.
Adım 3) Yükleme
ETL sürecindeki son aşama, verileri hedef veri ambarı veritabanına yüklemektir. Tipik bir veri ambarında nispeten kısa bir süre içinde büyük miktarda veri yüklenir. Sonuç olarak, yükleme işlemi performans için optimize edilmelidir.
Bir yük arızasının meydana gelmesi durumunda, veri bütünlüğünden ödün vermeden operasyonların arıza noktasından yeniden başlayabilmesi için kurtarma prosedürleri uygulamaya konmalıdır. Veri Ambarı yöneticileri, sunucu performansına dayalı olarak yükleri izlemeli, devam ettirmeli ve durdurmalıdır.
Yükleme Türleri:
- İlk Yük - hepsini doldurmak
Veri Ambarı tabloları - artan yük - devam eden uygulama
düzenli olarak gerektiği gibi değişiklikler - Tam Yenileme - içeriği temizleme
bir veya daha fazla tablonun ve bunların yeni verilerle yeniden yüklenmesi
Yük doğrulaması
- Anahtar alan verilerinin eksik veya boş olmadığını kontrol edin.
- Hedef tablolara dayalı modelleme görünümleri test edilmelidir.
- Birleşik değerleri3 ve hesaplanan ölçümleri inceleyin.
- Boyut ve geçmiş tablolarındaki veri kontrolleri.
- Yüklenen olgu ve boyut tablosundaki BI raporlarını inceleyin.
PythonScript Kullanarak ETL Kurulumu
Sonuç olarak, iş zekası için veri toplama işlemi yapmak üzere çeşitli veritabanlarından bir veri ambarına temel Dönüşüm Yükü Çıkarma (ETL) yürütmeniz gerekir. Temel kullanım durumunuz için aşırı olduğuna inandığınız birkaç ETL paketi mevcuttur.
Bu makalede size MySQL, SQL sunucusu ve firebird'den nasıl veri çıkarılacağını göstereceğim. Python 3.6'yı kullanarak verileri dönüştürün ve SQL sunucusuna (veri ambarı) yükleyin.
Öncelikle projemiz için bir dizin oluşturmamız gerekiyor:
python_etl |__main.py |__db_credentials.py |__variables.py |__sql_queries.py |__etl.py
ETL'yi Python kullanarak kurmak için proje dizininizde aşağıdaki dosyaları oluşturmanız gerekir..
- db_credentials.py: Tüm veritabanlarına bağlanmak için gereken tüm bilgilere sahip olmalıdır. Veritabanı Parolası, Port Numarası vb.
- sql_queries.py: Dize biçimindeki verileri ayıklamak ve yüklemek için yaygın olarak kullanılan tüm veritabanı sorguları mevcut olmalıdır.
- etl.py: Veritabanına bağlanın ve gerekli tüm prosedürleri gerçekleştirerek gerekli sorgulamaları yapın.
- ana.py: Operasyon akışını yönetmekten ve temel operasyonları belirli bir sırayla yürütmekten sorumludur.
sql_queries.py'nin bu bölümünde, kaynak veritabanlarından ayıklamak ve hedef veritabanımıza (veri ambarı) aktarmak için tüm sql sorgularımızı depolayacağımız yer burasıdır.
Veritabanı Kimlik Bilgilerini ve Değişkenlerini Ayarlayın
Değişkenler.py'de, tabanın adını kaydetmek için bir değişken oluşturun.
datawarehouse_name = 'veri_warehouse_name'
db_credentials.py'de tüm kaynak ve hedef veritabanı bağlantı dizelerinizi ve kimlik bilgilerinizi aşağıda gösterildiği gibi yapılandırın. Yapılandırmayı bir liste olarak kaydedin, böylece daha sonra birçok veritabanı aracılığıyla gerektiğinde yineleyebiliriz.
değişkenlerden import datawarehouse_name datawarehouse_name = 'your_datawarehouse_name' # sql-server (hedef db, datawarehouse) datawarehouse_db_config = { 'Trusted_Connection': 'yes', 'driver': '{SQL Server}', 'server': 'datawarehouse_sql_server', ' database': '{}'.format(datawarehouse_name), 'user': 'your_db_username', 'password': 'your_db_password', 'autocommit': True, } # sql-server (source db) sqlserver_db_config = [ { 'Trusted_Connection ': 'yes', 'sürücü': '{SQL Server}', 'sunucu': 'your_sql_server', 'veritabanı': 'db1', 'user': 'your_db_username', 'password': 'your_db_password', ' autocommit': True, } ] # mysql (kaynak db) mysql_db_config = [ { 'user': 'your_user_1', 'password': 'your_password_1', 'host': 'db_connection_string_1', 'database': 'db_1', } , { 'user': 'your_user_2', 'password': 'your_password_2', 'host': 'db_connection_string_2', 'database': 'db_2', }, ] # firebird (kaynak db) fdb_db_config = [ { 'dsn' : "/your/path/to/source.db", 'user': "your_username", 'password': "siz r_şifre", } ]
SQL Sorguları
sql_queries.py'nin bu bölümünde, kaynak veritabanlarından ayıklamak ve hedef veritabanımıza (veri ambarı) aktarmak için tüm sql sorgularımızı depolayacağımız yer burasıdır.
Birden çok veri platformuyla çalıştığımız için her veritabanı için çeşitli sözdizimleri uygulamak zorundayız. Bunu veritabanı türüne göre sorguları ayırarak yapabiliriz.
# örnek sorgular, farklı db platformlarında farklı olacaktır firebird_extract = (''' fbd_table FROM fbd_column_1, fbd_column_2, fbd_column_3 SEÇİN; ''') firebird_insert = (''' INSERT INTO table (column_1, column_2, column_3) DEĞERLER (?, ?, ?) ''') firebird_extract_2 = (''' fbd_table_1'DEN fbd_column_2, fbd_column_3, fbd_column_2 SEÇİN; ''') firebird_insert_2 = (''' tablo_2'YE EKLE (sütun_1, sütun_2, sütun_3) DEĞERLER (?, ?, ? ) ''') sqlserver_extract = (''' sqlserver_table'DAN sqlserver_column_1, sqlserver_column_2, sqlserver_column_3 SEÇİN ''') sqlserver_insert = (''' Tabloya INSERT (sütun_1, sütun_2, sütun_3) DEĞERLER (?, ?, ?) ''' ) mysql_extract = (''' mysql_table '''DAN mysql_column_1, mysql_column_2, mysql_column_3 SEÇİN ''') mysql_insert = (''' INSERT INTO tablo (sütun_1, sütun_2, sütun_3) DEĞERLER (?, ?, ?) ''') # dışa aktarma sorguları class SqlQuery: def __init__(self, extract_query, load_query): self.extract_query = extract_query self.load_query = load_query # cre ate instances for SqlQuery class fbd_query = SqlQuery(firebird_extract, firebird_insert) fbd_query_2 = SqlQuery(firebird_extract_2, firebird_insert_2) sqlserver_query = SqlQuery(sqlserver_extract, sqlserver_insert) mysql_query = SqlQuery(mysql_extract, mysql_insert) # store as list for iteration fbd_queries = [fbdquery, fbd_query_2] sqlserver_queries = [sqlserver_query] mysql_queries = [mysql_query]
Dönüştürme Yükünü Çıkar
Yukarıda bahsedilen veri kaynakları için Python kullanarak ETL kurmak için aşağıdaki modüllere ihtiyacınız olacak:
# piton modülleri mysql.connector'ı içe aktarın pyodbc'yi içe aktarın fdb # değişkenlerini değişkenlerden içe aktarın datawarehouse_name'yi içe aktarın
Bunun içinde iki teknik kullanabiliriz: etl() ve etl_process().
etl_process(), bir veritabanı kaynak bağlantısı kurma ve veritabanı platformuna dayalı olarak etl() yöntemini çağırma prosedürüdür.
İkinci yöntem olan etl() yönteminde ise önce ayıklama sorgusunu çalıştırır, ardından değişken data içindeki SQL verilerini depolar ve veri ambarımız olan hedeflenen veritabanına ekler. Veri dönüşümü, tip demetinin veri değişkeni değiştirilerek gerçekleştirilebilir.
def etl(query, source_cnx, target_cnx): # kaynak db'den veri çıkar source_cursor = source_cnx.cursor() source_cursor.execute(query.extract_query) data = source_cursor.fetchall() source_cursor.close() # veri ambarı db if'e yükle veri: target_cursor = target_cnx.cursor() target_cursor.execute("USE {}".format(datawarehouse_name)) target_cursor.executemany(query.load_query, data) print('data db ambarına yüklendi') target_cursor.close() else : print('data is empty') def etl_process(queries, target_cnx, source_db_config, db_platform): # kaynak db bağlantısı kurun if db_platform == 'mysql': source_cnx = mysql.connector.connect(**source_db_config) elif db_platform == 'sqlserver': source_cnx = pyodbc.connect(**source_db_config) elif db_platform == 'firebird': source_cnx = fdb.connect(**source_db_config) başka: 'Hata! tanınmayan db platformu' # sorgularda sorgu için sql sorgularında döngü: etl(query, source_cnx, target_cnx) # kaynak db bağlantısını kapatın source_cnx.close()
Her Şeyi Bir Araya Getirmek
Şimdi, bir sonraki adımda, main.py'deki tüm kimlik bilgilerinin üzerinden geçebilir ve tüm veritabanları için etl'yi çalıştırabiliriz.
Bunun için gerekli tüm değişkenleri ve yöntemleri içe aktarmalıyız:
# db_credentials değişkenlerinden import datawarehouse_db_config, sqlserver_db_config, mysql_db_config, fbd_db_config from sql_queries import fbd_queries, sqlserver_queries, mysql_queries değişkenlerinden import * # metodlar etl'den import etl_process
Bu dosyadaki kod, veritabanına bağlanmak ve Python kullanarak gerekli ETL işlemlerini yürütmek için kimlik bilgileri üzerinde yineleme yapmaktan sorumludur.
def main(): print('starting etl') # hedef veritabanı (sql-server) için bağlantı kurun target_cnx = pyodbc.connect(**datawarehouse_db_config) # kimlik bilgileri arasında geçiş yapın # mysql_db_config'de yapılandırma için mysql: deneyin: yazdır("yükleniyor) db: " + config['database']) etl_process(mysql_queries, target_cnx, config, 'mysql') hariç Hata olarak İstisna: print("etl for {} has error".format(config['database'])) print ('hata mesajı: {}'.format(hata)) devam et # sqlserver_db_config'deki yapılandırma için sql sunucusu: deneyin: print("yükleniyor db: " + config['database']) etl_process(sqlserver_queries, target_cnx, config, ' sqlserver') dışında Hata olarak İstisna: print("etl for {} has error".format(config['database'])) print('hata mesajı: {}'.format(error)) devam et # yapılandırma için firebird fbd_db_config: deneyin: print("yükleniyor db: " + config['database']) etl_process(fbd_queries, target_cnx, config, 'firebird') istisna dışında Hata olarak istisna: print("etl for {} has error".format(config ['veritabanı'])) print('hata mesajı: {}'.fo rmat(hata)) __name__ == "__main__" ise target_cnx.close() ile devam edin: main()
Terminalinize python main.py yazın ve saf bir python betiği kullanarak bir ETL oluşturdunuz.
ETL Araçları
Piyasada birçok Veri Ambarı aracı bulunmaktadır. İşte en ünlü örneklerden bazıları:
1. MarkLogic:
MarkLogic, veri entegrasyonunu daha kolay ve daha hızlı hale getirmek için bir dizi iş yeteneği kullanan bir veri ambarı sistemidir. Belgeler, ilişkiler ve meta veriler gibi birçok türde veriyi sorgulayabilir.
https://www.marklogic.com/product/getting-started/
2. Kahin:
Oracle, endüstrinin en popüler veritabanıdır. Hem şirket içi hem de bulut hizmetleri için çok çeşitli Veri Ambarı çözümleri sunar. Operasyonel verimliliği artırarak daha iyi müşteri deneyimlerine yardımcı olur.
https://www.oracle.com/index.html
3. Amazon RedShift'i:
Redshift, Amazon'dan bir veri ambarı çözümüdür. Çeşitli veri türlerini standart SQL ve mevcut iş zekası araçlarıyla analiz etmek için basit ve uygun maliyetli bir çözümdür. Ayrıca, petabaytlarca yapılandırılmış veri üzerinde karmaşık sorguların yürütülmesini sağlar.
https://aws.amazon.com/redshift/?nc2=h_m1
Sonuç
Bu makale size ETL'nin ne olduğu hakkında derin bir anlayış sağlamanın yanı sıra Python'da ETL'nizi nasıl kuracağınıza dair adım adım bir eğitim verdi. Ayrıca, günümüzde çoğu kuruluşun ETL veri boru hatlarını oluşturmak için kullandığı en iyi araçların bir listesini de verdi.
Günümüzde ise çoğu kuruluş, oldukça dinamik bir yapıya sahip büyük miktarda veriye sahiptir. Bu tür veriler için sıfırdan bir ETL işlem hattı oluşturmak, kuruluşların bu işlem hattını oluşturmak ve ardından yüksek veri hacmine ve Şema değişikliklerine ayak uydurabilmesini sağlamak için çok sayıda kaynak kullanması gerekeceğinden zor bir prosedürdür.
Yazar hakkında
Prashant Sharma
Şu anda, Vellore Teknoloji Enstitüsü'nden Teknoloji Lisans Derecemi (B.Tech) takip ediyorum. Programlama ve yazılım geliştirme, makine öğrenimi, Derin Öğrenme ve veri bilimi dahil olmak üzere gerçek uygulamaları konusunda çok heyecanlıyım.
Umarım makaleyi beğenirsin. Benimle bağlantı kurmak istiyorsanız şu adresten bağlanabilirsiniz:
veya başka herhangi bir şüpheniz varsa, posta gönder bana da
İlgili bağlantılar
- '
- "
- Hesap
- aktif
- Türkiye
- Amazon
- analytics
- uygulamaları
- ALAN
- göre
- Otomatik
- yedek
- artırılması
- inşa etmek
- bina
- iş
- iş zekası
- çağrı
- Çekler
- cleveland
- bulut
- bulut hizmetleri
- kod
- Yakın İletişim
- şirket
- bağ
- devam etmek
- Oluşturma
- Tanıtım
- veri
- veri entegrasyonu
- veri bilimi
- veri ambarı
- veri depoları
- veritabanı
- veritabanları
- derin öğrenme
- geliştirmek
- geliştiriciler
- gelişme
- Cihaz
- Boyut
- evraklar
- sürücü
- verim
- vb
- infaz
- Yöneticiler
- Deneyimler
- çıkarma
- Hulasa
- Başarısızlık
- Ad
- akış
- biçim
- taze
- tam
- rehberlik
- donanım
- okuyun
- Yüksek
- tarih
- Ne kadar
- Nasıl Yapılır
- HTTPS
- belirlemek
- darbe
- ithal
- Dahil olmak üzere
- bilgi
- bütünleşme
- İstihbarat
- sorunlar
- IT
- anahtar
- büyük
- ÖĞRENİN
- öğrenme
- çizgi
- Liste
- yük
- makine öğrenme
- yönetim
- harita
- pazar
- medya
- En popüler
- hareket
- isimleri
- tebliğ
- sayılar
- Teklifler
- işletme
- işletim sistemleri
- Operasyon
- kehanet
- sipariş
- organizasyonlar
- Diğer
- ortaklar
- Şifre
- performans
- platform
- Platformlar
- Popüler
- Üretilmiş
- üretim
- Programlama
- Programlar
- proje
- çeken
- Python
- Çiğ
- gerçek zaman
- Gerçeklik
- kayıtlar
- kurtarma
- İlişkiler
- Raporlar
- Kaynaklar
- yanıt
- gelir
- Bilim
- Hizmetler
- set
- kısa
- Basit
- So
- Software
- yazılım geliştirme
- Çözümler
- SQL
- Aşama
- Eyalet
- mağaza
- mağaza
- sistem
- Sistemler
- Hedef
- teknoloji
- teknikleri
- Teknoloji
- Kaynak
- zaman
- Dönüşüm
- öğretici
- Güncelleme
- değer
- satıcıları
- hacim
- depo
- Depolama
- haftalık
- İş
- çalışır