Amazon Athena: دليل التكاليف والتحسين
اكتشف Amazon Athena وتعرّف على كيفية تحسين تكاليفه.
I
InSkillCoach
· دقيقة
Amazon Athena: دليل التكاليف والتحسين
اكتشف Amazon Athena وتعرّف على كيفية تحسين تكاليفه.
1. فهم تكاليف Athena
الفوترة
- حسب البايتات الممسوحة: 5 دولارات لكل TB
- حسب الاستعلام: مجاني
- مثال على التكلفة:
# Exemple de calcul des coûts
def calculate_athena_cost():
# Coût par TB scanné
cost_per_tb = 5 # USD
# Exemple de requête
query_size = {
'taille_donnees': 100, # GB
'octets_scannes': 50, # GB
'coût': (50 / 1024) * cost_per_tb # Conversion en TB
}
return query_size
عوامل التكلفة
# Exemple d'analyse des facteurs de coût
def analyze_cost_factors():
factors = {
'taille_donnees': {
'impact': 'Élevé',
'optimisation': 'Partitionnement'
},
'format_donnees': {
'impact': 'Élevé',
'optimisation': 'Parquet/ORC'
},
'requetes': {
'impact': 'Faible',
'optimisation': 'Cache'
}
}
return factors
2. تحسين البيانات
التقسيم (Partitioning)
# Exemple de partitionnement
def partition_data():
athena = boto3.client('athena')
# Création d'une table partitionnée
query = """
CREATE TABLE ma_table_partitionnee
WITH (
format = 'PARQUET',
partitioned_by = ARRAY['annee', 'mois']
)
AS
SELECT
*,
year(date_col) as annee,
month(date_col) as mois
FROM ma_table;
"""
response = athena.start_query_execution(
QueryString=query,
QueryExecutionContext={
'Database': 'ma_base'
},
ResultConfiguration={
'OutputLocation': 's3://mon-bucket/athena-results/'
}
)
return response['QueryExecutionId']
الضغط (Compression)
# Exemple de compression
def compress_data():
athena = boto3.client('athena')
# Création d'une table compressée
query = """
CREATE TABLE ma_table_compressee
WITH (
format = 'PARQUET',
compression = 'SNAPPY'
)
AS
SELECT * FROM ma_table;
"""
response = athena.start_query_execution(
QueryString=query,
QueryExecutionContext={
'Database': 'ma_base'
},
ResultConfiguration={
'OutputLocation': 's3://mon-bucket/athena-results/'
}
)
return response['QueryExecutionId']
3. تحسين الاستعلامات
شروط التقسيم (Partition Predicates)
# Exemple d'utilisation des prédicats de partition
def use_partition_predicates():
athena = boto3.client('athena')
# Requête optimisée avec prédicats de partition
query = """
SELECT *
FROM ma_table_partitionnee
WHERE annee = 2024
AND mois = 3;
"""
response = athena.start_query_execution(
QueryString=query,
QueryExecutionContext={
'Database': 'ma_base'
},
ResultConfiguration={
'OutputLocation': 's3://mon-bucket/athena-results/'
}
)
return response['QueryExecutionId']
الحدّ من الأعمدة
# Exemple de sélection de colonnes
def limit_columns():
athena = boto3.client('athena')
# Requête optimisée avec sélection de colonnes
query = """
SELECT
date_col,
categorie,
montant
FROM ma_table
WHERE date_col >= '2024-01-01';
"""
response = athena.start_query_execution(
QueryString=query,
QueryExecutionContext={
'Database': 'ma_base'
},
ResultConfiguration={
'OutputLocation': 's3://mon-bucket/athena-results/'
}
)
return response['QueryExecutionId']
4. صيغ البيانات
Parquet مقابل CSV
# Exemple de comparaison des formats
def compare_formats():
formats = {
'parquet': {
'compression': 'Excellente',
'performance': 'Élevée',
'taille': 'Petite',
'coût': 'Faible'
},
'csv': {
'compression': 'Faible',
'performance': 'Basse',
'taille': 'Grande',
'coût': 'Élevé'
}
}
return formats
تحويل الصيغة
# Exemple de conversion de format
def convert_format():
athena = boto3.client('athena')
# Conversion CSV vers Parquet
query = """
CREATE TABLE ma_table_parquet
WITH (
format = 'PARQUET',
compression = 'SNAPPY'
)
AS
SELECT * FROM ma_table_csv;
"""
response = athena.start_query_execution(
QueryString=query,
QueryExecutionContext={
'Database': 'ma_base'
},
ResultConfiguration={
'OutputLocation': 's3://mon-bucket/athena-results/'
}
)
return response['QueryExecutionId']
5. مراقبة التكاليف
مقاييس التكلفة
# Exemple de surveillance des coûts
def monitor_costs():
cloudwatch = boto3.client('cloudwatch')
# Métriques de coût
metrics = cloudwatch.get_metric_statistics(
Namespace='AWS/Athena',
MetricName='BytesScanned',
Dimensions=[
{
'Name': 'QueryType',
'Value': 'DML'
}
],
StartTime=datetime.now() - timedelta(days=7),
EndTime=datetime.now(),
Period=3600,
Statistics=['Sum']
)
return metrics['Datapoints']
تنبيهات التكلفة
# Exemple de configuration d'alerte
def setup_cost_alert():
cloudwatch = boto3.client('cloudwatch')
# Création d'une alerte
cloudwatch.put_metric_alarm(
AlarmName='AthenaCostAlert',
MetricName='BytesScanned',
Namespace='AWS/Athena',
Statistic='Sum',
Period=3600,
EvaluationPeriods=1,
Threshold=1000000000000, # 1 TB
ComparisonOperator='GreaterThanThreshold',
AlarmActions=['arn:aws:sns:region:account:mon-topic']
)
6. أفضل الممارسات
معاينة التكاليف
# Exemple de prévisualisation des coûts
def preview_costs():
athena = boto3.client('athena')
# Exécution d'une requête EXPLAIN
query = """
EXPLAIN
SELECT *
FROM ma_table
WHERE date_col >= '2024-01-01';
"""
response = athena.start_query_execution(
QueryString=query,
QueryExecutionContext={
'Database': 'ma_base'
},
ResultConfiguration={
'OutputLocation': 's3://mon-bucket/athena-results/'
}
)
return response['QueryExecutionId']
التخزين المؤقت للنتائج (Cache)
# Exemple d'utilisation du cache
def use_result_cache():
athena = boto3.client('athena')
# Configuration du cache
athena.update_work_group(
WorkGroup='primary',
ConfigurationUpdates={
'ResultConfigurationUpdates': {
'OutputLocation': 's3://mon-bucket/athena-results/',
'EncryptionConfiguration': {
'EncryptionOption': 'SSE_S3'
}
},
'RequesterPaysEnabled': False,
'PublishCloudWatchMetricsEnabled': True,
'BytesScannedCutoffPerQuery': 10000000000 # 10 GB
}
)
الخلاصة
أهم النقاط التي ينبغي تذكرها:
- الفوترة حسب البايتات الممسوحة
- التحسين عبر التقسيم (Partitioning)
- استخدام صيغ بيانات فعّالة
- مراقبة التكاليف
- التخزين المؤقت للنتائج
التوصيات:
- تقسيم البيانات
- استخدام Parquet/ORC
- الحدّ من الأعمدة الممسوحة
- إعداد التنبيهات
- مراقبة التكاليف بانتظام
نبذة عن InSkillCoach
خبير في التدريب والتقنيات
مدرّب متخصص في التقنيات المتقدمة والذكاء الاصطناعي، تدعمه شركة GNeurone Inc.
الشهادات:
- AWS Certified Solutions Architect – Professional
- شهادات Google Cloud
- Microsoft Certified: DevOps Engineer Expert
- Certified Kubernetes Administrator (CKA)
- CompTIA Security+
1.3k
342
التعليقات
التعليقات مدعومة عبر GitHub Discussions
سجّل الدخول باستخدام GitHub للمشاركة في النقاش