النمذجة الأبعاد في Amazon Redshift | خدمات أمازون ويب

النمذجة الأبعاد في Amazon Redshift | خدمات أمازون ويب

عقدة المصدر: 2778508

الأمازون الأحمر عبارة عن مستودع بيانات سحابي مُدار بالكامل وعلى نطاق بيتابايت يستخدمه عشرات الآلاف من العملاء لمعالجة إكسابايت من البيانات يوميًا لتعزيز أعباء عمل التحليلات الخاصة بهم. يمكنك هيكلة بياناتك ، وقياس العمليات التجارية ، والحصول على رؤى قيمة بسرعة يمكن إجراؤها باستخدام نموذج الأبعاد. يوفر Amazon Redshift ميزات مضمنة لتسريع عملية النمذجة والتنظيم وإعداد التقارير من نموذج الأبعاد.

في هذا المنشور ، نناقش كيفية تنفيذ نموذج الأبعاد ، على وجه التحديد منهجية كيمبال. نناقش تنفيذ الأبعاد والحقائق داخل Amazon Redshift. نعرض كيفية إجراء الاستخراج والتحويل والتحميل (ELT) ، وهي عملية تكامل تركز على الحصول على البيانات الأولية من بحيرة البيانات إلى طبقة التدريج لأداء النمذجة. بشكل عام ، سوف يمنحك المنشور فهمًا واضحًا لكيفية استخدام النمذجة ذات الأبعاد في Amazon Redshift.

حل نظرة عامة

يوضح الرسم البياني التالي بنية الحل.

في الأقسام التالية ، نناقش أولاً الجوانب الرئيسية لنموذج الأبعاد ونوضحها. بعد ذلك ، نقوم بإنشاء سوق بيانات باستخدام Amazon Redshift مع نموذج بيانات الأبعاد بما في ذلك جداول الأبعاد والحقائق. يتم تحميل البيانات وتنظيمها باستخدام ملف COPY الأمر ، يتم تحميل البيانات الموجودة في الأبعاد باستخدام ملف دمج البيان ، وسيتم ربط الحقائق بالأبعاد التي يتم اشتقاق الأفكار منها. نقوم بجدولة تحميل الأبعاد والحقائق باستخدام ملف محرر استعلام Amazon Redshift V2. أخيرًا ، نستخدم ملفات أمازون QuickSight لاكتساب رؤى حول البيانات النموذجية في شكل لوحة معلومات QuickSight.

بالنسبة لهذا الحل ، نستخدم عينة مجموعة بيانات (طبيعية) مقدمة من Amazon Redshift لمبيعات تذاكر الأحداث. بالنسبة لهذا المنشور ، قمنا بتضييق نطاق مجموعة البيانات لأغراض البساطة والتوضيح. توضح الجداول التالية أمثلة على البيانات الخاصة بمبيعات التذاكر والأماكن.

وفقًا منهجية كيمبال النمذجة الأبعاد، هناك أربع خطوات رئيسية في تصميم نموذج الأبعاد:

  1. تحديد العملية التجارية.
  2. قم بالإفصاح عن حجم البيانات الخاصة بك.
  3. تحديد وتنفيذ الأبعاد.
  4. تحديد وتنفيذ الحقائق.

بالإضافة إلى ذلك ، نضيف خطوة خامسة لأغراض العرض ، وهي الإبلاغ عن أحداث العمل وتحليلها.

المتطلبات الأساسية المسبقة

في هذا الدليل ، يجب أن يكون لديك المتطلبات الأساسية التالية:

تحديد العملية التجارية

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

ثم يتم الاستمرار في عملية الأعمال كملف مارت البيانات في شكل أبعاد وحقائق. بالنظر إلى نموذج مجموعة البيانات المذكورة سابقًا ، يمكننا أن نرى بوضوح أن عملية الأعمال هي المبيعات التي تتم لحدث معين.

خطأ شائع هو استخدام أقسام الشركة كعملية تجارية. يجب دمج البيانات (العملية التجارية) عبر الأقسام المختلفة ، وفي هذه الحالة ، يمكن للتسويق الوصول إلى بيانات المبيعات. يعد تحديد العملية التجارية الصحيحة أمرًا بالغ الأهمية - حيث يمكن أن يؤثر الخطأ في هذه الخطوة على سوق البيانات بالكامل (يمكن أن يتسبب في تكرار التحبب وعدم صحة المقاييس في التقارير النهائية).

قم بالإفصاح عن حجم البيانات الخاصة بك

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

في حالة الاستخدام الخاصة بنا ، يمكن تحديد عملية البيع بشكل فريد من خلال النظر في وقت المعاملة عند حدوث البيع ؛ سيكون هذا هو المستوى الذري.

تحديد وتنفيذ الأبعاد

يصف جدول الأبعاد الخاص بك جدول الحقائق والسمات الخاصة به. عند تحديد السياق الوصفي لعملية الأعمال الخاصة بك ، تقوم بتخزين النص في جدول منفصل ، مع وضع جدول الحقائق في الاعتبار. عند ربط جدول الأبعاد بجدول البيانات الفعلية ، يجب أن يكون هناك صف واحد فقط مرتبط بجدول البيانات الفعلية. في مثالنا ، نستخدم الجدول التالي ليتم فصله إلى جدول أبعاد ؛ تصف هذه الحقول الحقائق التي سنقيسها.

عند تصميم هيكل النموذج ذي الأبعاد (المخطط) ، يمكنك إما إنشاء ملف or ندفة الثلج مخطط. يجب أن يتماشى الهيكل بشكل وثيق مع عملية الأعمال ؛ لذلك ، مخطط النجم هو الأنسب لمثالنا. يوضح الشكل التالي مخطط علاقة الكيان الخاص بنا (ERD).

في الأقسام التالية ، نوضح بالتفصيل خطوات تنفيذ الأبعاد.

اعرض بيانات المصدر

قبل أن نتمكن من إنشاء جدول الأبعاد وتحميله ، نحتاج إلى بيانات المصدر. لذلك ، نقوم بترتيب البيانات المصدر في جدول مرحلي أو مؤقت. غالبًا ما يشار إلى هذا باسم طبقة التدريج، وهي النسخة الأولية لبيانات المصدر. للقيام بذلك في Amazon Redshift ، نستخدم ملف أمر COPY لتحميل البيانات من حاوية S3 العامة للنمذجة الأبعاد في amazon-redshift الموجودة على us-east-1 منطقة. لاحظ أن الأمر COPY يستخدم ملف إدارة الهوية والوصول AWS (IAM) مع الوصول إلى Amazon S3. الدور يجب أن يكون المرتبطة بالعنقود. أكمل الخطوات التالية لتنظيم بيانات المصدر:

  1. إنشاء venue جدول المصدر:
CREATE TABLE public.venue ( venueid bigint, venuename character varying(100), venuecity character varying(30), venuestate character(2), venueseats bigint
) DISTSTYLE AUTO SORTKEY (venueid);

  1. تحميل بيانات المكان:
COPY public.venue
FROM 's3://redshift-blogs/dimensional-modeling-in-amazon-redshift/venue.csv'
IAM_ROLE '<Your IAM role arn>'
DELIMITER ','
REGION 'us-east-1'
IGNOREHEADER 1

  1. إنشاء sales جدول المصدر:
CREATE TABLE public.sales (
    salesid integer,
    venueid character varying(256),
    saletime timestamp without time zone,
    qtysold BIGINT,
    commission numeric(18,2),
    pricepaid numeric(18,2)
) DISTSTYLE AUTO;

  1. قم بتحميل بيانات مصدر المبيعات:
COPY public.sales
FROM 's3://redshift-blogs/dimensional-modeling-in-amazon-redshift/sales.csv'
IAM_ROLE '<Your IAM role arn>'
DELIMITER ','
REGION 'us-east-1'
IGNOREHEADER 1

  1. إنشاء calendar الجدول:
CREATE TABLE public.DimCalendar(
    dateid smallint,
        caldate date,
        day varchar(20),
        week smallint,
        month varchar(20),
        qtr varchar(20),
        year smallint,
        holiday boolean
) DISTSTYLE AUTO
SORTKEY
    (dateid);

  1. قم بتحميل بيانات التقويم:
COPY public.DimCalendar
FROM 's3://redshift-blogs/dimensional-modeling-in-amazon-redshift/date.csv'
IAM_ROLE '<Your IAM role arn>'
DELIMITER ',' 
REGION 'us-east-1'
IGNOREHEADER 1

قم بإنشاء جدول الأبعاد

يمكن أن يعتمد تصميم جدول الأبعاد على متطلبات عملك - على سبيل المثال ، هل تحتاج إلى تتبع التغييرات على البيانات بمرور الوقت؟ هناك سبعة أنواع أبعاد مختلفة. على سبيل المثال لدينا ، نستخدم نوع 1 لأننا لسنا بحاجة إلى تتبع التغييرات التاريخية. لمزيد من المعلومات حول النوع 2 ، يرجى الرجوع إلى قم بتبسيط تحميل البيانات في الأبعاد المتغيرة ببطء من النوع 2 في Amazon Redshift. سيتم إلغاء تنسيق جدول الأبعاد باستخدام مفتاح أساسي ومفتاح بديل وعدد قليل من الحقول المضافة للإشارة إلى التغييرات التي تم إجراؤها على الجدول. انظر الكود التالي:

create schema SalesMart;

CREATE TABLE SalesMart.DimVenue( 
    "VenueSkey" int IDENTITY(1,1) primary key
    ,"VenueId" VARCHAR NOT NULL
    ,"VenueName" VARCHAR NULL
    ,"VenueCity" VARCHAR NULL
    ,"VenueState" VARCHAR NULL
    ,"VenueSeats" INT NULL
    ,"InsertedDate" DATETIME NOT NULL
    ,"UpdatedDate" DATETIME NOT NULL
) 
diststyle AUTO;

بعض الملاحظات حول إنشاء جدول الأبعاد:

  • يتم تحويل أسماء الحقول إلى أسماء مناسبة للأعمال
  • مفتاحنا الأساسي هو VenueID، والتي نستخدمها لتحديد مكان تم البيع بشكل فريد
  • ستتم إضافة صفين إضافيين للإشارة إلى وقت إدراج السجل وتحديثه (لتعقب التغييرات)
  • نحن نستخدم ملف أسلوب التوزيع التلقائي لمنح Amazon Redshift مسؤولية اختيار وتعديل نمط التوزيع

عامل مهم آخر يجب مراعاته في النمذجة الأبعاد هو استخدام مفاتيح بديلة. المفاتيح البديلة هي مفاتيح اصطناعية تُستخدم في النمذجة ذات الأبعاد لتعريف كل سجل في جدول أبعاد بشكل فريد. يتم إنشاؤها عادةً على هيئة عدد صحيح متسلسل ، وليس لها أي معنى في مجال الأعمال. أنها توفر العديد من الفوائد ، مثل ضمان التفرد وتحسين الأداء في الصلات ، لأنها عادة ما تكون أصغر من المفاتيح الطبيعية وكمفاتيح بديلة لا تتغير بمرور الوقت. هذا يسمح لنا أن نكون متسقين وربط الحقائق والأبعاد بسهولة أكبر.

في Amazon Redshift ، يتم عادةً إنشاء المفاتيح البديلة باستخدام الكلمة الأساسية IDENTITY. على سبيل المثال ، تُنشئ عبارة CREATE السابقة جدول أبعاد بملحق VenueSkey مفتاح بديل. ال VenueSkey يتم ملء العمود تلقائيًا بقيم فريدة حيث تتم إضافة صفوف جديدة إلى الجدول. يمكن بعد ذلك استخدام هذا العمود للانضمام إلى طاولة المكان إلى FactSaleTransactions الجدول.

بعض النصائح لتصميم مفاتيح بديلة:

  • استخدم نوع بيانات صغير ذو عرض ثابت للمفتاح البديل. سيؤدي ذلك إلى تحسين الأداء وتقليل مساحة التخزين.
  • استخدم الكلمة الأساسية IDENTITY ، أو قم بإنشاء مفتاح بديل باستخدام قيمة متسلسلة أو قيمة GUID. سيضمن هذا أن المفتاح البديل فريد ولا يمكن تغييره.

قم بتحميل الجدول الخافت باستخدام MERGE

هناك طرق عديدة لتحميل منضدتك المعتمة. يجب مراعاة عوامل معينة - على سبيل المثال ، الأداء وحجم البيانات وربما أوقات تحميل اتفاقية مستوى الخدمة. مع ال دمج البيان ، نقوم بإجراء upert دون الحاجة إلى تحديد أوامر إدراج وتحديث متعددة. يمكنك إعداد ملف دمج بيان في أ الإجراء المخزن لتعبئة البيانات. يمكنك بعد ذلك جدولة الإجراء المخزن للتشغيل برمجيًا عبر محرر الاستعلام ، والذي نوضحه لاحقًا في المنشور. تقوم التعليمات البرمجية التالية بإنشاء إجراء مخزن يسمى SalesMart.DimVenueLoad:

CREATE OR REPLACE PROCEDURE SalesMart.DimVenueLoad()
AS $$
BEGIN
MERGE INTO SalesMart.DimVenue USING public.venue as MergeSource
ON SalesMart.DimVenue.VenueId = MergeSource.VenueId
WHEN MATCHED
THEN
UPDATE
SET VenueName = ISNULL(MergeSource.VenueName, 'Unknown')
, VenueCity = ISNULL(MergeSource.VenueCity, 'Unknown')
, VenueState = ISNULL(MergeSource.VenueState, 'Unknown')
, VenueSeats = ISNULL(MergeSource.VenueSeats, -1)
, UpdatedDate = GETDATE()
WHEN NOT MATCHED
THEN
INSERT (
VenueId
, VenueName
, VenueCity
, VenueState
, VenueSeats
, UpdatedDate
, InsertedDate
)
VALUES (
ISNULL(MergeSource.VenueId, -1)
, ISNULL(MergeSource.VenueName, 'Unknown')
, ISNULL(MergeSource.VenueCity, 'Unknown')
, ISNULL(MergeSource.VenueState, 'Unknown')
, ISNULL(MergeSource.VenueSeats, -1)
, ISNULL(GETDATE() , '1900-01-01')
, ISNULL(GETDATE() , '1900-01-01')
);
END;
$$
LANGUAGE plpgsql;

بعض الملاحظات حول تحميل البعد:

  • عند إدراج سجل لأول مرة ، سيتم ملء التاريخ المدرج والتاريخ المحدث. عندما تتغير أي قيم ، يتم تحديث البيانات ويعكس التاريخ المحدث التاريخ الذي تم فيه تغييره. التاريخ المدرج يبقى.
  • نظرًا لأنه سيتم استخدام البيانات من قبل مستخدمي الأعمال ، فنحن بحاجة إلى استبدال قيم NULL ، إن وجدت ، بمزيد من القيم المناسبة للأعمال.

تحديد وتنفيذ الحقائق

الآن بعد أن أعلنا أن حبوبنا هي حدث بيع تم في وقت محدد ، سيقوم جدول الحقائق لدينا بتخزين الحقائق الرقمية لعملية أعمالنا.

لقد حددنا الحقائق العددية التالية للقياس:

  • كمية التذاكر المباعة لكل عملية بيع
  • عمولة للبيع

تنفيذ الحقيقة

هناك ثلاثة أنواع من جداول الحقائق (جدول حقائق المعاملة ، وجدول حقائق اللقطة الدورية ، وجدول حقائق اللقطة المتراكم). يخدم كل منها وجهة نظر مختلفة لعملية الأعمال. على سبيل المثال ، نستخدم جدول حقائق المعاملات. أكمل الخطوات التالية:

  1. قم بإنشاء جدول الحقائق
CREATE TABLE SalesMart.FactSaleTransactions( 
    CalendarDate date NOT NULL
    ,SaleTransactionTime DATETIME NOT NULL
    ,VenueSkey INT NOT NULL
    ,QuantitySold BIGINT NOT NULL
    ,SaleComission NUMERIC NOT NULL
    ,InsertedDate DATETIME DEFAULT GETDATE()
) diststyle AUTO;

يتم إضافة تاريخ مدرج بقيمة افتراضية ، للإشارة إلى ما إذا كان قد تم تحميل السجل ومتى تم ذلك. يمكنك استخدام هذا عند إعادة تحميل جدول الحقائق لإزالة البيانات التي تم تحميلها بالفعل لتجنب التكرارات.

يتكون تحميل جدول الحقائق من عبارة إدراج بسيطة تضم الأبعاد المرتبطة. ننضم من DimVenue الجدول الذي تم إنشاؤه ، والذي يصف حقائقنا. إنها أفضل ممارسة ولكنها اختيارية تاريخ التقويم الأبعاد التي تسمح للمستخدم النهائي بالتنقل في جدول الحقائق. يمكن تحميل البيانات عندما يكون هناك بيع جديد أو يوميًا ؛ هذا هو المكان الذي يكون فيه التاريخ المدرج أو تاريخ التحميل مفيدًا.

نقوم بتحميل جدول الحقائق باستخدام إجراء مخزن واستخدام معلمة التاريخ.

  1. قم بإنشاء الإجراء المخزن باستخدام التعليمات البرمجية التالية. للاحتفاظ بنفس تكامل البيانات التي طبقناها في تحميل البعد ، نستبدل قيم NULL ، إن وجدت ، بمزيد من القيم المناسبة للأعمال:
create or replace procedure SalesMart.FactSaleTransactionsLoad(loadate datetime)
language plpgsql
as
    $$
begin
--------------------------------------------------------------------
/*** Delete records loaded for the day, should there be any ***/
--------------------------------------------------------------------
Delete from SalesMart.FactSaleTransactions
where cast(InsertedDate as date) = CAST(loadate as date);
RAISE INFO 'Deleted rows for load date: %', loadate;
--------------------------------------------------------------------
/*** Insert records ***/
--------------------------------------------------------------------
INSERT INTO SalesMart.FactSaleTransactions (
CalendarDate    
,SaleTransactionTime    
,VenueSkey  
,QuantitySold  
,Salecomission
)
SELECT DISTINCT
    ISNULL(c.caldate, '1900-01-01') as CalendarDate
    ,ISNULL(a.saletime, '1900-01-01') as SaleTransactionTime
    ,ISNULL(b.VenueSkey, -1) as VenueSkey
    ,ISNULL(a.qtysold, 0) as QuantitySold
    ,ISNULL(a.commission, 0) as SaleComission
FROM
    public.sales as a
 
LEFT JOIN SalesMart.DimVenue as b
on a.venueid = b.venueid
 
LEFT JOIN public.DimCalendar as c
on to_char(a.saletime,'YYYYMMDD') = to_char(c.caldate,'YYYYMMDD');
--Optional filter, should you want to load only the latest data from source
--where cast(a.saletime as date) = cast(loadate as date);
  
end;
$$;

  1. قم بتحميل البيانات عن طريق استدعاء الإجراء بالأمر التالي:
call SalesMart.FactSaleTransactionsLoad(getdate())

جدولة تحميل البيانات

يمكننا الآن أتمتة عملية النمذجة عن طريق جدولة الإجراءات المخزنة في Amazon Redshift Query Editor V2. أكمل الخطوات التالية:

  1. نسمي أولاً حمولة البعد وبعد تشغيل حمل البعد بنجاح ، يبدأ تحميل الحقيقة:
BEGIN;
----Insert Dim Loads
call SalesMart.DimVenueLoad(); ----Insert Fact Loads. They will only run if the DimLoad is successful
call SalesMart.FactSaleTransactionsLoad(getdate());
END;

إذا فشل تحميل البعد ، فلن يتم تشغيل تحميل الحقيقة. يضمن ذلك الاتساق في البيانات لأننا لا نريد تحميل جدول الحقائق بأبعاد قديمة.

  1. لجدولة التحميل ، اختر حدد في محرر الاستعلام V2.

  1. نقوم بجدولة الاستعلام ليتم تشغيله كل يوم في الساعة 5:00 صباحًا.
  2. اختياريًا ، يمكنك إضافة إشعارات الفشل من خلال التمكين خدمة إعلام أمازون البسيطة (Amazon SNS) الإخطارات.

الإبلاغ عن البيانات وتحليلها في Amazon Quicksight

QuickSight هي خدمة ذكاء أعمال تسهل تقديم الرؤى. كخدمة مُدارة بالكامل ، يتيح لك QuickSight إنشاء ونشر لوحات معلومات تفاعلية يمكن الوصول إليها بعد ذلك من أي جهاز وتضمينها في تطبيقاتك وبواباتك ومواقعك الإلكترونية.

نحن نستخدم بيانات مارت لتقديم الحقائق بصريًا في شكل لوحة معلومات. للبدء وإعداد QuickSight ، ارجع إلى إنشاء مجموعة بيانات باستخدام قاعدة بيانات لم يتم اكتشافها تلقائيًا.

بعد إنشاء مصدر البيانات الخاص بك في QuickSight ، ننضم إلى البيانات النموذجية (data mart) معًا بناءً على مفتاحنا البديل skey. نستخدم مجموعة البيانات هذه لتصور سوق البيانات.

ستحتوي لوحة القيادة النهائية الخاصة بنا على رؤى سوق البيانات والإجابة على أسئلة العمل المهمة ، مثل إجمالي العمولة لكل مكان والتواريخ ذات أعلى المبيعات. تُظهر لقطة الشاشة التالية المنتج النهائي لسوق البيانات.

تنظيف

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

وفي الختام

لقد نجحنا الآن في تنفيذ سوق البيانات باستخدام DimVenue, DimCalendarو FactSaleTransactions الجداول. مستودعاتنا ليست كاملة. حيث يمكننا توسيع سوق البيانات بمزيد من الحقائق وتنفيذ المزيد من القطع ، ومع نمو العمليات التجارية والمتطلبات بمرور الوقت ، سيزداد مستودع البيانات أيضًا. في هذا المنشور ، قدمنا ​​نظرة شاملة حول فهم وتنفيذ النمذجة الأبعاد في Amazon Redshift.

ابدأ مع الأمازون الأحمر نموذج الأبعاد اليوم.


حول المؤلف

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

ابهيشيك بان هي متخصص في WWSO SA-Analytics تعمل مع عملاء القطاع العام في الهند لدى AWS. يتعامل مع العملاء لتحديد الإستراتيجية التي تعتمد على البيانات ، ويقدم جلسات غوص عميقة حول حالات استخدام التحليلات ، وتصميم تطبيقات تحليلية قابلة للتطوير وذات أداء عالي. لديه 12 عامًا من الخبرة وهو متحمس لقواعد البيانات والتحليلات والذكاء الاصطناعي / تعلم الآلة. إنه مسافر شغوف ويحاول التقاط العالم من خلال عدسة الكاميرا الخاصة به.

الطابع الزمني:

اكثر من بيانات AWS الضخمة