Çalıştığım iş yerinde Apache Superset iş zekası ürününü kullanmaya karar verdik. Şimdilik işin başındayız. Çalışmanın başında bir yerde bir engelle karşılaştık. Uzun süredir Power BI kullanan biri olarak bu engel beni açıkçası şaşırttı. İş yerinde birden fazla yazılım kullanıyoruz ve bu yazılımlar arasında farklı veri tabanları kullandığımız için bir dashboard hazırlarken bu verileri birleştirmemiz gerekiyordu. Ne yazık ki ‘Superset’ bize bu imkanı vermiyordu. Bunun için çeşitli araştırmalar yapmamıza rağmen bir sonuca ulaşamadık. Yani Superset farklı veri tabanlarına bağlanıyor ancak bunlar arasında istediğimiz şekilde bir iletişim sağlayamıyordu. Çözüm için Python ile yapılarak aktarım Postgre, Oracle ve SQL server veritabanlarına bağlanıp bu verileri birleşik bir şekilde sunucumuzda kurulu olan SQL server veritabanına aktarmaya karar verdik. Bu sayede Superset iş zekası yazılımına aktardığımız veritabanından bu verileri çekerek kolayca dashboard oluşturabildik. Bu yazımızda Python ile veritabanlarından gelen verileri birleştirip SQL Server (farklı bir veritabanı da olabilir) veritabanına nasıl aktaracağımızı görebilirsiniz.
Aşağıdaki örnekte Postgre, Oracle ve SQL Server veritabanlarında yazılan sorgulara göre kayıtlar alınıyor ve birleştirilerek Sql server veritabanına gönderiliyor. Daha sonra asıl işimiz olan iş zekasında bu birleştirilmiş veriler ile bir dashboard hazırlama işini ayrı bir yazıda anlatacağım.
## Kullanılan Pyton kütüphaneleri:
import pandas as pd
#Pandas, çeşitli kaynaklardan veri almak için sıklıkla kullanılan bir araçtır.
from sqlalchemy import create_engine, Table, Column, DateTime, MetaData,REAL
#sqlalchemy, Python'da ilişkisel veri tabanlarına erişim sağlayan bir kütüphanedir (PostgreSQL, MySQL, SQLite vb.)
import pyodbc
##pyodbc kütüphanesi, ODBC uyumlu bir sürücü kullanarak bir veri tabanına bağlanmanıza, sorgular göndermenize ve sonuçlar almanıza olanak tanır.
import os
##os modülü Python'un temel kütüphanelerinden biridir ve genellikle çeşitli işletim sistemi işlemlerini gerçekleştirmek için kullanılır.
os.environ["PYTHONIENCODING"]="UTF-8″
# Bu ayar, Python'un özellikle dosya okuma/yazma ve metin işleme için hangi karakter (UTF-8) kodlamasını kullanacağını belirler
# Örnek olarak gerçekleştireceğimiz PostgreSQL, Oracle, SqlServer Veritabanları bağlantı ayarları aşağıdaki gibi girilir:
# PostgreSQL bağlantı
pg_engine = create_engine('postgresql://user_name:password@host/database_name', echo=True)
# Oracle bağlantı
oracle_engine = create_engine('oracle://user_name:password@host:port/database_name', echo=True)
# SQL Server bağlantı
sql_server_connection = pyodbc.connect('DRIVER={SQL Server};SERVER=host;DATABASE=database_name;UID=user_name;PWD=password')
# Veritabanı sorguları aşağıdaki gibi girilir:
# Oracle SQL query
query_oracle = """
select id, name from table_name
"""
# PostgreSQL query
query_postgres = """
select id, number from table_name
"""
# SQL Server query
query_sql_server = """
select id, address from table_name
"""
#Veritabanı sorgularını çalıştıran ve sonucu bir Pandas DataFrame'e dönüştüren kodlar:
# Get PostgreSQL datas
pg_df = pd.read_sql_query(query_postgres, pg_engine)
# Get Oracle data
oracle_df = pd.read_sql_query(query_oracle, oracle_engine)
# Get SQL Server data
sql_server_df = pd.read_sql_query(query_sql_server, sql_server_connection)
# Verilerin birleştirilmesi işlemi: Burada id alanları ortak olduğunu düşünürsek id alanları left yöntemi ile yazılır.
merged_df = pd.merge(oracle_df, sql_server_df, on='id', how='left')
merged_df = pd.merge(merged_df, pg_df, on='id', how='left')
#Veriler birleştirildikten sonra verilerin aktarılacağı SQL Server bağlantı ayarları aşağıdaki gibi girilir.
sql_server_connection = pyodbc.connect('DRIVER={SQL Server};SERVER=host;DATABASE=database_name;UID=user_NAME;PWD=PASSWORD')
# Müşteri tablosu zaten mevcutsa silinir. Eğer ilk defa aktarım yapılacaksa bu işlem kapatılır. Ben aktarım yaparken her seferinde kayıtları silip tekrar aktarmayı tercih ediyorum
sql_server_connection.execute("DROP TABLE Customer;")
# merged_df veri çerçevesini `Customers` tablosuna aktarın
with sql_server_connection as con:
merged_df.to_sql('Customers', con, if_exists='append', index=None, chunksize=1000)
# Database bağlantısını kapatın
sql_server_connection.close()
#Aktarım sonunda verilecek uyarı:
print("Data has been successfully imported into Microsoft SQL Server database.")
AHMET GÜNOĞLU
ERP Consultant and Business Intelligence Expert
https://www.ahmetgunoglu.com/blog
https://medium.com/@ahmetgunnnnn