Ana içeriğe geç

DynamoDB'den Redshift'e: Verileri Taşımak için Üç Yöntem

Amazon DynamoDB'den Redshift'e veri taşımak için üç yöntemi, her yöntemin artı ve eksilerini, veri bütünlüğü ve performans optimizasyonu için en iyi uygulamaları adım adım öğrenin.
· 15 dk. oku

Yapay Zeka ile Keşfedin

Amazon DynamoDB, piyasadaki en güvenilir ve en yaygın kullanılan NoSQL veritabanlarından biridir. DynamoDB’den Amazon Redshift’e veri taşımak, DynamoDB’de tutulan verileri daha iyi anlamak açısından önemli avantajlar sağlar.

Bu eğitimde, DynamoDB’den Redshift’e veri taşımak için üç yöntemi, her yaklaşım için adım adım talimatlarla ele alıyorum. Ayrıca veri bütünlüğünü sağlamak için en iyi uygulamalara değinecek ve performansı optimize etmeye yönelik stratejileri tartışacağım.

DynamoDB Nedir?

DynamoDB, AWS tarafından sunulan, yüksek performans ve sorunsuz ölçeklenebilirlik sağlamak üzere tasarlanmış, tamamen yönetilen sunucusuz bir NoSQL veritabanıdır. İşlemsel iş yüklerini yönetmede üstündür; terabaytlarca veriye sahip tabloları desteklerken günde milyarlarca isteği işleyebilir. 

Bu güçlü yetenekleri sayesinde DynamoDB; finans, e-ticaret, sağlık, medya ve oyun sektörlerinde kritik bir rol oynar. Genellikle kullanıcı profil lider tablolarını oluşturmak ve sürdürmek, IoT verilerini depolamak ve işlemek ve gerçek zamanlı veri erişimi gerektiren diğer uygulamalar için kullanılır.

Bu tür veritabanları ilginizi çekiyorsa, NoSQL Concepts kursu Redis, MongoDB, Apache Cassandra ve Neo4j dâhil dört popüler NoSQL motorunu öğretir.

Redshift Nedir?

Redshift, büyük ölçekli veri işlemlerini verimli ve hızlı bir şekilde yönetmek üzere tasarlanmış, AWS'nin tamamen yönetilen bulut veri ambarıdır. 

Yoğun Paralel İşleme (MPP) teknolojisinden yararlanan Redshift, verileri birden fazla düğüme dağıtıp işleyebilir; böylece karmaşık SQL sorgularını hızlıca çalıştırır.

Ayrıca, Redshift üzerindeki sorgular geleneksel veri ambarlarındakilere kıyasla çok daha ekonomiktir. Redshift’in analitik yetenekleri, büyük veri analitiği, gerçek zamanlı gösterge tabloları ve makine öğrenimi uygulamaları dâhil çeşitli kullanım senaryolarında kritik öneme sahiptir. 

Bu güçlü veri ambarını daha derinlemesine anlamak için Introduction to Redshift kursuna göz atın. 

Kullanım Senaryosunu Anlamak: Veriler Neden DynamoDB'den Redshift'e Taşınmalı?

DynamoDB’nin, Çevrimiçi İşlem İşleme (OLTP) sistemlerine özgü işlemsel iş yüklerini yönetmede üstün olduğu açıktır; ancak karmaşık analitik için optimize edilmemiştir. Öte yandan Redshift, özel olarak Çevrimiçi Analitik İşleme (OLAP) sistemleri için tasarlanmıştır ve bu rol için çok daha uygundur. 

Bu nedenle, verileri DynamoDB’den Redshift’e taşıyarak AWS kullanıcıları, verilerinden daha derin içgörüler elde etmek için gelişmiş SQL tabanlı analizler gerçekleştirebilir.

Önkoşullar ve Kurulum

Bu eğitim, katılımcıların aşağıdakilere sahip olduğunu varsayar:

  • AWS ve ilgili diğer araçlar ile tekniklerde önceki deneyim. 
  • İlişkisel ve NoSQL veritabanlarına dair temel bir anlayış. 
  • SQL ile aşinalık.
  • En az bir programlama dilini bilmek faydalı olacaktır.

Veri taşıma yöntemleri, aşağıdakiler dâhil birkaç temel AWS hizmetini içerecektir:

  • Identity and Access Management (IAM)
  • DynamoDB
  • Redshift
  • S3
  • Glue
  • Lambda

AWS’te yeniyseniz, AWS Cloud Technology and Services kursu başlamanıza yardımcı olacaktır.

İşlemlerin çoğu AWS Yönetim Konsolu’nda gerçekleştirilecektir. Ancak, bu eğitimde ele alınan adımlar AWS komut satırı arayüzü (CLI) veya bir AWS yazılım geliştirme kiti (SDK) ile de yürütülebilir. Veri taşıma işlemini seçtiğiniz çalışma ortamında gerçekleştirebilirsiniz.

Veri taşıma için DynamoDB’yi hazırlama

Veri taşımaya hazırlanırken, DynamoDB tablolarının bileşenlerini ve bunların ilişkisel veritabanlarından nasıl farklılaştığını göz önünde bulundurmak önemlidir:

  • DynamoDB tablolarının yapı taşları, items (ilişkisel veritabanlardaki satırlara benzer) öğeleridir. 
  • Öğeler bir veya birden çok attribute özniteliği içerir; bunların her biri bir veri öğesini temsil eder. 
  • İlişkisel tablolarda olduğu gibi, DynamoDB tablolarında da her öğe için benzersiz tanımlayıcı görevi gören primary key birincil anahtarlar bulunur. Birincil anahtar, tek bir bölüm anahtarından veya bir bölüm anahtarı ile bir sıralama anahtarının birleşiminden oluşabilir.
  • DynamoDB tablolarının önemli bir özelliği schemaless şemasız olmalarıdır; bu da her öğenin benzersiz özniteliklere sahip olabileceği anlamına gelir.

Eğitimde veri taşımayı göstermek için basit bir Products tablosu kullanılacaktır. Aşağıda veriler JSON formatında verilmiştir: 

	{
    	"product_id": "P001",
    	"category": "Electronics",
    	"price": 700,
    	"product_name": "Phone"
	},
	{
    	"product_id": "P002",
    	"category": "Electronics",
    	"description": "The laptop is a Macbook.",
    	"price": 1000,
    	"product_name": "Laptop"
	}

Dikkat edilmesi gereken iki önemli nokta vardır:

  • product_id birincil anahtar olarak hizmet edecektir.
  • İki öğedeki öznitelikler eşit değildir; çünkü ilk öğede description özniteliği eksiktir.

Bu veriler, kurulumun bir parçası olarak DynamoDB’de bir tabloya eklenir.

DynamoDB table items

DynamoDB tablo öğeleri. Görsel: yazar

Amazon Redshift’i kurma

Bir sonraki adım, DynamoDB tablosundaki verileri alacak Redshift’te bir tablo kurmaktır. 

1. Redshift konsoluna gidin ve “Create cluster”ı seçin.

AWS, küme oluşturulmadan önce kullanıcıların çeşitli parametreleri tanımlamasına olanak tanır. Bu eğitimde, veri taşımayı kolaylaştırmak için gerekenlere odaklanılacaktır.

Creating a Redshift cluster in the Redshift Console

Redshift Konsolu’nda Redshift kümesi oluşturma. Görsel: yazar

2. Analiz edilecek veri hacmine uygun düğüm türünü ve düğüm sayısını seçin.

Products tablosunu taşımak için minimum CPU kapasitesi kullanabilir ve yalnızca bir düğüme sahip olabilirsiniz.

Customizing the Redshift cluster configuration

Redshift küme yapılandırmasını özelleştirme. Görsel: yazar

3. Bu küme için yönetici kullanıcı adını ve parolasını seçin.

Kimlik bilgilerini güvenli bir yerde saklayın; çünkü bu kümeye diğer AWS hizmetleri aracılığıyla erişmek için gerekecektir.

Customizing the Redshift cluster configuration

Redshift küme yapılandırmasını özelleştirme. Görsel: yazar

4. Son olarak kümeye bir IAM rolü atayın.

IAM rolünün, kümenin DynamoDB tablolarını okumasına ve Redshift’te tablolar oluşturmasına izin veren politikalara ihtiyacı olacaktır. 

Assigning an IAM role to the Redshift cluster

Redshift kümesine IAM rolü atama. Görsel: yazar

5. Küme oluşturulduktan sonra, sorgu düzenleyicisine gidin ve CREATE komutunu kullanarak DynamoDB tablosundaki verileri barındıracak tabloyu oluşturun:

CREATE TABLE Products (
	product_id VARCHAR(50) PRIMARY KEY,
	category VARCHAR(50),
	description VARCHAR(100),
	price INT,
	product_name VARCHAR(50),
	stock_quantity INT
);

Yukarıdaki komutu ilgi duyduğunuz verilere göre değiştirin ve uygulanması gereken ek kısıtları göz önünde bulundurun.

Hepsi bu kadar! Verileri aktarmaya başlamaya hazırsınız.

Yöntem 1: COPY Komutunu Kullanarak DynamoDB'den Redshift'e Veri Aktarma

Amazon Redshift, verilen bir AWS veri kaynağından bir tabloya veri alan COPY komutunu sunar.

1. COPY komutunu kullanarak veri taşımayı gerçekleştirin. 

Komutun söz dizimi aşağıdaki gibidir:

COPY <table_name>
FROM <dynamo_db_table_path>
IAM_ROLE 'arn:aws:iam::<aws-account-id>:role/<role-name>'
REGION <region_name>';

DynamoDB’deki Products tablosundan Redshift’teki Products tablosuna veri eklemek için komut şu şekilde değiştirilebilir:

COPY Products
FROM 'dynamodb://Products'
IAM_ROLE  'arn:aws:iam::<1234567890>:role/<dynamo_db_redshift_role>'
REGION ‘us-east-1’

COPY komutunu kullanmanın artıları

COPY komutu, DynamoDB’den Redshift’e veri taşımak için en basit yöntemlerden biridir. Kurulumu minimum düzeydedir ve kullanım kolaylığı, ETL boru hatları oluşturma konusunda daha az deneyimli olanlar için özellikle erişilebilir kılar. 

Ayrıca, veri aktarımı doğrudan yapıldığından başka AWS hizmetlerini devreye almaya gerek yoktur.

COPY komutunu kullanmanın eksileri

Bu yöntemin temel dezavantajı, kullanıcıların DynamoDB tablosundaki özniteliklerin Redshift tablosundaki alanlara nasıl eşleneceğini yapılandıramamasıdır. Bu esneklik eksikliği, COPY komutunun Redshift tablosunda alanları hatalı şekilde atlamasına veya yanlış eşlemesine yol açabilir. 

Ek olarak, komut tüm verileri tek bir işlemde aktardığından, bazı kayıtların önceden Redshift’e taşınmış olduğu durumlarda verimsiz olabilir. Bu yaklaşım, böyle senaryolarda yinelenen veri aktarımına neden olarak işlem süresini ve depolama maliyetlerini artırır.

Yöntem 2: AWS Glue Kullanarak DynamoDB'den Redshift'e Veri Aktarma

AWS Glue, çıkarma, dönüştürme ve yükleme (ETL) boru hatları oluşturmak için tasarlanmış bir hizmettir. Kullanıcılar bir ETL işi oluşturarak DynamoDB’den Redshift’e veri aktarabilir.

Glue’a yeniyseniz, Getting Started with AWS Glue eğitimini takip etmeyi düşünün.

Bu kılavuzda DynamoDB’deki Products tablosunu okuyacak, sonuçları bir S3 kovasında CSV dosyası olarak depolayacak ve ardından bu verileri Redshift’teki Products tablosuna göndereceğiz. 

1. S3 konsoluna gidin ve CSV dosyasını barındıracak bir kova oluşturun.

AWS S3 console

AWS S3 konsolu. Görsel: yazar

2. AWS Glue konsoluna gidin ve sol panelden “ETL jobs” seçeneğini seçerek işinizi oluşturmaya başlayın. 

AWS Glue console

AWS Glue konsolu. Görsel: yazar

3. ETL işi oluşturma modunu seçin.

AWS üç iş oluşturma modu sunar: Visual ETL, Notebook ve Script editor. Her mod farklı uzmanlık seviyelerine hitap eder; kullanıcıların sürükle-bırak arayüzü (Visual ETL), etkileşimli geliştirme ortamı (Notebook) veya ham kodlama (Script Editor) arasından tercih yapmasına olanak tanır.

Glue işleri Python veya Spark kullanılarak elle kodlanabilir. Bu dillere daha az hâkim olanlar için Visual ETL uygun bir seçimdir; zira yalnızca tıklayarak işlerini yapılandırmalarını sağlar.

Bu eğitimdeki Glue işi, bir kod düzenleyicide Python ile yazılacaktır; ancak Visual ETL seçeneğiyle ilgilenenler AWS dokümantasyonuna göz atabilir.

4. Bu işe bir IAM rolü atayın. 

Bu eğitimin başarıyla çalışması için IAM rolünün DynamoDB, Redshift ve S3 erişimine sahip olması gerekir. 

Assigning an IAM role to the Glue job

Glue işine IAM rolü atama. Görsel: yazar

5. İşi oluşturduktan sonra “Job details” sekmesine geçin ve temel özellikleri doldurun.

Filling Glue job details

Glue iş ayrıntılarını doldurma. Görsel: yazar

Bu bölümde, ayrılan veri işleme birimlerini (DPU), yeniden deneme sayısını ve işin zaman aşımı süresini tanımlayabilirsiniz. Bu eğitimdeki iş varsayılan değerleri koruyacaktır; ancak kullanıcıların bu parametreleri verilen işin ihtiyaçlarına göre uyarlamaları önerilir. 

6. “Script” sekmesine geçin ve mantığınızı yazın. 

Products tablosundaki verileri taşıyacak ETL işi aşağıdaki kodu çalıştıracaktır:

import boto3
import csv
import time
import os
from awsglue.context import GlueContext
from awsglue.job import Job
from pyspark.context import SparkContext
from awsglue.utils import getResolvedOptions
import sys
# initialize Glue context
args = getResolvedOptions(sys.argv, ["JOB_NAME"])
sc = SparkContext()
glueContext = GlueContext(sc)
job = Job(glueContext)
job.init(args["JOB_NAME"], args)
# initialize DynamoDB client and scan the table
dynamodb = boto3.client('dynamodb', region_name=os.getenv('AWS_REGION'))
response = dynamodb.scan(TableName=os.getenv('DYNAMODB_TABLE'))
# extract and write data to a CSV file
items = response['Items']
csv_file = '/tmp/products.csv'
# write each row in the table
with open(csv_file, mode='w', newline='') as file:
	writer = csv.writer(file)
	writer.writerow(['product_id', 'category', 'description', 'product_name', 'stock_quantity', 'price'])
	for item in items:
    	writer.writerow([
        	item.get('product_id', {}).get('S', ''),
        	item.get('category', {}).get('S', ''),
        	item.get('description', {}).get('S', ''),
        	item.get('product_name', {}).get('S', ''),
        	item.get('stock_quantity', {}).get('N', 0),
        	item.get('price', {}).get('N', 0)
    	])
# upload the csv file to S3
s3 = boto3.client('s3', region_name=os.getenv('AWS_REGION'))
bucket_name = os.getenv('S3_BUCKET_NAME')
s3_key = 'products/products.csv'
s3.upload_file(csv_file, bucket_name, s3_key)
# wait for the file to upload before continuing
time.sleep(10)
# load data into Redshift using the COPY command
redshift = boto3.client('redshift', region_name=os.getenv('AWS_REGION'))
copy_command = f"""
	COPY Products FROM 's3://{bucket_name}/{s3_key}'
	IAM_ROLE 'arn:aws:iam::{os.getenv('AWS_ACCOUNT_ID')}:role/{os.getenv('REDSHIFT_ROLE')}'
	FORMAT AS CSV
	IGNOREHEADER 1;
"""
cluster_id = os.getenv('REDSHIFT_CLUSTER_ID')
database = os.getenv('REDSHIFT_DATABASE')
db_user = os.getenv('REDSHIFT_DB_USER')
# execute the copy statement
response = redshift.execute_statement(
	ClusterIdentifier=cluster_id,
	Database=database,
	DbUser=db_user,
	Sql=copy_command
)
# Commit the job
job.commit()

Bu betiğin adım adım neleri başardığını inceleyelim:

  1. awsglue kütüphanesini kullanarak işi yürütme için ayarlama
  2. AWS’in Python SDK’sı olan boto3 ile DynamoDB tablosuna erişme
  3. Tablo öğelerini bellekte yazma ve oluşturulan S3 kovasına CSV dosyası olarak dışa aktarma
  4. boto3 ile Redshift kümesine erişme
  5. CSV dosyasındaki verileri Redshift tablosuna ekleyen bir COPY komutu yazma ve yürütme

Not: Örnek kod parçacığı, veri taşımayı kolaylaştırmanın bir yolunu özetler. AWS Glue esnekliği teşvik eder ve bir ETL boru hattı oluşturmanın birden fazla yolunu sunar. Dolayısıyla kullanıcılar ihtiyaçlarına özel işler oluşturabilir. 

7. Kod yazıldıktan sonra değişiklikleri kaydedin ve işi yürütmek için “Run” düğmesine tıklayın.

Script editor for the Glue job

Glue işi için komut dosyası düzenleyicisi. Görsel: yazar

8. Hatalar veya sorunların görüntüleneceği “Runs” sekmesinde işin ilerlemesini izleyin. 

İşin durumunu doğrulayın ve her şeyin beklendiği gibi çalıştığından emin olmak için günlükleri inceleyin.

AWS Glue Runs tab showing a completed job

Tamamlanmış bir işi gösteren AWS Glue Runs sekmesi. Görsel: yazar

İş başarılı olduğunda, talep üzerine çalıştırılabilir veya ihtiyaç duyulduğunda zamanlanabilir; böylece veri taşıma süreciniz daha verimli ve otomatik hale gelir.

Glue kullanmanın artıları

AWS Glue kapsamlı özelleştirme seçenekleri sunar ve kullanıcıların işlerini ihtiyaçlarına göre uyarlamalarını sağlar. Ayrıca bu işlerin periyodik aralıklarla (ör. günlük) zamanlanmasını sunarak otomasyonu mümkün kılar. Dahası Glue, birçok diğer hizmetle entegredir ve gerekirse DynamoDB dışındaki veri kaynaklarıyla etkileşimi kolaylaştırır. 

Glue kullanmanın eksileri

Glue’da bir ETL işi yapılandırmak genellikle emek ve kurulum süresi gerektirir. Bu hizmeti kullanmak için programlama bilgisi şart olmasa da, AWSGlue kütüphanesi ve bir SDK gibi Glue’un sunduğu bazı özelliklerden yararlanmak için gerekli olacaktır. 

Ayrıca, Glue işlerinin ilk denemede başarıyla çalışması pek olası değildir; bu nedenle kullanıcılar sorun gidermeye zaman ayırmaya hazırlıklı olmalıdır. Son olarak, düzgün yönetilmediğinde Glue işleri hızla maliyet biriktirebilir; bu yüzden yalnızca gerekli kaynakların sağlanması kritiktir. 

Yöntem 3: DynamoDB Streams Kullanarak DynamoDB'den Redshift'e Veri Aktarma

DynamoDB Streams, DynamoDB tablolarında yapılan değişiklikleri gerçek zamanlı olarak izleyen bir özelliktir. DynamoDB Streams’den yararlanarak, DynamoDB’deki veri kaynağında bir değişiklik yapıldığında Redshift tablonuzu otomatik olarak güncelleyebilirsiniz. 

DynamoDB Streams’in nasıl kullanılacağı hakkında daha fazla bilgi için AWS dokümantasyonunu okuyun.

Bu çözüm için AWS DynamoDB, Redshift ve Lambda erişimi gerekir. Bu yaklaşımda, DynamoDB’deki Products tablosuna bir öğe eklendiğinde veya değiştirildiğinde bir Lambda işlevi tetiklenecektir. 

İşte adımlar: 

1. Lambda konsoluna gidin ve “Create Function”ı seçin.

AWS Lamba console

AWS Lamba konsolu. Görsel: yazar

2. Programlama dili ve IAM rolü dâhil olmak üzere işlev için temel bilgileri sağlayın.

Rolün Lambda, DynamoDB ve Redshift erişimine sahip olması gerekir.

Configuring the Lambda function

Lambda işlevini yapılandırma. Görsel: yazar

3. İşlevi oluşturduktan sonra, tetikleyici olarak DynamoDB tablosunu (bizim örneğimizde Products tablosu) ekleyin.

Diyagram artık aşağıdaki gibi görünmelidir:

Adding a trigger to the Lambda function

Lambda işlevine tetikleyici ekleme. Görsel: yazar

4. Yapılandırma sekmesine geçin ve varsayılan değerler genellikle yetersiz olduğundan işlev için gereken bellek ve çalışma süresini tahsis edin.

Configuring the trigger for the Lambda function

Lambda işlevi için tetikleyiciyi yapılandırma. Görsel: yazar

5. “Code” sekmesinde, veri taşımaya yönelik mantığı seçtiğiniz dilde yazın.

Aşağıdaki parça, Python ile yazılmış bir Lambda işlevinin nasıl görünebileceğine bir örnektir:

import boto3
import os
import json
def lambda_handler(event, context):
	# Initialize the Redshift Data API client
	redshift_client = boto3.client('redshift-data')
	# Redshift cluster details 
	cluster_id = os.environ['REDSHIFT_CLUSTER_ID']
	database = os.environ['REDSHIFT_DB_NAME']
	user = os.environ['REDSHIFT_USER']
	# IAM role ARN that has access to Redshift Data API
	role_arn = os.environ['REDSHIFT_ROLE_ARN']
    
	# Process DynamoDB stream records
	for record in event['Records']:
    	if record['eventName'] in ['INSERT', 'MODIFY']:
        	new_image = record['dynamodb']['NewImage']
        	product_id = new_image['product_id']['S']
        	category = new_image['category']['S']
        	description = new_image['description']['S']
        	price = float(new_image['price']['N'])
        	product_name = new_image['product_name']['S']
        	stock_quantity = int(new_image['stock_quantity']['N'])
       	 
        	# SQL query to insert data into Redshift
        	query = f"""
            	INSERT INTO products (product_id, category, description, price, product_name,   stock_quantity)
            	VALUES ('{product_id}', '{category}', '{description}', {price}, '{product_name}', {stock_quantity});
        	"""
       	 
        	# Execute the query using Redshift Data API
        	response = redshift_client.execute_statement(
            	ClusterIdentifier=cluster_id,
            	Database=database,
            	DbUser=user,
            	Sql=query
        	)
       	 
        	# Log the statement ID for tracking
        	print(f'Started SQL statement with ID: {response["Id"]}')
    
	return {
    	'statusCode': 200,
    	'body': 'SQL statements executed successfully'
	}

Basitçe ifade etmek gerekirse, işlev DynamoDB Streams tarafından kaydedilen eklenen veya değiştirilen öğelerin günlüğünü okur ve Redshift API istemcisiyle bir SQL sorgusu yürüterek bunları Redshift tablosuna uygular. 

Güvenlik için, anahtar değerler (ör. Redshift küme kimliği) betiğe sabit kodlanmak yerine ortam değişkenlerinde saklanır.

Lambda’da ortam değişkenlerinin kullanımı hakkında daha fazla bilgiyi AWS dokümantasyonunda bulabilirsiniz.

6. Kodu bitirdikten sonra işlevi dağıtın ve hatalara karşı test edin. 

Kullanım senaryosuna bağlı olarak, işlev için kendi test vakalarınızı tasarlamaya değer olabilir. 

Lambda function executing results

Lambda işlevi yürütme sonuçları. Görsel: yazar

Lambda işlevi çalışır durumdayken, tablodaki bir öğe eklendiğinde veya değiştirildiğinde bu işlevin çalışması için DynamoDB tablosunu yapılandırmamız gerekir.

7. DynamoDB tablosunu seçin ve “Exports and streams” sekmesine geçin.

DynamoDB console Exports and streams tab. Image by author

DynamoDB konsolu Exports and streams sekmesi. Görsel: yazar

8. DynamoDB stream details bölümüne inin ve “Turn on”ı seçin.

DynamoDB console Exports and streams tab

DynamoDB konsolu Exports and streams sekmesi. Görsel: yazar

9. İstendiğinde, DynamoDB Streams’te hangi tür bilgilerin kaydedilmesi gerektiğini seçin.

DynamoDB stream details screen

DynamoDB stream ayrıntıları ekranı. Görsel: yazar

10. Akışı açtıktan sonra, aynı sayfada aşağı kaydırarak tetikleyiciyi oluşturun.

Creating a trigger to invoke a Lambda function in DynamoDB

DynamoDB’de bir Lambda işlevini çağırmak için tetikleyici oluşturma. Görsel: yazar

11. Son olarak, tetikleyiciyi yapılandırırken, daha önce oluşturulmuş Lambda işlevini seçin ve ardından “Create trigger”ı seçin.

Selecting a Lambda function to trigger

Tetiklenecek bir Lambda işlevi seçme. Görsel: yazar

Bu çözümü uygulamak, DynamoDB tablosunda yapılan tüm değişiklikleri Redshift tablosuna otomatik olarak uygular ve gerçek zamanlı veri tutarlılığı sağlar. 

DynamoDB Streams kullanmanın artıları

DynamoDB Streams, DynamoDB ile Redshift arasında gerçek zamanlı senkronizasyon oluşturur. Bu sayede kullanıcılar, manuel müdahale olmaksızın Redshift tablolarını güncel tutabilir. 

Böylelikle Redshift tabloları sıkça güncellenebilir; bu da (ör. gerçek zamanlı gösterge tabloları gibi) yüksek veri aktarımı gerektiren uygulamaları besleyebilir. Bu çözüm ayrıca her yinelemede insan hatası riskini azaltır. 

DynamoDB Streams kullanmanın eksileri

Bu çözümün kurulması, zaman alabilen bir dizi AWS hizmetinin yapılandırılmasını gerektirir. 

Lambda bir Hizmet Olarak İşlev (FaaS) aracıdır; bu nedenle kullanıcıların bir programlama diline iyi derecede hâkim olması gerekir. Ayrıca, veri senkronizasyonunun her yinelenmesinde bir dizi API çağrısı gerektiğinden, özellikle sık güncellemelerde toplam maliyet hızla artabilir. Son olarak, bu çözüm tam tablo taşımalarından ziyade Redshift tablolarındaki küçük değişiklikler için daha uygundur. 

Veri Taşımayı Doğrulama

Veri doğrulama, veri taşıma çözümü oluşturulduktan sonra temel bir adımdır. AWS hizmetleri sorunsuz çalışsa bile, hesaba katılmamış taşıma hataları olabilir. Bu sorunlar mantıksal tutarsızlıklardan, özniteliklerin hatalı eşlenmesinden veya eksik veri aktarımlarından kaynaklanabilir. 

Redshift’te yapılacak sonraki tüm analizlerin başarılı olabilmesi için taşınan verilerin bu hatalardan arınmış olması gerekir.

Bu bölüm, Products tablosunu örnek alarak taşınan verileri incelemek için bazı kontrolleri ve teknikleri ele alır. 

Sütun yapısını ve veri türünü doğrulayın

DynamoDB tablosundaki tüm sütunların Redshift tablosunda mevcut olduğundan ve doğru veri türleri atandığından emin olun. 

SELECT column_name, data_type
FROM information_schema.columns
WHERE table_name = Products;

Satır sayısını doğrulayın

Redshift tablosundaki satır sayısını veri kaynağındakiyle karşılaştırarak veri aktarımının tamamlandığını doğrulayın. 

SELECT COUNT(*) FROM your_table_name;

Verileri önizleyin

Sütunları ve veri türlerini belirlemenin bir alternatifi de verileri önizlemektir. Kullanıcılar, uyumsuzlukları veya anormallikleri tespit etmek için önizlemeyi hızlıca gözden geçirebilir. 

SELECT product_id, category, price FROM your_table_name LIMIT 5;

Karmaşık iş mantığını doğrulayın

Verileri önizleyerek veya sayımlar yaparak doğrulamak tüm veri kümeleri için yeterli değildir. Verileri daha karmaşık ölçütlere göre değerlendirme ihtiyacı olduğunda, görünümler oluşturabilirsiniz.  

Örneğin, Products tablosunda elektronik ürünlerin stoklarının asla düşük olmaması gerektiğini varsayalım. Bu durumu aşağıdaki sorguyla izleyebilirsiniz.

CREATE OR REPLACE VIEW low_stock_electronics AS
SELECT
	Product_id, product_name, category, stock_quantity, price,
FROM
	your_table_name
WHERE
	stock_quantity < 50 AND
	Category = ‘Electronics;

Redshift'te Performansı Optimize Etme

Sorgu performansını optimize etmek, içgörüleri verimli ve düşük maliyetle elde etmek için esastır. Belleği koruyan ve çalışma süresini azaltan sorgular yazmak, veri kümesi her taşıma ile büyüdükçe özellikle önemli olacaktır. 

Bu bölüm, referans olarak Products tablosunu kullanarak sorgu optimizasyonunu iyileştirmenin bazı yöntemlerini ele alır. 

Bir dağıtım anahtarı seçin

Redshift’te dağıtım anahtarları, verilerin bir kümedeki düğümlere nasıl dağıtılacağını belirler. Bir tabloda doğru dağıtım anahtarını seçmek, sorguların çalışma süresini azaltabilir. 

Örneğin, Products tablosu diğer tablolarla product_id alanı üzerinden birleştirilecekse, tablo oluşturulurken product_id’yi dağıtım anahtarı olarak kullanmak faydalı olacaktır. 

CREATE TABLE products (
	product_id VARCHAR(100),
	category VARCHAR(100),
	description VARCHAR(100),
	price INT,
	stock_quantity INT
)
DISTKEY(product_id);

Bir sıralama anahtarı seçin

Doğru sıralama anahtarının seçilmesi, filtreler ve birleştirmeler gibi yaygın SQL işlemlerini güçlendirir. Redshift’te kullanıcılar bir sıralama anahtarını manuel olarak seçebilir veya bir sıralama anahtarının kendileri için seçilmesini tercih edebilir. Sıralama anahtarları iki kategoriye ayrılır: bileşik sıralama anahtarları ve geçişli (interleaved) sıralama anahtarları. En iyi sıralama anahtarı, veriler üzerinde çalıştırılması gereken sorgulara bağlıdır. 

CREATE TABLE products (
	product_id VARCHAR(100),
	category VARCHAR(100),
	description VARCHAR(100),
	price INT,
	stock_quantity INT
)
COMPOUND SORTKEY(category, product_id);

Sıralama anahtarları hakkında daha fazla bilgi için AWS dokümantasyonunu ziyaret edin. 

Sıkıştırma kullanın

Sıkıştırma, verilen verilerin daha az bit ile kodlanmasını içerir. Bu, daha az depolama kullanan ancak tüm bilgileri koruyan bir tabloyla sonuçlanır. 

Verileri için hangi tür sıkıştırmanın en iyi olduğundan emin olmayanlar için Redshift, aşağıdaki komutla her alan için en iyi kodlamayı bulmak üzere sıkıştırma analizi gerçekleştirebilir:

ANALYZE COMPRESSION <table_name>;

Sonuç ve Sonraki Adımlar

Verileri DynamoDB’den Redshift’e taşımak, kullanıcıların daha karmaşık veri analizleri için Redshift’in OLAP yeteneklerinden yararlanmasını sağlar. 

Bu eğitim, her birinin kendine özgü avantaj ve dezavantajları olan üç farklı taşıma yöntemini inceledi. En iyi yaklaşımı seçerken, özel kullanım senaryonuz için en etkili çözümü sağlamak üzere analiz ihtiyaçlarınızı, veri sınırlamalarınızı ve bütçe hususlarını dikkatle değerlendirin.

Harika bir sonraki adım, temel kavramları öğrenmek veya tazelemek için Introduction to Redshift kursuna başlamaktır. AWS Security and Cost Management kursu da AWS ile çalışan herkesin hâkim olması gereken kavramları öğrenmek için bir diğer güçlü alternatiftir.

FAQs

Bu yöntemleri kullanarak taşıma işlemini otomatikleştirebilir miyim?

Evet, hem AWS Glue hem de DynamoDB Streams otomasyona izin verir. Glue işleri belirli aralıklarla çalışacak şekilde zamanlanabilir; DynamoDB Streams ise Lambda kullanılarak gerçek zamanlı veri senkronizasyonunu tetikleyecek şekilde ayarlanabilir.

Büyük veri kümeleri için en verimli yöntem hangisidir?

AWS Glue yöntemi genellikle büyük veri kümelerini ele almak için en iyi seçenektir. Kapsamlı özelleştirme ve ölçeklenebilirlik sunar; bu da onu karmaşık ETL görevleri için ideal kılar, ancak daha fazla kurulum süresi gerektirebilir.

Bu yöntemleri kullanırken maliyet açısından nelere dikkat etmeliyim?

COPY komutu, basit ve tek seferlik taşımalar için en uygun maliyetli yöntemdir. Ancak Glue ve DynamoDB Streams, devam eden kaynak kullanımı nedeniyle daha yüksek maliyet biriktirebilir; bu yüzden AWS hizmet tüketiminizi izlemeniz ve optimize etmeniz önemlidir.

Tüm tabloyu taşımak yerine belirli verileri seçerek aktarabilir miyim?

Evet, AWS Glue ve DynamoDB Streams, belirli öğeleri veya öznitelikleri filtreleyip aktarmada esneklik sunar. Öte yandan COPY komutu filtreleme yetenekleri olmadan tüm veri kümesini aktarır.

DynamoDB&rsquo;deki şema değişikliklerini Redshift&rsquo;e taşırken yönetebilir miyim?

Evet, Redshift tanımlı bir şema gerektirirken DynamoDB şemasızdır. Taşıma öncesinde yeni öznitelik veya alanları karşılamak için Redshift tablo yapısını güncelleyerek şema değişikliklerini manuel olarak hesaba katmanız gerekir. Şema farklılıklarını ele almak için en fazla esnekliği AWS Glue sunar.

Aashish Nair

Yazar

Aashish Nair

Gelişmekte olan bir veri bilimci olarak, ham veriyi eyleme dönüştürülebilir stratejilere çevirmede başarılıyım. Veri analizinde etkili çözümler üretmek ve büyük miktarda veriyi alan ve işleyen sağlam ETL hatları tasarlamak için Python, SQL ve makine öğrenmesi tekniklerinden yararlanma konusunda uzmanım.

Konular

İlgili