مشاركة عبر


إنشاء طريقة العرض المجسدة

ينطبق على: وضع علامة Databricks SQL

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

لمعرفة المزيد حول كيفية إجراء تحديث يدوي، راجع تحديث (طريقة عرض مجسدة أو جدول دفق).

لمعرفة المزيد حول كيفية جدولة تحديث، راجع الأمثلة أو ALTER MATERIALIZED VIEW.

إشعار

يتم تشغيل عمليات الإنشاء والتحديث على طرق العرض المجسدة وجداول الدفق بواسطة مسار Delta Live Tables بلا خادم. يمكنك استخدام مستكشف الكتالوج لعرض تفاصيل حول البنية الأساسية لبرنامج ربط العمليات التجارية للنسخ الاحتياطي في واجهة المستخدم. راجع ما هو مستكشف الكتالوج؟.

بناء الجملة

{ CREATE OR REPLACE MATERIALIZED VIEW | CREATE MATERIALIZED VIEW [ IF NOT EXISTS ] }
  view_name
  [ column_list ]
  [ view_clauses ]
  [schedule_clause]
  AS query

column_list
   ( { column_name column_type column_properties } [, ...]
      [ , table_constraint ] [...])

   column_properties
      { NOT NULL | COMMENT column_comment | column_constraint | MASK clause } [ ... ]

view_clauses
  { PARTITIONED BY (col [, ...]) |
    COMMENT view_comment |
    TBLPROPERTIES clause |
    SCHEDULE [ REFRESH ] schedule_clause |
    WITH { ROW FILTER clause } } [...]

schedule_clause
  { EVERY number { HOUR | HOURS | DAY | DAYS | WEEK | WEEKS } |
    CRON cron_string [ AT TIME ZONE timezone_id ] }

المعلمات

  • REPLACE

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

  • إذا لم يكن موجودا

    إنشاء طريقة العرض إذا لم تكن موجودة. إذا كانت طريقة عرض بهذا الاسم موجودة بالفعل، يتم تجاهل العبارة CREATE MATERIALIZED VIEW .

    يمكنك تحديد واحد على الأكثر من IF NOT EXISTS أو OR REPLACE.

  • view_name

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

  • column_list

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

    • column_name

      يجب أن تكون أسماء الأعمدة فريدة وأن تعين إلى أعمدة الإخراج للاستعلام.

    • column_type

      تحديد نوع بيانات العمود. لا تدعم طرق العرض المجسدة جميع أنواع البيانات التي يدعمها Azure Databricks.

    • column_comment

      قيمة حرفية اختيارية STRING تصف اسم العمود. يجب تحديد هذا الخيار مع column_type. إذا لم يتم تحديد نوع العمود، يتم تخطي تعليق العمود.

    • column_constraint

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

    • عبارة MASK

      هام

      هذه الميزة في المعاينة العامة.

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

  • table_constraint

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

  • view_clauses

    حدد التقسيم والتعليقات والخصائص المعرفة من قبل المستخدم وجدول تحديث للعرض المجسد الجديد اختياريا. يمكن تحديد كل عبارة فرعية مرة واحدة فقط.

    • مقسمة حسب

      قائمة اختيارية بأعمدة الجدول لتقسيم الجدول حسبها.

    • view_comment التعليق

      STRING قيمة حرفية لوصف الجدول.

    • TBLPROPERTIES

      تعيين خاصية واحدة أو أكثر من الخصائص المعرفة من قبل المستخدم اختياريا.

      استخدم هذا الإعداد لتحديد قناة وقت تشغيل Delta Live Tables المستخدمة لتشغيل هذه العبارة. تعيين قيمة الخاصية pipelines.channel إلى "PREVIEW" أو "CURRENT". القيمة الافتراضية هي "CURRENT". لمزيد من المعلومات حول قنوات Delta Live Tables، راجع قنوات وقت تشغيل Delta Live Tables.

    • جدولة [ تحديث ] schedule_clause

      • EVERY number { HOUR | HOURS | DAY | DAYS | WEEK | WEEKS }

        هام

        هذه الميزة في المعاينة العامة.

        لجدولة تحديث يحدث بشكل دوري، استخدم EVERY بناء الجملة. إذا EVERY تم تحديد بناء الجملة، يتم تحديث جدول الدفق أو طريقة العرض المجسدة بشكل دوري في الفاصل الزمني المحدد استنادا إلى القيمة المتوفرة، مثل HOURأو .WEEKSHOURSDAYDAYSWEEK يسرد الجدول التالي قيم العدد الصحيح المقبولة ل number.

        وحدة الوقت قيمة عدد صحيح
        HOUR or HOURS 1 <= H <= 72
        DAY or DAYS 1 <= D <= 31
        WEEK or WEEKS 1 <= W <= 8

        إشعار

        الأشكال المفردة والجمعية للوحدة الزمنية المضمنة مكافئة دلاليا.

      • CRON cron_string [ AT TIME ZONE timezone_id ]

        لجدولة تحديث باستخدام قيمة كوارتز كرون . يتم قبول time_zone_values صالحة. AT TIME ZONE LOCALغير مدعم.

        إذا AT TIME ZONE لم يكن موجودا، يتم استخدام المنطقة الزمنية للجلسة. إذا AT TIME ZONE لم يكن موجودا ولم يتم تعيين المنطقة الزمنية لجلسة العمل، يتم طرح خطأ. SCHEDULE مكافئ دلاليا ل SCHEDULE REFRESH.

    • عبارة WITH ROW FILTER

      هام

      هذه الميزة في المعاينة العامة.

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

  • استعلام AS

    استعلام يقوم بإنشاء طريقة العرض من الجداول الأساسية أو طرق العرض الأخرى.

الأذونات المطلوبة

المستخدم الذي ينشئ طريقة عرض مجسدة (MV) هو مالك MV ويحتاج إلى الحصول على الأذونات التالية:

  • SELECT امتياز على الجداول الأساسية المشار إليها بواسطة MV.
  • USE CATALOG امتياز على الكتالوج الأصل والامتياز USE SCHEMA على المخطط الأصل.
  • CREATE MATERIALIZED VIEW امتياز على مخطط MV.

لكي يتمكن المستخدم من تحديث MV، فإنه يتطلب:

  • USE CATALOG امتياز على الكتالوج الأصل والامتياز USE SCHEMA على المخطط الأصل.
  • ملكية MV أو REFRESH الامتياز على MV.
  • يجب أن يكون لمالك MV الامتياز SELECT على الجداول الأساسية المشار إليها بواسطة MV.

لكي يتمكن المستخدم من الاستعلام عن MV، فإنه يتطلب:

  • USE CATALOG امتياز على الكتالوج الأصل والامتياز USE SCHEMA على المخطط الأصل.
  • SELECT امتياز على طريقة العرض المجسدة.

عوامل تصفية الصفوف وأقنعة الأعمدة

هام

هذه الميزة في المعاينة العامة.

تتيح لك عوامل تصفية الصفوف تحديد دالة تنطبق كعامل تصفية كلما جلب فحص الجدول صفوفا. تضمن عوامل التصفية هذه أن الاستعلامات اللاحقة ترجع فقط الصفوف التي تقيم لها دالة تقييم عامل التصفية إلى true.

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

لمزيد من المعلومات حول كيفية استخدام عوامل تصفية الصفوف وأقنعة الأعمدة، راجع تصفية بيانات الجدول الحساسة باستخدام عوامل تصفية الصفوف وأقنعة الأعمدة.

إدارة عوامل تصفية الصفوف وأقنعة الأعمدة

يجب إضافة عوامل تصفية الصفوف وأقنعة الأعمدة على طرق العرض المجسدة من خلال العبارة CREATE .

سلوك

  • تحديث كمحدد: عندما REFRESH MATERIALIZED VIEW تقوم العبارة بتحديث طريقة عرض مجسدة، يتم تشغيل دالات تصفية الصف مع حقوق المحدد (كمالك الجدول). وهذا يعني أن تحديث الجدول يستخدم سياق الأمان للمستخدم الذي أنشأ طريقة العرض المجسدة.
  • الاستعلام: أثناء تشغيل معظم عوامل التصفية مع حقوق المحدد، فإن الوظائف التي تتحقق من سياق المستخدم (مثل CURRENT_USER و IS_MEMBER) هي استثناءات. تعمل هذه الدالات كمستدعي. يفرض هذا الأسلوب أمان البيانات الخاصة بالمستخدم وعناصر التحكم في الوصول استنادا إلى سياق المستخدم الحالي.
  • عند إنشاء طرق عرض مجسدة عبر جداول المصدر التي تحتوي على عوامل تصفية الصفوف وأقنعة الأعمدة، يكون تحديث طريقة العرض المجسدة دائما تحديثا كاملا. يقوم التحديث الكامل بإعادة معالجة جميع البيانات المتوفرة في المصدر بأحدث التعريفات. وهذا يضمن تقييم نهج الأمان في جداول المصدر وتطبيقها باستخدام أحدث البيانات والتعريفات.

الملاحظة

استخدم DESCRIBE EXTENDEDأو INFORMATION_SCHEMAأو أو مستكشف الكتالوج لفحص عوامل تصفية الصفوف وأقنعة الأعمدة الموجودة التي تنطبق على طريقة عرض مجسدة معينة. تسمح هذه الوظيفة للمستخدمين بمراجعة ومراجعة الوصول إلى البيانات ومقاييس الحماية على طرق العرض المجسدة.

القيود

  • عندما تحتوي طريقة العرض المجسدة التي sum تحتوي على تجميع فوق عمود NULL-able على آخر قيمة غير NULL تمت إزالتها من هذا العمود - وبالتالي تبقى القيم فقط NULL في هذا العمود - ترجع القيمة التجميعية الناتجة لعرض العرض المجسد صفرا بدلا من NULL.
  • لا يتطلب مرجع العمود اسما مستعارا. تتطلب التعبيرات المرجعية غير العمودية اسما مستعارا، كما في المثال التالي:
    • سمح: SELECT col1, SUM(col2) AS sum_col2 FROM t GROUP BY col1
    • غير مسموح به: SELECT col1, SUM(col2) FROM t GROUP BY col1
  • NOT NULL يجب تحديد يدويا جنبا إلى جنب مع PRIMARY KEY لكي تكون عبارة صالحة.
  • لا تدعم طرق العرض المجسدة أعمدة الهوية أو المفاتيح البديلة.
  • لا تدعم OPTIMIZE طرق العرض المجسدة والأوامر VACUUM . تتم الصيانة تلقائيا.
  • لا تدعم طرق العرض المجسدة التوقعات لتحديد قيود جودة البيانات.

الأمثلة

-- Create a materialized view if it doesn't exist
> CREATE MATERIALIZED VIEW IF NOT EXISTS subscribed_movies
  AS SELECT mo.member_id, mb.full_name, mo.movie_title
       FROM movies AS mo INNER JOIN members AS mb ON mo.member_id = mb.id;

-- Create and schedule a materialized view to be refreshed daily at midnight.
-- Note: All columns in a GROUP BY need to be explicitly aliased
> CREATE MATERIALIZED VIEW daily_sales
  COMMENT 'Daily sales numbers'
  SCHEDULE CRON '0 0 0 * * ? *'
  AS SELECT date AS date, sum(sales) AS sumOfSales
       FROM table1
       GROUP BY date;

-- Sets the runtime channel to "PREVIEW"
> CREATE MATERIALIZED VIEW mv_preview
  TBLPROPERTIES(pipelines.channel = "PREVIEW")
  AS SELECT * FROM RANGE(10)

-- Create a materialized view with a table constraint
> CREATE MATERIALIZED VIEW IF NOT EXISTS subscribed_movies(
    member_id int NOT NULL,
    full_name string,
    movie_title string,
    CONSTRAINT movie_pk PRIMARY KEY(member_id)
  )
  AS SELECT mo.member_id, mb.full_name, mo.movie_title
       FROM movies AS mo INNER JOIN members AS mb ON mo.member_id = mb.id;

-- Create or replace the materialized view to remove the table constraint and add a partition
> CREATE OR REPLACE MATERIALIZED VIEW subscribed_movies
  PARTITIONED BY (member_id)
  AS SELECT mo.member_id, mb.full_name, mo.movie_title
       FROM movies AS mo INNER JOIN members AS mb ON mo.member_id = mb.id;

-- Create a materialized view with a row filter and a column mask
> CREATE MATERIALIZED VIEW masked_view (
    id int,
    name string,
    region string,
    ssn string MASK catalog.schema.ssn_mask_fn
  )
  WITH ROW FILTER catalog.schema.us_filter_fn ON (region)
  AS SELECT id, name, region, ssn
       FROM employees;