Kayıtlar

Web Scraping Using Python

Resim
Herkese merhaba, Bu yazımızda Python kullanarak Web Scraping işlemlerini inceleyeceğiz. Web sitelerinden otomatik olarak veri çekme isteğimiz her geçen gün artarak devam etmektedir. Çoğu zaman web sitelerinden veri çekme ve bunları analizlerimizde kullanma ihtiyacı ile karşı karşıya oluruz. Buna bir örnek vermek gerekirse makalemizde de değineceğimiz üzere Gittigidiyor gibi bir e-ticaret sitesinde ihtiyacımız olan alanlarla ilgili satış bilgilerini çekip daha sonrasında bunların üzerinde çeşitli analizler yapabiliriz. Web sitelerinden verileri çekmek için çeşitli yöntemler vardır. En iyi yöntem ise API'lerin kullanılmasıdır. Neredeyse bütün sosyal medya siteleri (Facebook, Twitter, Instagram gibi bunların dışında da büyük verileri barındıran Google gibi), sitelerine erişime izin vermek için API sağlar. Eğer istediğiniz verileri API ile çekebiliyorsanız, bu yöntem Web Scraping işlemine göre daha çok tercih edilir. Maalesef her web sitesi API kolaylığı sağlamamak...

SQL Server Analysis Services 2012’de Multidimensional Model ve Tabular Model

Bu yazımızda SSAS’de Tabular model ve Multidimensional model kavramlarını inceleyip, farklarından bahsedeceğim. Veri analizi için hangi modelin hangi durumlarda daha uygun olacağını ortaya koymaya çalışacağız. Farklarından bahsetmeden önce bu modellerin ne olduğunu inceleyelim: Multidimensional Model (geleneksel OLAP kübü):  İlişkisel bir veritabanından çok farklı yapıda olan ve çok hızlı raporlar üretmemizi sağlayan bir OLAP kübüdür. Geçmişte bu model multidimensional veritabanları oluşturabilmemiz için tek çözümdü. SQL Server 2005’den SQL Server 2016’ya kadar yapısı itibariyle çok değişmedi. SSAS’e yeni eklenen özellikler incelenirse çoğunun Tabular model’le ilgili olduğu görülür. Tabular Model (in-memory küb): SSAS’deki in-memory veritabanıdır. SQL Server 2012’de tanıtıldı ve her yeni sürümü yeni özellikler içeriyor. Multidimensional Model’den farklı bir engine (xVelocity) kullanır. Multidimensional model satır bazlı depolama yaparken, Tabular model verileri ...

Natural Key ve Surrogate Key Nedir?

Resim
Bir tablodaki Primary Key olacak alanı seçmek database performansı için gerçekten önemlidir. Primary Key; her tabloda en fazla 1 adet bulunur, null değer alamaz, unique (tekil) değerler alır, verileri değiştirilemez. Primary key içerdiği verilere göre Natural veya Surrogate key olur. Natural Key Tablo ile mantıksal olarak ilişkilidir.İçerdiği veri, tablonun diğer sütunlarındaki veriler ile ilişkilidir. Tekil değerler içerir. Natural key, dış dünyadaki gerçek verileri temsil eder. Örneğin; TC kimlik numarası, bir kitabın ISBN numarası, bir ürünün ismi gibi... Surrogate Key Surrogate key içeren veriler tablo için mantıklı herhangi bir anlama sahip değildirler. Surrogate key'ler, veritabanı yönetim sistemleri tarafından üretilirler. (Oracle, sequence'leri kullanır; Sql server, identity column özelliğini kullanır; MySql auto_increment özelliğini kullanır.) Genel olarak kayıt eklenmeden önce üretilirler ve çoğu zaman numeric tiptedirler. Tekil değerler içerir. Natural Key vs. S...

[Microsoft][ODBC Excel Driver] Syntax error (missing operator) in query expression 'case when ...', Odbc driver returned an error (SQLExecDirectW).

Resim
OBIEE 11g'de Excel'den çektiğimiz veriler ile http://localhost:7001/analytics sayfasında yeni bir analiz oluşturmak istediğimizde bu hata ile karşılaşabiliriz. Bu hata, analize eklenen bir sütun üzerindeyken Edit Formula ekranına case when ifadesi yazdığımızda ortaya çıkar. (Genellikle iç içe case ifadeleri varsa ve bu ifadeler numeric değilse ortaya çıkar.) Bunun nedeni Excel'in Case ifadelerini desteklemiyor olmasıdır. Hatanın ayrıntılı hali: Error Codes: OPR4ONWY:U9IM8TAC:OI2DL65P State: HY000. Code: 10058. [NQODBC] [SQL_STATE: HY000] [nQSError: 10058] A general error has occurred. [nQSError: 16001] ODBC error state: 37000 code: -3100 message: [Microsoft][ODBC Excel Driver] Syntax error (missing operator) in query expression 'CASE WHEN PRODUCT."NAME"='Bag' THEN 1 ..' [nQSError: 16014] SQL statement preparation failed. (HY000) SQL Issued: SELECT Product.Name saw_0, CASE WHEN PRODUCT."NAME"='Bag' THEN 1 ... E...

OBIEE'de Excel Dosyasını Import Etme

Resim
Bu yazımda OBIEE Administration Tool'da Excel dosyasını veri kaynağı olarak kullanmayı anlatacağım. Bunun için aşağıdaki adımlar sırasıyla gerçekleştirilir: İlk önce veri kaynağı olarak eklemek istediğimiz Excel dosyası açılır. Ekleyeceğimiz veriler Excel'in Aralığı Adlandır özelliğiyle isimlendirilir.   Denetim Masası->Yönetimsel Araçlar-> Data Sources (ODBC)-> System DSN tabında Add butonuna tıklanır ve veri kaynağı olarak Microsoft Excel Driver seçilir. Veri kaynağı isimlendirilir ve Çalışma Kitabı Seç butonuna tıklanır. Excel dosyası seçilir. OBI Administration Tool açılır ve Physical Layer'da sağ tuş ile yeni bir database eklenir. Connection Pools sekmesine tıklanarak yeni bir bağlantı eklenir. Data Source Name'de eklenen Excel veri kaynağı seçilir. Database ve connection pool oluşturulduktan sonra Physical Layer'da connection pool üzerinde sağ tuş Import Metadata'ya tıklanır. Gelen ekranda Excel veri kaynağı seçilir. Physica...

nQSError: 37005 Transnational Update Failed Hatası

Çözümü gerçekten basit olan fakat OBI'da başlangıç düzeyinde olanlar için görüldüğünde sinir bozan bir hata:) Genellikle OBIEE Administration Tool'da online mode da iken physical layer'a database ekleyip kaydettiğimizde bu hata karşımıza çıkar. Hatanın kaynağı tablo isimleri olabilir. (Benim karşılaştıklarım öyleydi.) C:\Middleware\instances\instance1\diagnostics\logs\OracleBIServerComponent\coreapplication_obis1 yolunda bulunan NQServer.log dosyasında "has name with leading or trailing space(s)." adındaki hata bulunur. Bu hataya neden olan database içindeki tablo ve sütun ismi log dosyasında yazılıdır. O sütun ismi düzeltildikten sonra bu hatayla bir daha karşılaşmayız. ( Yani  öyle umuyorum:) ) İyi Çalışmalar

Oracle Linux Üzerine Oracle Database 11g Enterprise Edition Kurulumu

Resim
Bilgisayarımıza Oracle Linux'u : CD veya DVD'den boot edecek şekilde Talip hocamızın makalesinde anlattığı gibi:   http://taliphakanozturk.wordpress.com/2011/11/04/oracle-linux-6-1-kurulumu/ Virtualbox ile oluşturacağımız sanal makinamızın üzerine: http://melihsavdert.blogspot.com/2013/06/adm-adm-oracle-vm-virtualbox-uzerine.html CD veya DVD'den boot edecek şekilde kuracağımız linux işletim sistemi için diskleri kendimiz bölümleyebileceğimiz şekilde, disk partition ile: http://www.koraykey.com/?p=228 makalelerinde anlatıldığı üzere kurabiliriz. NOT: Virtualbox ile sanal makinemizi oluşturup; Oracle Linux işletim sistemi için gerekli konfigürasyonları yaptıktan sonra kuruluma geçtiğimizde, siyah ekranla karşılaşıp makaledeki resimlerde de görüldüğü gibi kurulum GUI ekranından değilde konsol ekranından devam ediyorsa; bilgisayarınız, oracle linux işletim sisteminin sistem gereksinimini karşılamıyor olabilir. Özellikle ram miktarı az olabilir. (Oracle Linux 6.1 i...

PL/SQL'de DEĞİŞKEN TANIMLAMA, EKRANA YAZI YAZDIRMA ve GÜNCELLEME

PL/SQL yazı dizisinin 2. dersindeyiz. Bu dersimizde artık PL/SQL programları yazmaya başlayacağız. Bunun için  http://apex.oracle.com/i/index.html  sitesinde workspace'imizi oluşturup çalışmaya başlıyoruz. Workspace'imize giriş yaptıktan sonra karşımıza gelen seçeneklerden SQL Workshop'ı seçip daha sonra SQL Command'a tıklayıp PL/SQL programlarını bu ekranda çalıştırabiliriz. Örneğimize geçelim: PL/SQL'in en önemli yanlarından birisi SQL komutları ile entegreli olarak çalışabilmesidir. ODBS veya JDBS gibi aracı bir yazılıma ihtiyaç duymadan SQL ifadelerini PL/SQL programları içerisinde çalıştırabilirsiniz. Örneğin aşağıdaki kodlarda kullandığımız update ifadesi gibi. declare order_total INTEGER; begin   select sum(ORDER_TOTAL) into order_total from DEMO_ORDERS   where CUSTOMER_ID=3;   DBMS_OUTPUT.PUT_LINE ('3 numaralı müşterinin toplam siparişi: ' || order_total); end;   declare ile integer bir değişken tanımladıktan sonra CUSTOMER_ID'si 3 ...

PL/SQL NEDİR?

Resim
Herkese merhabalar. Pl sql ile ilgili yeni bir yazı dizisine başlıyorum. İlk olarak pl sql nedir, ne değildir biraz tanımını yapalım. PL= Procedural Language  SQL= Structured Query Language Prosedürel Yapısal Sorgulama Dili Oracle şirketi tarafından SQL'in kısıtlamalarının üstesinden gelmek için oluşturulan Oracle sistemlerine özel bir dildir. Ama kesinlikle C, Visual Basic gibi bir programlama dili değil; sorgulama dilidir.  PL/SQL'in karasteristik özellikleri: PL/SQL prosedürel bir dildir. (if/else, for veya while gibi döngü veya kontrol mekanizmalarına izin verir. Sql ise izin vermez. Çok iyi derecede yapılandırılmış, okunabilir, erişilebilir bir dildir. Oracle geliştirme için standart ve taşınabilir bir dildir. Örneğin; kendi bilgisayarınızdaki Oracle database'de yazdığınız bir prosedür veya fonksiyonu ortak ağınızdaki başka bir database'e taşıyabilir, hiçbir değişiklik yapmadan çalıştırabilirsiniz.  PL/SQL programları genellikle veritaba...

Grouping Sets Fonksiyonu

Resim
Sql Server 2008 ve sonrasında gelen sürümlerde karşımıza çıkan Grouping sets fonksiyonu ile aynı veriler üzerinde birden fazla gruplama işlemi yapabiliriz. Eskiden group by ve union all ifadeleriyle yapılan bu işlem grouping sets ile daha kolay ve anlaşılır hale gelmiştir. Örneğimizde de görüleceği üzere ilk önce CustomerId' ye göre gruplanır. 2. etapta sırası ile ilk önce Yıla göre sonrasında ProductId'ye göre gruplama yapılır: select CustomerID,ProductID,YEAR(OrderDate) as [Year],sum(Quantity) as [Quantities] from Orders o inner join [Order Details] od on o.OrderID=od.OrderID where CustomerID like 'A%' group by GROUPING SETS( (CustomerID,YEAR(OrderDate)), (CustomerID,ProductID)) Order by CustomerID Grouping sets içerisindeki parametrelere (CustomerID)' yi eklersek; yıla ve ProductID' ye göre grupladıktan sonra CustomerID için genel toplam verir. Parametrelere boş parantezi de eklersek ( ) , sorgu sonucundaki tüm alanları ( sum(Quantity) ) toplar, ...

Group By Rollup

Resim
Merhabalar, Group by rollup operatörü ile gruplama yaptığımız veriler üzerinde hem ara toplam hem de genel toplama erişebiliriz. Sorgumuzda where şartıyla belirtilen ülkelerde bulunan şehirlerdeki toplam müşteri sayısı görüntülenir. Ara toplam olarak her ülkeye ait müşteri sayısı toplanır. Genel toplamda ise bu ülkelerdeki tüm müşteriler toplanır. select Country,City,count(City) from Customers where Country in('Brazil','Venezuela','UK','Spain') group by rollup(Country,City) Sorgumuzun sonuç ekranı: Daha fazla örnek için:  http://blog.sqlauthority.com/2010/02/24/sql-server-introduction-to-rollup-clause/

Group By Cube

Resim
Herkese iyi günler Uzun bir aradan sonra yeniden bloguma sql ile ilgili öğrendiklerimi pekiştirmek için yazmaya devam ediyorum. Bilindiği üzere group by operatörü verileri gruplayıp özet halinde göstermek için kullanılır. Group by cube operatörü de aynı işi yapar fakat group by'dan tek farkı gruplanan verilerin toplamını extra bir satır ekleyerek göstermesi. Örnekle daha iyi anlaşılacağına göre hemen başlayalım. Bu örneğimizde northwind veritabanını kullandım. Şehir bilgisi Buenos Aires,London,Paris veya Sevilla'dan birine eşit olan şehirlerde bulunan toplam müşteri sayısını gösterir. select City as 'Şehir' ,Count(CustomerID) as 'Müşteri Sayısı' from Customers where City in('Buenos Aires','London','Paris','Sevilla') group by City select isnull(City,'Toplam Müşteri') as 'Şehir', Count(CustomerID) as 'Müşteri Sayısı' from Customers where City in('Buenos Aires','London','Paris'...

Sql Server Database Engine Servisinin Konfigüre Edilmesi ve Yönetilmesi-4

4. Sql Server Sistem Veritabanları Sql Server çalışmasını ve devamlılığını sağlamak amacıyla kendine ait verileri tuttuğu veritabanlarıdır. a) Master Veritabanı Master veritabanında linked server'lar, kullanıcıların bilgileri, sistem stored procedure'leri, sistem fonksiyonları, veritabanları ve dosyalar hakkında bazı bilgiler tutulur.  Bu veritabanının zarar görmesi halinde sql server servisi çalışmaz. Bu veritabanının düzenli olarak ve yeni bir veritabanı oluşturulduktan sonra, veritabanının özelliklerini değiştirdikten sonra, kullanıcı oluşturduktan sonra yedeğinin alınması önerilir. b) Model Veritabanı Model veritabanı adı üzerinde yeni oluşturacağımız veritabanları için bir model niteliğindedir. Veritabanı oluşturulurken model veritabanının kopyası oluşturulur, sadece isim gibi özellikleri değiştirilir. Model veritabanında oluşturulan tablo, stored procedure veya fonksiyon bundan sonra oluşturulan bütün veritabanlarına otomatik olarak eklenir. c) MSDB Veritabanı...

INTERSECT komutu

Intersect komutu 2 farklı sorgudan dönen ortak kayıtları listelemek için kullanılır. In ve Exists komutları ile de aynı sonuç elde edilebilir. Aslında inner join işlemlerinde de 2 sorgunun ortak olan kayıtları listelenir. Inner joinde yapmamız gereken tek işlem distinct komutunu sorgumuza eklemek. Aşağıdaki farklı komutlarla yazılan sorgularımızı çalıştırdığımızda hepsinden 238 adet kayıt döndüğünü görürüz. 1) Intersect ile: select ProductID from Production.Product intersect select ProductID from Production.WorkOrder 2) In ile: select ProductID from Production.Product where ProductID in(select ProductID from Production.WorkOrder) 3) Exists ile: select ProductID from Production.Product p where exists(select top 1 1 from Production.WorkOrder wo where p.ProductID=wo.ProductID) 4)Inner join ile: select distinct p.ProductID from Production.Product p inner join Production.WorkOrder wo on p.ProductID=wo.ProductID

EXCEPT Komutu

Aslında Not in veya Not exists komutları ile de aynı sonucu alacağımız bir komuttur Except. 2 farklı sorgudan dönen sonuç kümelerini karşılaştırarak sadece ilk belirtilen sorgu sonucunda olan fakat ikinci sorgu sonucunda olmayan kayıtları listeler. Bir örnek vermek istersek Product tablosunda olan fakat WorkOrder tablosunda olmayan kayıtları 3 farklı komutla listeleyebiliriz. 1) Except ile: select ProductID from Production.Product except select ProductID from Production.WorkOrder 2) Not in ile: select ProductID from Production.Product where ProductID not in(select ProductID from Production.WorkOrder) 3)Not exists ile: select ProductID from Production.Product p where not exists(select top 1 1 from Production.WorkOrder wo where p.ProductID=wo.ProductID)

UNPIVOT Table

Resim
Pivot table konumuzun devamı olan unpivot table işlemini incelemeye başlıyoruz. Eğer pivot table oluşturma, bu tabloları kullanma işlemi sık sık tekrarlanıyorsa performans sağlanması ve zaman kazandırması açısından pivot table işleminin sonucu başka bir tabloya yazılır, artık sorgulama bu tablo üzerinden yapılır. Bu gibi durumlarda bazen de pivot tablonun eski haline döndürülmesi istenebilir ve o zaman devreye unpivot table işlemi girer. Hemen örneğimize başlayalım. Pivot table konumuzdaki örnek sorgumuz üzerinden gideceğiz. Pivot table işleminin sonucunun tutulacağı tabloyu oluşturuyoruz: create table pivottable(Az int, Ca int, Tx int); Sorgu sonucunu tabloya yazıyoruz: insert into pivottable select * from ( select sp.StateProvinceCode from Person.Address a inner join Person.StateProvince sp on a.StateProvinceID=sp.StateProvinceID )k PIVOT ( count(StateProvinceCode) for StateProvinceCode IN([AZ],[CA],[TX]) ) AS pvt select * from pivottable Şimdi unpivot işlemin...

PIVOT Tablo

Resim
Group by ifadesi ile verilerimiz satır bazında gruplanır, bi'nevi özetlenir. Bazı durumlarda bu satır bilgilerinin sütuna dönüştürülmesi gerekebilir. Bu işlem için sorgu sonucunda dönen kayıt setinin satırlarını sütuna çevirme tekniğine pivot tablo denmektedir. Örneğin aşağıdaki sorguda eyalete göre gruplama yapıp AZ,CA,TX kodlu eyaletlerde bulunan personel sayısının görüntüledik.  (veritabanı adventureworks) select sp.StateProvinceCode,count(sp.StateProvinceCode) Adet from Person.Address a inner join Person.StateProvince sp on a.StateProvinceID=sp.StateProvinceID where sp.StateProvinceCode in ('AZ','CA','TX') group by sp.StateProvinceCode Sorgumuzu pivot tabloya çevirme işleminde ise öncelikle gruplama ifadelerini sorgumuzdan çıkartıp, sorgumuzu bir altsorgu haline getiririz. select * from ( select sp.StateProvinceCode from Person.Address a inner join Person.StateProvince sp on a.StateProvinceID=sp.StateProvinceID )k Daha sonrasında yuka...

Table Sample Komutu

Table sample rasgele sayıda kayıt elde etmemizi sağlayan komuttur. Direkt olarak Sql Server'ın verilerinin tutulduğu page'lerden okuma yapar ve ne kadar sayfa okunacağı parametrede belirtilir. percent ve rows olmak üzere 2 adet parametremiz vardır. (veritabanı olarak AdventureWorks'ü kullanıyorum.) 1) select * from Sales.SalesOrderDetail; 2) select * from Sales.SalesOrderDetail TABLESAMPLE(10 percent); 3) select * from Sales.SalesOrderDetail TABLESAMPLE(1000 rows); Percent, sonuç setindeki kayıtların yüzde kaçının okunacağını belirtir. Örneğin tablomuzda 120 bin civarı kayıt vardır ve yukarıdaki 2. sorgu her çalıştırıldığında 12 bin, 13 bin civarı farklı sayıda kayıt döner. 3. sorgudaki 1000 rows ifadesiyle  her çalıştırıldığında 1000 kayıt döneceği kesin değildir. (rows değeri ne kadar az olursa o kadar az kayıt döner.) 3. sorgu 4 defa çalıştırıldığında dönen kayıt sayıları: Çalışma Dönen kayıt 1 809 2 812 3 1183 ...

Sql Server Database Engine Servisinin Konfigüre Edilmesi ve Yönetilmesi-3

3. Startup (Başlangıç) Procedure'leri Bu özellik sayesinde Sql server servisi her başladığında çalışan bir stored procedure tanımlayabiliriz. Sysadmin rolüne sahip olmamız gerekir. Startup stored procedure'leri kullanabilmek için aktif edilmesi gerekir. Aktif edilmeden önce aşağıdaki sorguyla şu anki durumu kontrol edilir: select name, value, value_in_use from sys.configurations where name like 'scan for startup procs'; Aktifleştirmek için aşağıdaki sorgu yazılır: sp_configure 'scan for startup procs',1 reconfigure go sp_configure 'show advanced options',1 reconfigure Daha sonrasında server restart edilmelidir. Bir startup procedure örneği vermek istersek: --başlangıçta çalışacak (yani server her restart edildiğinde) stored procedure örneği: --kayıtları tutmak için tablo: create table master.dbo.SqlRestartLog ( id int identity(1,1), StartTime datetime ) create proc dbo.sp_InsertToSqlRestartLog as insert into master.dbo.SqlRestar...

Sql Server Database Engine Servisinin Konfigüre Edilmesi ve Yönetilmesi-2

Resim
Sql Server Configuration Manager aracının diğer önemli bir tabı ise Sql Server Network Configuration altında bulunan Server ve Client arasında iletişim kurarken kullanılacak olan protokollerle ilgili işlemleri yapabileceğimiz Protocols seçeneğidir. Client ile Server arasındaki iletişim şu şekilde gerçekleşir: Client uygulama Sql Server'a bağlantı kurmak için driver'a istek yollar. Driver uygun protokolü belirlemesi için NetLibs'i çağırır. Netlibs en uygun protokolü seçerek Sql Server'a gönderir. Sql Server tarafındaki netlibs ise Clienttan gelen isteği alarak Sql Server'a iletir. Sql Server, Client ile haberleşmek için aşağıdaki protokolleri kullanır: Shared Memory Named pipes TCP/IP VIA ( Netlibs: Protokollerin tamamını kapsayan kütüphane ) 2.DAC (Dedicated Administrator Connection) Aracı Sql Server instance'ına erişilemediğinde ( genellikle sistem kaynaklarını gereksiz yere tüketen işlemlerden dolayı ) bağlantı kurabilmek için Sql Server 2...