Odtü İstatistik Kulübü ile Verinin Kadim Dili SQL Etkinliği

ODTÜ İstatistik Kulübü’nün ev sahipliğinde canlı bir eğitim gerçekleştirdik.
350 tekil izleyicinin canlı izlediği eğitimimiz cevval katılımcılardan gelen talep üzerine 2 saat civarında planlanmışken 4 saat kesintisiz sürdü.
Bu 4 saat için de ise şunları öğrendik.
-Veritabanı Kavramı
-Veritabanı Yönetim Sistemi Kavramı
-Sanal Makine Kavramı
-Sanal Makine kurulumu (VMWare üzerine Windows Server 2016)
-SQL Server kurulumu (Server işletim sistemi üzerine bilinçli ve doğru şekilde kurulum yapma)
-Normalizasyon ve veritipleri
-SQL Komutları (Select,Insert,Update,Delete,Truncate)
-Where Condition kullanımı
-Order by komutu
-Aggregate functions (Sum,min,max,avg,count)
-Group By kavramı (uygulamalı ve örnek senaryo çözümlü)
-Having kullanımı
İlişkisel veritabanı kavramı
Join kavramı, çeşitleri ve uygulamaları

konularını uygulamalı ve gerçek verisetleri üzerinde gerçekleştirdik.
Kaçıranlar ya da tekrar izlemek isteyenler buradaki linkten izleyebilirler.
İlginize tekrardan çok teşekkür ederim.
ODTÜ İstatistik METU STAT

Microsoft MVP oldum!

Aralık başında Data Platform kategorisinde Microsoft MVP seçildiğim haberini paylaşmıştım. Ödülüm de elime ulaştı. Doğum günümden yaklaşık bir hafta kadar sonra.
Sanırım daha güzel bir doğum günü hediyesi olamazdı.
Çok teşekkürler MVP Award.

Hayatımda çok çok önemli bir kilometre taşı oldu.
İnşallah bundan sonraki hedefim halkaları çoğaltmak olacak.
Bu konuda Hakan UzunerDaron Yondem ve Dr. Erdal Ozkaya gibi bu işin kitabını yazanların tavsiyelerini bolca dinlemek gerek. 😊

#mvpbuzz

Sen SQL’i ne sandın webcast.

Kablosuz Beyin , Eru Wib ve DSC Erciyes topluluklarının düzenlemiş olduğu “Sen SQL’i ne sandın?” isimli etkinliğimizi gerçekleştirdik.
Canlı atölye formatında olan etkinliğimize gerek Youtube gerekse Teams üzerinden yaklaşık 250 kişi katıldı.
Bir iki kez yaptığımız 5’er dakikalık kamera pil değiştirme aralarını saymazsak kesintisiz 4 saat civarında süren çok keyifli bir etkinlik oldu.

-Büyük veri
-Veritabanı güvenliği
-TSQL’in incelikleri
-Verisetlerini oluşturma
-Fulltext search
-Json veri ile çalışma
-Sorgu performansı

gibi her biri bir atölyenin konusu olabilecek konularda gerçek uygulamalar gerçekleştirdik.

Umarım katılımcılar hem keyif almıştır hem de faydalanmıştır.
Başka bir etkinlikte görüşmek dileğiyle…

Datasetleri Nasıl Hazırlıyorum -1

Veribilimi ile uğraşanlar için gerçek veri çok önemli. Ancak bu veriyi her zaman hazır bulamayabiliyoruz. Bu anlamda hem başka kaynaklardan bulduğumuz verileri çekme hem de kendi verilerimizi generate etme konularında bir video serisi hazırlamaya başladım.
Bunun için çeşitli örnekler gösteriyor olacağım.
Bu videoda Worldometers. info sitesindeki covid19 verilerinin yayınlandığı sayfadaki ABD verilerini Json formatında canlı olarak çekip MSSQL’e sadece transact sql kullanarak nasıl aktarıldığını anlatıyorum.
En az 3 videodan oluşacak olan bu video serisini aşağıdaki playlistten izleyebilirsiniz.

SQL Server üzerinde TMDB sitesi verilerinin analizi

Arkadaşlar merhaba,
Benim eğtimlerimde gerçek hayat senaryoları ve gerçek verilere herkes alıştı artık.
Sizler için mükemmel bir veriseti ve eğitim hazırladım. Sadece dataseti hazırlamaya neredeyse 10 gündür uğraşıyorum. Ama gerçekten çok güzel bir veri seti oldu.
Üzerinde harika alıştırmalar yapacağız.

TMDB sitesinde bulunan
160.000’den fazla film
450.000’den fazla aktör
400.000’den fazla film personeli
10.000’den fazla yorum
200.000’den fazla resim
48.000’den fazla yapımcı şirket
1.500.000’den fazla film önerisi.
Bu verileri tam 20 dilde çeviri imkanı.

Şöyle söyleyim Gladiator filminin görüntü yönetmeninin adını ve hatta memleketini bile biliyoruz. İsmi Alexander Witt, memleketi de Çekya. 🙂

Sıkı durun hepsi de MSSQL datası olarak yapılandırıldı, normalizasyonları yapıldı ve ilişkileri tanımlandı.

Hepsi sizleri Alıştırmalarla SQL Öğreniyorum Kursu’nda uygulamalı olarak bekliyor.

Hadi hafta sonu fırsatın kaçırmayın. Sadece 27.99 TL.

https://www.udemy.com/course/alistirmalarla-sql-ogreniyorum/? couponCode=INDIRIMKASIM

Kupon kodu:INDIRIMKASIM

Kaggle.com daki ilk veri setim. Global Terorizm Verisi (Türkçe)

Kaggle’da yayınladığım ilk veri setim. Yine Kaggle üzerinde indirdiğim ve Türkçeleştirdiğim Global Terörizm verisi.
1970-2016 yılları arasında tüm dünyada gerçekleşen 180.000’den fazla terör olayını içeriyor.
Veriler oldukça detaylı kategorize edilmiş durumda. Saldırı tarihi,türü,kim ya da hangi örgüt tarafından yapıldığı, silahlı saldırı mı bombalı saldırı mı, konu ile alakalı özet bilgi ve coğrafi konum bilgisini de içeren oldukça detaylı bir içerik. Tamamen Türkçe.
Veri görselleştirme ve veri bilimi ile uğraşanların dikkatini çekeceğini düşünüyorum.

https://www.kaggle.com/omercolakoglu/global-terrorism-database-turkish

JSON Formatındaki Veriyi SQL Server ile Sorgulama

Merhaba,

Bu yazımızda son yılların popüler veri formatı olan JSON formatını OPENJSON komutunu kullanarak nasıl sorgulayacağımızdan  basitçe bahsediyor olacağım.

Elimizde şu şekilde bir JSON verisi var.

{
    "firstName": "Rack",
    "lastName": "Jackon",
    "gender": "man",
    "age": 24,
    "address": {
        "streetAddress": "126",
        "city": "San Jone",
        "state": "CA",
        "postalCode": "394221"
    },
    "phoneNumbers": 
        { "type": "home", "number": "7383627627" }
    
}'

Bu Json’ı SQL Server ile aşağıdaki gibi sorgulayabiliriz.

DECLARE @JSON AS NVARCHAR(MAX)='{
    "firstName": "Rack",
    "lastName": "Jackon",
    "gender": "man",
    "age": 24,
    "address": {
        "streetAddress": "126",
        "city": "San Jone",
        "state": "CA",
        "postalCode": "394221"
    },
    "phoneNumbers": 
        { "type": "home", "number": "7383627627" }
    
}'


SELECT * FROM  
 OPENJSON ( @json )  
WITH (   

		 firstname varchar(100) '$.firstName' ,
		 lastName varchar(100) '$.lastName' ,
		 age int '$.age' ,
		 gender varchar(100) '$.gender' ,
		 streetAddress varchar(100) '$.address.streetAddress' ,
		 city varchar(100) '$.address.city' ,
		 postalCode varchar(100) '$.address.postalCode' ,
		 state varchar(100) '$.address.state' ,
		 address varchar(100) '$.address.streetAddress' ,
		 phoneNumbers varchar(100) '$.phoneNumbers.type'
)

Ve bu da elde ettiğimiz sonuç.

Şimdi veri sayısını biraz çoğaltalım.

DECLARE @JSON AS NVARCHAR(MAX)='
[
{
    "firstName": "Rack",
    "lastName": "Jackon",
    "gender": "man",
    "age": 24,
    "address": {
        "streetAddress": "126",
        "city": "San Jone",
        "state": "CA",
        "postalCode": "394221"
    },
    "phoneNumbers": 
        { "type": "home", "number": "7383627627" }
    
	},
	
	{

    "firstName": "Marrie",
    "lastName": "Coldman",
    "gender": "woman",
    "age": 39,
    "address": {
        "streetAddress": "156",
        "city": "Newyork",
        "state": "NY",
        "postalCode": "10019"
    },
    "phoneNumbers": 
        { "type": "home", "number": "555689998" }   
}	
]'


SELECT * FROM  
 OPENJSON ( @json )  
WITH (   

		 firstname varchar(100) '$.firstName' ,
		 lastName varchar(100) '$.lastName' ,
		 age int '$.age' ,
		 gender varchar(100) '$.gender' ,
		 streetAddress varchar(100) '$.address.streetAddress' ,
		 city varchar(100) '$.address.city' ,
		 postalCode varchar(100) '$.address.postalCode' ,
		 state varchar(100) '$.address.state' ,
		 address varchar(100) '$.address.streetAddress' ,
		 phoneNumbers varchar(100) '$.phoneNumbers.type'
)

İlerleyen zamanlarda konu ile alakalı daha detaylı yazılar gelecek inşallah.

2011 Yılında yaşadığım bir deneyim. SQL Server ve Jumbo Paket Sorunu.

Bu yazı 2011 yılında yazılmıştır. İlginç bir sorun ve çözüm içerdiği için tekrar paylaşmak istedim.


Geçenlerde bir sistem upgrade’i yaptık. Server ımız değişti, Sistemde database olarak SQL 2005’ten SQL 2008’e, İşletim sistemi olarak Windows Server 2003’ten Windows Server 2008’e geçtik ve cluster yapısı kurduk. ERP Sistemimizde de versiyon geçişi yaptık ve yeni versiyonun çalışması için client bilgisayarlarda mdac versiyon upgrade’ine ihtiyaç duyduk.
Sonuç olarak çok ilginç bir sorunla karşılaştık. Kullanıcı tarafındaki çok basit bir işlem kimi bilgisayarda 1 sn sürerken kimi bilgisayarda 20 sn sürüyordu. Sonuç olarak sorun server kaynaklı, İşletim sistemi kaynaklı, SQL 2008 kaynaklı, Erp programı kaynaklı, ya da mdac kaynaklı olabilirdi. Çünkü bunların hepsi de değişmişti. Epey bir inceleme yaptık sorun üzerinde.
Öncelikle şunu söyleyim bu ayarla alakalı sql server üzerinde bir article bulamadım. Ancak başka uygulamalarda benzer sıkıntılar yaşanmış onun üzerine bu konu üzerine gittik. Burada yeni ethernetler Jumbo frame denilen yapıyı destekliyor ve normalde 1500 byte lık olan network paketleri 9000 byte olarak tek seferde gönderiyor. Paketleri parçalama işini client ın etherneti yapıyor. Özellikle benzer işlem tekrarlarında bu durumu sistem otomatik olarak yapıyor yani kendince optimize etmeye çalışıyor. Client’ta özellikle döngüye takıp aynı sonucu döndüren tek satırlık ya da çoğunlukla sıfır satırlık select cümlelerinin kullanıldığı yerlerde bu özellik devreye giriyor. Eğer karşıdaki ethernet jumbo paketi desteklemiyor ise paket tekrardan servera gönderiliyor bu kez server bu paketi tekrardan parçalayıp client a gönderiyor. Bu da her paket için yapıldığında yaklaşık 10 kat bazen daha fazla gecikmeye sebep oluyor.
Çözüm iki türlü ya serverdan Large Recive Offload Data özelliğini disable etmek ya da client da jumbo paket size değerini arttırmak. Ancak clientta işlem yapmanın iki dezavantajı var bunlardan biri ethernet ya da switchler desteklemiyor olabilir ikincisi de bu özellik enable yapıldığında networkte büyük paketler dolaşmaya başladığından networku tıkayabilir. Bu konuda bir kaç kişiye sorduk pek önermediler büyük paketleri. En doğrusu server üzerinde bu ayarı disable etmek gibi görünüyor.
Biz bu ayarı serverda disable ederek sorunu çözdük. Zaten eski serverda ethernet desteklemiyormuş ondan sorun olmamış.
Bu bahsettiğim sorundan kaynaklı sıkıntı olduğunu düşündüğün makinada sorun olup olmadığını anlamak için performance monitorden send packet/sec değerlerine bakılabilir. Hızlı makina ile yavaş makina arasındaki fark en az 10 kat oluyor. Aşağıda bu ayarın nasıl yapıldığının resmi mevcut.

SQL Server’da Bir Database’i Page Seviyesinde Backup’tan Dönme

“Sql server detected a logical consistency-based i/o error” diye başlayan bir hatayla karşılaşmışsanız geçmiş olsun. Muhtemelen diskte bir sektör okuma hatası var. SQL Server’ın en küçük yapıtaşı olan 8 KB’lık page’lerden bir ya da birkaçı bozulmuş.
Koskoca milyon satırlık tabloda sadece 3-5 satır bozuk diye sorgunuz çalışmıyor. Tüm database i yedekten dönseniz yeni eklenen kayıtlar gidecek bu kez. Neyse ki kolay bir yolu var. Database’i page bazlı olarak yedekten dönebilme.
Yazdım. Beğenmeniz dileğiyle.