
AWS Athena, S3 bucket'larında depoladığımız ham veriler üzerinde SQL sorguları çalıştırmamızı sağlayan etkileşimli bir sorgu motorudur. Tamamen sunucusuz bir çözümdür; yani kullanmak için herhangi bir altyapı kurmanız veya yönetmeniz gerekmez. En önemlisi, kullanmadığınız zamanlarda kümeler gibi veri ambarı kaynakları için ödeme yapmanız gerekmez. Facebook tarafından 2012 yılında geliştirilen ve 2013 yılında veri ambarı aracı olarak açık kaynak hâline getirilen Presto temel alınarak geliştirilmiştir.
AWS Athena ile veri sorgularken bu işlemi gerçekleştirmek için üç AWS hizmetinden birlikte yararlanırız: Verilerinizi depolamak için AWS S3, depoladığınız verilerin kataloğunu oluşturmak için AWS Glue Data Catalog ve sorgulama yapmak için AWS Athena. AWS Athena'nın herhangi bir veri veya veri kopyası saklamadığını unutmayın. Veriler zaten S3 bucket'ınızda depolandığı ve AWS Glue kullanılarak kataloglandığı için buna gerek yoktur.
AWS Glue, depolanan verilerle ilgili aşağıdaki bilgileri tutar:
Bu verileri nerede depoluyorsunuz?
Hangi tablolara sahipsiniz?
Veriler nasıl biçimlendirilmiş?
Hangi sütunlara sahipsiniz?
Verileriniz üzerinde herhangi bir sıkıştırma uygulanmış mı?
Bölümleme (partitioning) etkin mi?
İlişkisel veritabanı yönetim sistemlerinden (RDBMS) farklı olarak Athena, eşzamansız (asenkron) bir şekilde çalışır. Bir sorgu gönderdiğinizde yanıt olarak bir sorgu yürütme kimliği (query execution ID) alırsınız. Sorgunun durumunu öğrenmek için AWS Athena'yı sorgulayabilir, sorgu tamamlandığında ise bu kimliği kullanarak sonuçları AWS CLI, SDK veya Yönetim Konsolu üzerinden alabilirsiniz. Ayrıca sorgu sonuçları, kurulum sırasında yapılandırdığınız bir S3 bucket'ına kaydedilir.
Veri depolama için iki seçenek mevcuttur:
Amazon S3: SerDe (serileştirici/seri durumdan çıkarıcı) kütüphaneleri kullanılır. S3 üzerinde sorgulanabilen veri biçimleri arasında CSV (virgülle ayrılmış), TSV (sekme karakteriyle ayrılmış), özel ayraçlı biçimler, JSON, Apache Avro, Parquet ve ORC bulunur. Regex ve Grok gibi satır tabanlı metin SerDe'lerini kullanarak kendi veri biçiminizi bile oluşturabilirsiniz. Bu da size son derece yüksek bir esneklik sağlar.
Athena Federated Query kullanarak S3 dışındaki veri kaynakları: Sunucusuz sorgular çalıştırmak için AWS Athena ile veri depolama alanınız arasına AWS Lambda yerleştirilir. Athena Federated Query için kullanılabilen veri bağlayıcıları arasında Amazon CloudWatch Logs, Amazon DynamoDB, MongoDB (AWS tarafından yönetilen veya kendi sunucunuzda barındırılan), MySQL (Amazon RDS veya kendi sunucunuzda barındırılan), PostgreSQL (Amazon RDS veya kendi sunucunuzda barındırılan), Elasticsearch (Amazon Elasticsearch veya kendi sunucunuzda barındırılan) ve Redis (Amazon ElastiCache veya kendi sunucunuzda barındırılan) bulunur. Bu özelliğin önemli avantajlarından biri, uygulamanız içerisindeki ilişkisel bir veritabanında eşzamansız sorgular çalıştırmak için kullanılabilmesidir.
WHO'nun web sitesinde CSV dosyası olarak yayımlanan COVID-19 verilerini kullandım. Bu dosya, ülkelerin, bölgelerin ve alanların WHO'ya bildirdiği günlük COVID-19 vaka ve ölüm sayılarını ve aşı kullanım verilerini içeriyor. Bu verilerde ülke kodları ISO Alpha-2 biçiminde olduğundan, harita üzerinde görselleştirme yapabilmek için ülkelerin ISO Alpha-2 kodlarına ve koordinat bilgilerine (enlem/boylam) ihtiyacımız var. Bunun için topluluk üyelerinden biri tarafından GitHub'da paylaşılan bir gist kütüphanesini kullandım.
COVID-19 verileri: https://covid19.who.int/info/
Ülke listesi: https://gist.github.com/tadast/8827699#file-countries_codes_and_coordinates-csv
Verilerinizi indirin ve aşağıdaki yapıyı kullanarak bir Amazon S3 bucket'ı içerisindeki farklı klasörlere yükleyin:
➜ ~ aws s3 ls s3://sufle-athena-bucket --recursive
2021-10-18 22:52:01 0 country/
2021-10-18 22:55:01 12720 country/countries_codes_and_coordinates.csv
2021-10-18 22:51:47 0 covid/
2021-10-18 22:55:40 4802871 covid/WHO-COVID-19-global-data.csvAWS Yönetim Konsolu üzerinden AWS Athena hizmetine gidelim. Bu hizmeti ilk kez kullanıyorsanız başlangıçta bazı ayarları yapmanız istenecektir.
- Sorgu sonuçlarının konumu (Query result location): AWS Athena'nın çalıştırdığınız sorguların sonuçlarını kaydedeceği konumdur. Athena'nın eşzamansız çalıştığını ve sonuçları bir bucket'a kaydettiğini belirtmiştim. Amazon S3 hizmetinden yeni bir bucket oluşturabilir veya mevcut bir bucket'ı seçebilirsiniz. Örneğimizde sufle-athena-output-bucket adlı bucket'ı seçtik.
İlk yapılandırmayı tamamladıktan sonra ilk kataloğunuzu oluşturmaya başlamak için Data sources sekmesindeki Connect data source düğmesine tıklayın.
Step 1: Choose a data source adımında şu seçenekleri belirleyin:
Choose where your data is located: Query data in Amazon S3
Choose a metadata catalog: AWS Glue Data Catalog
Bir sonraki adım olan Step 2: Connection details bölümünde ise şu seçenekleri belirlemeniz gerekir:
Connection details: AWS Glue Data Catalog, AWS Glue Data Catalog in this account
Choose a way to create a table: Create a crawler in AWS Glue
Bu bölümler sizi AWS Glue Data Catalog oluşturma sayfasına yönlendirecektir.
Devam etmeden önce, “Crawler” nedir?
Crawler, verilerinizi otomatik olarak tarayan ve AWS Glue Data Catalog'u sizin için dolduran bir araçtır. Katalog oluşturmanın en kolay yollarından biridir.
Ham verilerin biçimi, şeması ve ilgili özellikleri gibi meta veri bilgilerini belirlemek için verileri sınıflandırır.
Verileri tablolara veya bölümlere ayırır.
Son olarak meta verileri AWS Glue Data Catalog'a yazar.
Şimdi adım adım veri kataloğu oluşturmaya geri dönelim:
Crawler info:
Crawler name: İstediğiniz bir adı girin. Örneğimizde covid adını kullanalım.
Crawler source type:
Crawler source type: S3 bucket'ında bulunan verileri taramak istediğimiz için Data sources seçeneğini belirleyin.
Repeat crawls of S3 data stores: Tüm klasörlerin taranmasını istiyoruz.
Data store:
Choose a data store: Elbette, S3.
Connection: Bu örnekte özel bir ağ bağlantısı yapılandırmak istemediğimiz için bu alanı boş bırakacağız.
Include path: COVID-19 verilerini yüklediğiniz konumu girin. Örneğimizde s3://sufle-athena-bucket/covid kullanıyoruz.
IAM role:
Yeni bir IAM rolü oluşturmayı seçin ve AWSGlueServiceRole-covid gibi bir ad verin.
Schedule: Bu bir örnek olduğu için Run on demand seçeneğini belirleyeceğiz. Ancak gerçek iş yüklerinde crawler'ları otomatik çalıştırmak için bu özelliği kullanabilirsiniz. Crawler'lar yapılandırdığınız zamanlamaya göre çalışabilir ve veri kataloğunuzu güncelleyebilir.
Database: covidprod gibi bir ad vererek yeni bir veritabanı oluşturun.
Ülke verileri için de benzer adımları uygulayacağız:
Crawler info:
Crawler name: İstediğiniz bir adı girin. Bu kez country adını kullanalım.
Crawler source type:
Crawler source type: S3 bucket'ında bulunan verileri taramak istediğimiz için Data sources seçeneğini belirleyin.
Repeat crawls of S3 data stores: Tüm klasörlerin taranmasını istiyoruz.
Data store:
Choose a data store: Yine S3 seçeneğini belirleyin.
Connection: Bu alanı boş bırakacağız.
Include path: Ülke verilerini yüklediğiniz konumu girin. Örneğimizde s3://sufle-athena-bucket/country kullanıyoruz.
IAM role:
Yeni bir IAM rolü oluşturmayı seçin ve AWSGlueServiceRole-country gibi bir ad verin.
Schedule: Önceki adımda olduğu gibi Run on demand seçeneğini belirleyin.
Database: Önceki crawler'ı yapılandırırken oluşturduğunuz veritabanını seçin. Örneğimizde bu veritabanının adı covidprod olacaktır.
Crawler'ları oluşturduktan sonra bunları seçip Run crawler düğmesine tıklayarak AWS Glue'nun sizin için otomatik olarak bir veri kataloğu oluşturmasını sağlayabilirsiniz. Bu işlemler tamamlandığında Tables bölümüne giderek kayıt sayısı, ayraç, sütunlar ve benzeri kataloglanmış veri ayrıntılarını görebilirsiniz.
Artık verilerimiz ve kataloglarımız hazır olduğuna göre Amazon Athena ile verilerimizi sorgulamaya başlayabiliriz. Athena hizmetine geri dönüp Query editor bölümünü seçelim. Ardından sol kenar çubuğundan crawler yapılandırması sırasında oluşturduğunuz veritabanını seçin ve test etmek için aşağıdaki sorguları çalıştırın:
SELECT * FROM "covidprod"."covid" limit 10;
SELECT * FROM "covidprod"."covid" where country="Turkey";Daha önce seçtiğiniz çıktı bucket'ını kontrol ettiğinizde sorgu sonuçlarının kaydedildiğini görebilirsiniz.
Oluşturduğumuz ülke tablosunu sorguladığınızda, CSV veri dosyasında bulunduğu için alanların içinde " karakterlerinin yer aldığını göreceksiniz. Ayrıca enlem ve boylam alanları da boş olacaktır. Bunu düzeltmek için AWS Glue'daki tabloya geri dönüp Edit Schema seçeneğine tıklayacağız. Sorgulamayı kolaylaştırmak için birkaç değişiklik yapacağız:
alpha-2 code sütun adını alpha2 olarak değiştirin.
alpha-3 code sütun adını alpha3 olarak değiştirin.
numeric code sütun adını numeric olarak değiştirin.
latitude (average) sütun adını latitude olarak değiştirin.
longitude (average) sütun adını longitude olarak değiştirin ve değişiklikleri kaydedin.
AWS Glue, varsayılan olarak LazySimpleSerDe kullanır. Farklı bir veri biçiminiz varsa kataloğunuz için farklı bir serileştirici/seri durumdan çıkarıcı seçmek üzere AWS Glue Belgeleri'ndeki Supported Data Formats and SerDes bölümünü kullanabilirsiniz. Belgelerde belirtildiği gibi, “Değerlerin içinde tırnak işaretleri bulunan veriler için CSV dosyalarını işlerken OpenCSVSerDe kullanın.” Bu nedenle org.apache.hadoop.hive.serde2.OpenCSVSerde kullanacağız. SerDe parametreleri bölümüne quoteChar parametresini " değeriyle, escapeChar parametresini ise \ değeriyle ekleyeceğiz.

Bu yapılandırma değişikliklerini tamamladıktan sonra tabloyu tekrar sorguladığınızda, tüm verilerin Amazon Athena konsolunun Results bölümünde görüntülendiğini göreceksiniz.
Artık bu tabloları aşağıdaki gibi birleştirebilirsiniz:
SELECT * FROM "covidprod"."covid" AS cvd JOIN "covidprod"."country" AS ctr
ON cvd.country_code=ctr.alpha2
LIMIT 3;

Amazon QuickSight, AWS'nin hızlı, kullanımı kolay ve bulut tabanlı iş analitiği hizmetidir. Görselleştirmeler oluşturmanıza, anlık analizler yapmanıza ve verilerinizden hızlıca iş içgörüleri elde etmenize olanak tanır. Üstelik bunları istediğiniz zaman, herhangi bir cihaz üzerinden gerçekleştirebilirsiniz. CSV ve Excel dosyalarını yükleyebilir; Salesforce gibi SaaS uygulamalarına bağlanabilir; SQL Server, MySQL ve PostgreSQL gibi şirket içi veritabanlarınıza erişebilir ve Amazon Redshift, Amazon RDS, Amazon Aurora, Amazon Athena ve Amazon S3 gibi AWS veri kaynaklarınızı kolayca keşfedebilirsiniz. Verilerimizi görselleştirmek için QuickSight kullanacağız.
QuickSight kontrol panelinde yeni bir Dataset oluşturalım, veri kaynağı olarak Athena seçeneğini belirleyelim ve veri kümemize covid-data gibi bir ad verelim. Ardından seçim yapabileceğimiz veritabanları ve tablolar listelenecektir. Her iki tabloyu da kullanmak istediğimiz için özel sorgu (custom query) seçeneğini kullanacak ve aşağıdaki birleştirme sorgusunu gireceğiz:
SELECT ctr.country, ctr.latitude, ctr.longitude, cvd.date_reported, cvd.new_cases
FROM "covidprod"."covid" AS cvd
JOIN "covidprod"."country" AS ctr
ON cvd.country_code=ctr.alpha2;Ardından Datasets bölümüne geri dönün, oluşturduğunuz veri kümesine tıklayın ve görselleştirmeye başlamak için Create Analysis seçeneğini belirleyin. Pencerenizin sol tarafında açılacak kenar çubuğunda farklı Visual types seçeneklerini göreceksiniz. Dünya simgesiyle gösterilen Points on map seçeneğini belirleyelim.
Üst kısımda görselleştirme için coğrafi konum verilerinin (Geospatial input) gerekli olduğu belirtilir. Bunu sağlayabilmek için verilerimizde bulunan enlem ve boylam değerlerinden koordinatlar oluşturmamız gerekiyor.
Datasets bölümüne geri dönün ve veri kümenizi özelleştirmek için Edit seçeneğini kullanın. Sol kenar çubuğunda latitude ve longitude alanlarını göreceksiniz. Bu alanlardan birinin yanındaki üç noktaya tıkladığınızda ilk seçeneğin Add to Coordinates olduğunu göreceksiniz. Koordinatlara coordinate adını verin ve açılır listelerden ilgili alanları seçin.

Birkaç dakika önce oluşturduğunuz analize geri dönün ve Field List bölümündeki alanları sürükleyip ilgili alanlara bırakın:
Geospatial: coordinate
Size: new_cases
Color: country
Sonuç:

Bu eğitimi tamamladığınız ve sunucusuz hizmetleri kullanarak verilerinizi görselleştirdiğiniz için tebrikler! Sorularınız varsa veya AWS üzerinde verilerinizi neredeyse sıfır maliyetle görselleştirme konusunda desteğe ihtiyacınız varsa, bizimle iletişime geçin ve hiçbir sunucu veya veri ambarını yönetmek zorunda kalmadan hayallerinizi gerçeğe dönüştürün!
Bir zamanlar Software Developer iken şimdi bir AWS Certified Solutions Architect Professional ve AWS Ambassador olan Gizem, profesyonel zorlukları üstlenmeye her zaman heveslidir. İşlerindeki titizliği, bilgisini teknoloji bilgisi yüksek profesyonellerle ve topluluklarla paylaşma tutkusu ile birleşir.
Teknoloji kullanımımız, çözümlerimiz ve rehberlerimizle ilgili en son güncellemeleri ve makaleleri keşfedin.
Size daha iyi bir deneyim sunmak için çerez kullanıyoruz.
Kişiselleştirilmiş içerikle size daha iyi bir deneyim sunmak için çerezleri kullanıyoruz.
Çerezler, ziyaret ettiğiniz web siteleri tarafından bilgisayarınıza gönderilen ve saklanan küçük dosyalardır. Bir sonraki ziyaretinizde tarayıcınız çerezi okuyarak bilgileri, çerezi oluşturan web sitesine veya öğeye iletir.
ㅤㅤㅤㅤㅤㅤ
Çerezler, web sitemizi her ziyaret ettiğinizde sizi otomatik olarak tanımamıza yardımcı olur, böylece deneyiminizi kişiselleştirebilir ve size daha iyi hizmet sunabiliriz.


