الجزء 23 من سلسلة تعلّم AWS من الصفر

تحليل البيانات: Athena وRedshift وGlue

كيف تطلع إجابات من بياناتك. استعلامات SQL على S3 بـ Athena، ومستودع بيانات بـ Redshift، وتجهيز البيانات بـ Glue، مع البحث والشغل الكبير واللوحات والتيارات، وتجربة عملية يقلل فيها Parquet اللي يقرأه الاستعلام.

في هذا المقال
  1. نوعين من الشغل
  2. Amazon Athena: SQL على S3
  3. Amazon Redshift: المستودع
  4. AWS Glue: تجهيز البيانات
  5. Lake Formation: صلاحيات البحيرة
  6. البحث والشغل الكبير واللوحات
  7. التيارات: Flink وKafka
  8. كيف توصل البيانات؟
  9. الصورة الكاملة
  10. عملي: Parquet يقلل اللي يقرأه الاستعلام
  11. الخلاصة
  12. اختبر نفسك

التطبيق اللي خلصنا تصميمه في الجزء الثاني والعشرين يطلع بيانات كثيرة: طلبات وسجلات وأحداث. وبعدين يسألك أحد: "أي مدينة نمت أكثر هالسنة؟"

تقدر تشغّل هذا على قاعدة الإنتاج وتبطئها على عملائك. بس AWS عندها مجموعة خدمات مبنية للتحليل، وهذا الجزء دليل لها.

تبي استخدم
SQL على ملفات في S3 بدون سيرفرات Athena
مستودع بيانات لتقارير ثقيلة ومتكررة Redshift
فهرس لبياناتك وتنظيفها وتحويلها Glue
صلاحيات على بحيرة بيانات كاملة Lake Formation
بحث نصي وتحليل سجلات OpenSearch
شغل كبير بـ Spark أو Hadoop EMR
لوحات متابعة لفريقك Quick Sight
تحليل تيار وقت وصوله Managed Flink
Apache Kafka مُدار MSK

نوعين من الشغل

الأسئلة اللي يسألها التطبيق تختلف عن الأسئلة اللي يسألها أصحاب القرار:

تشغيل التطبيق (OLTP) التحليل (OLAP)
مثال هات الطلب 1001 مجموع المبيعات لكل مدينة خلال ثلاث سنوات
الصفوف المعنية قليلة ملايين
من يسأل ملايين العملاء محللين قليلين
الخدمات RDS وDynamoDB Athena وRedshift

سر خدمات التحليل إنها تخزن البيانات بالأعمدة. عشان تجمع عمود واحد، ما تحتاج تقرأ الباقي:

بالصفوف: يقرأ كل شي id city amount بالأعمدة: يقرأ عمود واحد id city amount الاستعلام: SUM(amount)‎
عشان تجمع عمود المبلغ، التخزين بالصفوف يمر على كل الحقول، والتخزين بالأعمدة يقرأ هذا العمود وحده.

Amazon Athena: SQL على S3

Athena يخليك تستعلم من ملفات S3 مباشرة بـ SQL. ما فيه شي تشغله: توصف الملفات كجدول، والبيانات تبقى مكانها.

تدفع حوالي 5 دولار لكل TB يتم مسحه، بحد أدنى 10 MB للاستعلام. وإنشاء الجداول والاستعلامات الفاشلة ما تكلف شي. ويناسب الأسئلة العابرة وتحليل السجلات، مثل سجلات موزع الحمل أو S3، وهو كمان اللي توجهك له AWS بعد ما أقفلت S3 Select على العملاء الجدد.

اقرأ أقل، وادفع أقل

بما إن السعر يعتمد على اللي ينقرأ، القراءة الأقل تعني فاتورة أقل وجواب أسرع:

  • تنسيقات الأعمدة: حوّل الملفات إلى Parquet أو ORC، فالاستعلام يقرأ أعمدته فقط.
  • التقسيم (Partitions): قسّم البيانات إلى مسارات مثل year=2025/، فالاستعلام يتجاهل الباقي.
  • الضغط: كل ما صغرت البيانات، قل اللي ينمسح.
  • ملفات أكبر: آلاف الملفات الصغيرة تبطئ الشغل، فادمجها.
Athena WHERE year = 2025 year=2024/‎ يتجاهله year=2025/‎ يقرأه year=2026/‎ يتجاهله
لما تكون البيانات مقسمة بالسنة، استعلام عن 2025 يقرأ مجلد واحد ويتجاهل الباقي، فتدفع على اللي قرأه فقط.

الاستعلامات الموحدة

بياناتك مو كلها في S3؟ Federated Query يخلي Athena يوصل لمصادر ثانية مثل DynamoDB أو RDS، عبر موصل يشتغل كدالة Lambda في حسابك. واستعلام واحد يقدر يربطها مع ملفاتك كمان.

Amazon Redshift: المستودع

لما تصير التقارير ثقيلة ومتكررة، مع ربط جداول كثير ومستخدمين كثير، تحتاج مستودع بيانات. Redshift مبني على PostgreSQL، ويخزن البيانات بالأعمدة، ويقسم الاستعلام على عدة عقد بالتوازي.

Serverless Provisioned
تختار ولا شي، والسعة تضبط نفسها نوع العقد وعددها
تدفع على وقت الحوسبة لما تشتغل الاستعلامات كل عقدة بالساعة
يناسب حمل متغير أو متقطع حمل ثابت، أو تحتاج Multi-AZ

إدخال البيانات

الطريقة متى
COPY من S3 الطريقة المعتادة: يحمّل دفعة وحدة وبالتوازي
Data Firehose تيار ينزل في S3 ثم ينحمل بـ COPY
Zero-ETL نسخ تلقائي من مصادر مثل Aurora وRDS وDynamoDB، بدون بناء مسار
INSERT صف صف تجنبه مع الكميات الكبيرة، لأنه بطيء جداً

نقاط تستاهل تعرفها

  • Redshift Spectrum: استعلم من ملفات S3 داخل Redshift بدون تحميلها، واربطها مع جداولك.
  • اللقطات: تلقائية وتزايدية، وتقدر تنسخها لمنطقة ثانية عشان تتعافى من كارثة.
  • Multi-AZ: متاح في مجموعات RA3 من نوع Provisioned، بعقد في منطقتي توفر خلف نقطة وصول وحدة.

Athena أو Redshift؟

Athena Redshift
البيانات في S3 المستودع، ومعها S3 عبر Spectrum
التجهيز ولا شي قليل مع Serverless
تدفع على البيانات الممسوحة وقت الحوسبة
يناسب أسئلة عابرة وسجلات تقارير ثقيلة ومتكررة ولوحات

ابدأ بـ Athena، وانتقل لـ Redshift لما تصير استعلاماتك متكررة لدرجة تبرر تكلفته.

AWS Glue: تجهيز البيانات

التحليل يفترض إن البيانات نظيفة ومرتبة، وهذا نادر. Glue مجموعة أدوات بدون سيرفرات لهذا الغرض:

الجزء وش يسوي
Data Catalog قائمة مركزية بجداولك وأعمدتها، يستخدمها Athena وRedshift Spectrum وEMR
Crawlers تمسح S3 وتستنتج الأعمدة، ثم تضيفها للفهرس
ETL Jobs كود Spark يستخرج البيانات ويحولها ويحملها، مثل CSV إلى Parquet
Job Bookmarks تتذكر اللي تمت معالجته، فما يعيد الشغل الملفات القديمة
DataBrew ينظف البيانات بالواجهة بدون كود

نمط معروف: ينزل ملف في S3، وحدث يشغّل شغل Glue، ويحوله إلى Parquet في مجلد ثاني. ولاحظ إن Glue Ray Jobs أقفلت على العملاء الجدد في 30 أبريل 2026، بينما شغل Spark مستمر عادي.

وممكن تقرأ عن AWS Data Pipeline، خدمة أقدم لنقل البيانات ومعالجتها بجدول. وهي مقفلة على العملاء الجدد وفي وضع الصيانة، فاستخدم Glue أو Step Functions للشغل الجديد.

Lake Formation: صلاحيات البحيرة

S3 مع ملفات Parquet وفهرس هو اللي يسمونه بحيرة بيانات (Data Lake). ولما تكبر، إدارة الوصول عبر سياسات الحاوية تصير صعبة، لأن S3 يعرف الملفات، مو الأعمدة.

Lake Formation يعطيك مكان واحد تمنح فيه الوصول بقاعدة البيانات والجدول والعمود وحتى الصف: فريق المبيعات يشوف الطلبات بدون أرقام البطاقات مثلاً. وهذي الصلاحيات تنطبق عبر خدمات مثل Athena وRedshift وEMR.

البحث والشغل الكبير واللوحات

OpenSearch

قاعدة البيانات شاطرة في الجلب بالمفتاح. OpenSearch شاطر في البحث بأي كلمة في أي حقل، وفي تحليل السجلات. ويجي كـ مجموعات مُدارة تتحكم في أحجامها، أو Serverless للحمل المتغير.

وغالباً يكون نسخة من بياناتك، مو المصدر. نمطين معروفين:

  • بحث على جدول: DynamoDB Streams ثم Lambda ثم OpenSearch. تبحث هناك، ثم تجيب العنصر كامل من الجدول.
  • تحليل السجلات: CloudWatch Logs ثم Firehose ثم OpenSearch.

Amazon EMR

عندك شغل Spark أو Hadoop قائم؟ EMR يشغله، وتقدر تختار تشغيله على EC2 أو EKS أو كـ Serverless. وعلى EC2 فيه ثلاث أنواع من العقد:

العقدة دورها خيار الشراء
Primary تنسق المجموعة On-Demand أو Reserved
Core تشغل المهام وتخزن البيانات On-Demand أو Reserved
Task تشغل المهام فقط، وهي اختيارية Spot مثالي لها

Quick Sight

Amazon Quick Sight يبني لوحات متابعة من Athena وRedshift وRDS وS3 وغيرها. كان اسمه QuickSight، ومن أكتوبر 2025 صار جزء من مجموعة أوسع اسمها Amazon Quick، مع إن الـ API لسا يستخدم الاسم القديم.

  • SPICE: محرك في الذاكرة يخلي اللوحات سريعة، بدون ما يضغط على المصدر مع كل مشاهدة.
  • Analysis أو Dashboard: تعدل في الـ Analysis، وتنشره كـ Dashboard للقراءة فقط.
  • أمان الصفوف: كل مدير يشوف بيانات منطقته فقط.

Kinesis وFirehose يوصلون البيانات. طيب لو تبي تحللها وقت وصولها، مثل كشف نمط مشبوه خلال ثواني؟

Managed Service for Apache Flink (اسمه القديم Kinesis Data Analytics) يشغّل تطبيقات Flink تقرأ من تيار Kinesis أو من MSK، بدون ما تدير المجموعة.

Amazon MSK هو Apache Kafka مُدار، أشهر منصة تيارات في عالم المصادر المفتوحة. ويجي كمجموعات Provisioned بوسطاء Standard أو Express، أو كـ Serverless.

Kinesis Data Streams Amazon MSK
ينقسم إلى Shards Topics وPartitions
الواجهات خاصة بـ AWS Kafka القياسية
حجم السجل 1 MiB افتراضياً، وحتى 10 MiB 1 MB افتراضياً، وقابل للتعديل
اختره لو تبي أبسط خيار على AWS عندك تطبيقات وأدوات Kafka

كيف توصل البيانات؟

اختيار طريق الإدخال يبدأ من كم مرة توصل البيانات، وكم حجمها:

البيانات استخدم
ملفات من سيرفر أو NAS بجدول DataSync
ملفات من شركاء عبر SFTP Transfer Family
سجلات صغيرة باستمرار، لأكثر من قارئ Kinesis Data Streams أو MSK
سجلات صغيرة باستمرار، تنزل في التخزين Data Firehose
صفوف تتغير في قاعدة بيانات Zero-ETL أو DMS
مجموعات بيانات من شركات ثانية AWS Data Exchange، وتشترك فيها من خلاله

وأمّن كل طريق بنفس الأسلوب: أدوار IAM بأقل صلاحية، وتشفير أثناء النقل والتخزين، وطرق خاصة مثل VPC Endpoints بدل الإنترنت العام لما تقدر.

الصورة الكاملة

هذا كيف تجتمع القطع في مسار معتاد:

المصادر تطبيقات وسجلات Firehose يجمع S3 بيانات خام Glue ينظف ويحول S3 Parquet Athena يجاوب بـ SQL Quick Sight لوحات فريقك يقرر
البيانات تنزل خام في S3، وGlue يحولها إلى Parquet، وAthena يجاوب منها، وQuick Sight يعرض النتيجة. وRedshift ممكن ياخذ مكان Athena في التقارير الثقيلة.

عملي: Parquet يقلل اللي يقرأه الاستعلام

بنولّد ملف فيه 200,000 طلب ونسأله نفس السؤال مرتين. من CloudShell:

Bash
BUCKET=series-data-$RANDOM$RANDOM
aws s3 mb s3://$BUCKET

awk 'BEGIN {
  srand(7)
  split("Riyadh Jeddah Dammam Abha Tabuk", city, " ")
  for (i = 1; i <= 200000; i++)
    printf "%d,%s,%d,%.2f\n", i, city[int(rand()*5)+1], 2024+int(rand()*3), rand()*500
}' > sales.csv

head -3 sales.csv
aws s3 cp sales.csv s3://$BUCKET/raw/sales.csv

هذي الدالة تشغّل استعلام وتنتظره، ثم تطبع حالته والبايتات اللي مسحها ونتيجته:

Bash
run_sql() {
  ID=$(aws athena start-query-execution --query-string "$1" \
    --result-configuration OutputLocation=s3://$BUCKET/results/ \
    --query QueryExecutionId --output text)
  while true; do
    STATE=$(aws athena get-query-execution --query-execution-id $ID \
      --query QueryExecution.Status.State --output text)
    [ "$STATE" = QUEUED ] || [ "$STATE" = RUNNING ] || break
    sleep 1
  done
  aws athena get-query-execution --query-execution-id $ID \
    --query "QueryExecution.[Status.State,Statistics.DataScannedInBytes]" \
    --output text
  aws athena get-query-results --query-execution-id $ID \
    --query "ResultSet.Rows[*].Data[*].VarCharValue" --output text
}

صف الملف كجدول. ما ينتقل شي، والبيانات تبقى في S3:

Bash
run_sql "CREATE DATABASE series_data"

run_sql "CREATE EXTERNAL TABLE series_data.sales_csv (
  order_id INT, city STRING, year INT, amount DOUBLE
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION 's3://$BUCKET/raw/'"

اسأل السؤال:

Bash
run_sql "SELECT city, ROUND(SUM(amount)) AS total
FROM series_data.sales_csv WHERE year = 2025
GROUP BY city ORDER BY total DESC"

يطلع لك المجموع لكل مدينة، وأول سطر يبين إن الملف كله انمسح، أكثر من 5 MB بشوي، مع إن السؤال يخص سنة وحدة وعمودين. الحين أنشئ نسخة Parquet مقسمة باستعلام واحد:

Bash
run_sql "CREATE TABLE series_data.sales_parquet WITH (
  format = 'PARQUET',
  external_location = 's3://$BUCKET/parquet/',
  partitioned_by = ARRAY['year']
) AS SELECT order_id, city, amount, year FROM series_data.sales_csv"

aws s3 ls s3://$BUCKET/parquet/

بتشوف مجلد لكل سنة. اسأل نفس السؤال من الجدول الجديد:

Bash
run_sql "SELECT city, ROUND(SUM(amount)) AS total
FROM series_data.sales_parquet WHERE year = 2025
GROUP BY city ORDER BY total DESC"

الأرقام نفسها، بس البايتات الممسوحة جزء صغير من الرقم الأول. وعلى التيرابايتات، هذا الفرق هو فاتورتك.

Bash
run_sql "DROP TABLE series_data.sales_parquet"
run_sql "DROP TABLE series_data.sales_csv"
run_sql "DROP DATABASE series_data"
aws s3 rb s3://$BUCKET --force

الخلاصة

  • افصل التحليل عن قاعدة الإنتاج، وخزن البيانات بالأعمدة.
  • Athena يستعلم من S3 بدون سيرفرات، وParquet والتقسيم يقللون تكلفته.
  • Redshift للتقارير الثقيلة والمتكررة، وServerless بداية سهلة.
  • Glue يفهرس بياناتك ويحولها، وLake Formation يحدد من يشوف أي عمود.
  • OpenSearch للبحث، وEMR لشغل Spark، وQuick Sight للوحات، وFlink وMSK للتيارات.

اختبر نفسك

قبل ما تكمل، جرّب هذي الأسئلة عشان تتأكد إنك فهمت الجزء. كل سؤال موقف عملي، وبعد ما تجاوب يطلع لك الشرح.

السؤال 1 من 6

محللو سلسلة متاجر يشغّلون تقارير ثقيلة طول اليوم، فيها ربط جداول كثير على مبيعات سنوات، وعشرات اللوحات تتحدث منها. أي خدمة مبنية لهذا؟

اعرض الجواب

الجواب الصحيح: C

هذا شغل مستودع البيانات. Redshift يخزن البيانات بالأعمدة ويقسم كل استعلام على عدة عقد، فتشتغل التقارير الثقيلة المتكررة بسرعة.

  • A: هذا يناسب الأسئلة العابرة، ومع هذا العدد من الاستعلامات بتدفع على كل مسح.
  • B: هذا يخفف عن الإنتاج، بس لسا يخزن بالصفوف وما هو مبني لتحليل بهذا الحجم.
  • D: هذا للبحث النصي وتحليل السجلات.

للمراجعة: Athena أو Redshift؟ في هذا الجزء، وWhat is Amazon Redshift? في وثائق AWS.

السؤال 2 من 6

شركاء ينزلون ملفات CSV في حاوية S3 كل يوم. وفريق يبي يحولها إلى Parquet بجدول، بدون سيرفرات يشغلها وبدون إعادة معالجة الملفات اللي تحولت. وش يناسب؟

اعرض الجواب

الجواب الصحيح: A

مهمة Glue ETL تشغّل Spark بدون سيرفرات تديرها، وJob Bookmarks تتذكر اللي تعالج، فكل تشغيل يتعامل مع الملفات الجديدة فقط.

  • B: الـ Crawler يستنتج الأعمدة ويحدث الفهرس، وما يحول شي.
  • C: هذا يقدر يسوي التحويل، بس هو مجموعة لازم تشغلها.
  • D: هذا ينقل الملفات بين الفئات، وما يغير تنسيقها.

للمراجعة: AWS Glue: تجهيز البيانات في هذا الجزء، وTracking processed data using job bookmarks في وثائق AWS.

السؤال 3 من 6

بحيرة بيانات شركة فيها جدول طلبات في S3، ينستعلم عنه عبر Athena. وفريق المبيعات لازم يشوف الجدول، بس بدون عمود رقم البطاقة. وش يناسب؟

اعرض الجواب

الجواب الصحيح: D

Lake Formation يعطي الوصول لحد العمود والصف، وهذي الصلاحيات تنطبق عبر خدمات مثل Athena.

  • A: S3 تعرف الملفات، مو الأعمدة اللي داخلها.
  • B: الـ Crawler يوصف البيانات بس، وما يتحكم في وصول أحد.
  • C: هذا يعطي الفريق بوابته للحاوية، ولسا يشتغل على مستوى الملفات.

للمراجعة: Lake Formation: صلاحيات البحيرة في هذا الجزء، وData filtering and cell-level security in Lake Formation في وثائق AWS.

السؤال 4 من 6

متجر يحفظ منتجاته في DynamoDB. والعملاء يبون يبحثون عن أي كلمة في اسم المنتج أو وصفه، والجدول لازم يبقى مصدر الحقيقة. وش يناسب؟

اعرض الجواب

الجواب الصحيح: B

OpenSearch يلقى أي كلمة في أي حقل. وStreams وLambda يبقونه محدث، فتبحث هناك، ثم تجيب العنصر كامل من الجدول.

  • A: الفهرس يلقى العناصر بالمفتاح، مو بأي كلمة داخل نص طويل.
  • C: هذا يقرأ الجدول كله مع كل بحث، فهو بطيء ومكلف.
  • D: هذا يسرّع القراءة بالمفتاح، وما يضيف بحث نصي.

للمراجعة: OpenSearch في هذا الجزء، وLoading streaming data into Amazon OpenSearch Service في وثائق AWS.

السؤال 5 من 6

فاتورة Athena عند فريق عالية. واستعلاماته عادةً تقرأ عمودين من شهر واحد، بس كل البيانات في S3 في مجلد كبير من ملفات CSV. أي تغييرين يقللون التكلفة؟ (اختر اثنين.)

اعرض الجواب

الجواب الصحيح: B + E

Athena يحاسب على البيانات اللي يمسحها. وParquet يخلي الاستعلام يقرأ أعمدته فقط، والتقسيم يخليه يتجاهل باقي الشهور.

  • A: الملفات في هذي الفئة لازم تنسترجع قبل ما تنقرأ.
  • C: السعر يعتمد على اللي ينقرأ، مو على وقته.
  • D: هذا يحتفظ بالإصدارات القديمة، وما يغير شي في اللي يقرأه الاستعلام.

للمراجعة: اقرأ أقل، وادفع أقل في هذا الجزء، وUse columnar storage formats وPartition your data في وثائق AWS.

السؤال 6 من 6

فريق تحليل يبي بيانات طقس من مزود تجاري في بحيرة بياناته، تتحدث باشتراك، بدون بناء قناة خاصة. وش يناسب؟

اعرض الجواب

الجواب الصحيح: A

Data Exchange هو المكان اللي تلقى فيه مجموعات بيانات الشركات الثانية وتشترك فيها.

  • B: هذا يستقبل ملفات عبر SFTP وأخواته، والمزود لازم يرسلها لك.
  • C: هذا يوصف بيانات موجودة عندك، وما يجيب بيانات جديدة.
  • D: لازم تكتب اللي يغذيه، وهذا الشغل اللي يبي الفريق يتجنبه.

للمراجعة: كيف توصل البيانات؟ في هذا الجزء، وWhat is AWS Data Exchange? في وثائق AWS.

الحين فهمت البيانات اللي عندك. تقدر تطلع منها أكثر، مثل قراءة المستندات وفهم الكلام وتوليد النصوص؟ في الجزء الرابع والعشرين نمر على خدمات الذكاء الاصطناعي الجاهزة في AWS.