AWS Athena – 2 (Create View & Partitioned Table)

Bu yazıda AWS Athena servisi üzerinde View Create etme ve mevcut tablolardan CTAS (Create Table as Select) ile Partitioned Table Create etmeye dair örnekler anlatılacaktır.

 

Create View w/ Union All

Farklı tablolarda (S3 üzerinde yer alan farklı dosyalarda) tutulan verinin tek noktadan çekilebilmesi için (eğerki dosyalar belirli bir partition alanına göre ayrıştırılacak şekilde tanımlanmamışsa) akıllara Set Operation fonksiyonları gelebilir.

Sık kullanılacak kompleks bir sorgunun tekrarlı kullanım ihtiyacı olan bir senaryoda ise View Create etmek (filtreler, joinler, analitik fonksiyonlar yada set operation işlemleri gibi) kullanım kolaylığı sağlayacaktır.

 Create View
CREATE OR REPLACE VIEW USR_GENDER_COUNTRY AS
SELECT GENDER, COUNTRY
FROM (SELECT GENDER, COUNTRY FROM "userdata1ath"
      UNION ALL
      SELECT GENDER, COUNTRY FROM "userdata2ath"
      UNION ALL
      SELECT GENDER, COUNTRY FROM "userdata3ath"
      UNION ALL
      SELECT GENDER, COUNTRY FROM "userdata4ath"
      UNION ALL
      SELECT GENDER, COUNTRY FROM "userdata5ath") UNI

Create Partitioned Table w/ CTAS

Farklı dosya türlerinde tutulan aynı kolon tanımlamalarına sahip tablolara erişirken bir  maliyet oluşur. Veri hacminide göz önünde bulundurup bu maliyeti azaltmak adına CTAS (Create Table as Select) yapısı ile partition‘lı bir tablo yaratılabilir.

 Create Partitioned Table w/ CTAS
CREATE TABLE USERDATA_PARTITIONED
WITH (
	format='PARQUET',
	parquet_compression='SNAPPY',
	partitioned_by=array['gender'],
	external_location = 's3://ath-blog/userdata_partitioned'
)
 AS
SELECT *
FROM (
SELECT registration_dttm,
	id,
	first_name,
	last_name,
	email,
	ip_address,
	cc,
	country,
	birthdate,
	salary,
	title,
	comments,
	gender
FROM "userdata_parquet"
UNION ALL
SELECT registration_dttm,
	id,
	first_name,
	last_name,
	email,
	ip_address,
	cc,
	country,
	birthdate,
	salary,
	title,
	comments,
	gender
FROM "userdata_orc"
UNION ALL
SELECT registration_dttm,
	id,
	first_name,
	last_name,
	email,
	ip_address,
	cc,
	country,
	birthdate,
	salary,
	title,
	comments,
	gender
FROM "userdata_csv") UNI

Bu örnekte yeni oluşturulacak tablonun sıkıştırma metodu olarak SNAPPY kullanıldı. Yeni tablonun verisinin tutulacağı format olarak Parquet seçildi. Partition kolonu olarak mevcut tablolarda tarih kolonu uygun bir veri içermediğinden gender kolonu seçildi.

Özellikle partitioned_by ifadesinde yazan kolonu, yaratılacak tablonun son kolonu olarak konumlandırmak gerekir. Aksi takdirde bir uyarı alınacaktır. Bu uyarı, select ifadelerinde son kolona partition olacak kolon yazılarak aşılabilir.

Son olarak External_Location kısmıda yeni oluşturulacak tablonun S3 üzerinde hangi klasörde tutulacağını ifade eder.

Not: Partition sayısı limitlere takılabilir. Doğru kolon ve planlamayı yaptıktan sonra create edilmesi iyi olacaktır. 😉

Kaynaklar:

__________________________________________________________________________

Ali Mesut Karadeniz

Yorum bırakın