مرجع لغة Delta Live Tables SQL

توفر هذه المقالة تفاصيل لواجهة برمجة Delta Live Tables SQL.

  • للحصول على معلومات حول واجهة برمجة تطبيقات Python، راجع مرجع لغة Delta Live Tables Python.
  • لمزيد من المعلومات حول أوامر SQL، راجع مرجع لغة SQL.

يمكنك استخدام وظائف Python المعرفة من قبل المستخدم (UDFs) في استعلامات SQL، ولكن يجب عليك تعريف UDFs هذه في ملفات Python قبل استدعائها في ملفات مصدر SQL. راجع الدالات العددية المعرفة من قبل المستخدم - Python.

القيود

العبارة PIVOT غير معتمدة. pivot تتطلب العملية في Spark تحميلا حريصا لبيانات الإدخال لحساب مخطط الإخراج. هذه الإمكانية غير معتمدة في Delta Live Tables.

إنشاء طريقة عرض أو جدول دفق مجسد في Delta Live Tables

يمكنك استخدام نفس بناء جملة SQL الأساسي عند الإعلان إما عن جدول دفق أو طريقة عرض مجسدة (يشار إليها أيضا باسم LIVE TABLE).

يمكنك فقط الإعلان عن جداول الدفق باستخدام الاستعلامات التي تقرأ مقابل مصدر دفق. توصي Databricks باستخدام أداة التحميل التلقائي لاستيعاب دفق الملفات من تخزين كائن السحابة. راجع بناء جملة SQL للتحميل التلقائي.

يجب تضمين الدالة STREAM() حول اسم مجموعة بيانات عند تحديد جداول أو طرق عرض أخرى في البنية الأساسية لبرنامج ربط العمليات التجارية كمصدر تدفق.

يصف ما يلي بناء الجملة للإعلان عن طرق العرض المجسدة وجداول الدفق باستخدام SQL:

CREATE OR REFRESH [TEMPORARY] { STREAMING TABLE | LIVE TABLE } table_name
  [(
    [
    col_name1 col_type1 [ GENERATED ALWAYS AS generation_expression1 ] [ COMMENT col_comment1 ] [ column_constraint ],
    col_name2 col_type2 [ GENERATED ALWAYS AS generation_expression2 ] [ COMMENT col_comment2 ] [ column_constraint ],
    ...
    ]
    [
    CONSTRAINT expectation_name_1 EXPECT (expectation_expr1) [ON VIOLATION { FAIL UPDATE | DROP ROW }],
    CONSTRAINT expectation_name_2 EXPECT (expectation_expr2) [ON VIOLATION { FAIL UPDATE | DROP ROW }],
    ...
    ]
    [ table_constraint ] [, ...]
  )]
  [USING DELTA]
  [PARTITIONED BY (col_name1, col_name2, ... )]
  [LOCATION path]
  [COMMENT table_comment]
  [TBLPROPERTIES (key1 [ = ] val1, key2 [ = ] val2, ... )]
  AS select_statement

إنشاء طريقة عرض Delta Live Tables

يصف ما يلي بناء الجملة للإعلان عن طرق العرض باستخدام SQL:

CREATE TEMPORARY [STREAMING] LIVE VIEW view_name
  [(
    [
    col_name1 [ COMMENT col_comment1 ],
    col_name2 [ COMMENT col_comment2 ],
    ...
    ]
    [
    CONSTRAINT expectation_name_1 EXPECT (expectation_expr1) [ON VIOLATION { FAIL UPDATE | DROP ROW }],
    CONSTRAINT expectation_name_2 EXPECT (expectation_expr2) [ON VIOLATION { FAIL UPDATE | DROP ROW }],
    ...
    ]
  )]
  [COMMENT view_comment]
  AS select_statement

بناء جملة SQL للتحميل التلقائي

يصف ما يلي بناء الجملة للعمل مع Auto Loader في SQL:

CREATE OR REFRESH STREAMING TABLE table_name
AS SELECT *
  FROM cloud_files(
    "<file-path>",
    "<file-format>",
    map(
      "<option-key>", "<option_value",
      "<option-key>", "<option_value",
      ...
    )
  )

يمكنك استخدام خيارات التنسيق المعتمدة مع "المحمل التلقائي". باستخدام الدالة map() ، يمكنك تمرير أي عدد من الخيارات إلى cloud_files() الأسلوب . الخيارات هي أزواج قيم المفاتيح، حيث تكون المفاتيح والقيم سلاسل. للحصول على تفاصيل حول تنسيقات الدعم وخياراته، راجع خيارات تنسيق الملف.

مثال: تعريف الجداول

يمكنك إنشاء مجموعة بيانات عن طريق القراءة من مصدر بيانات خارجي أو من مجموعات البيانات المعرفة في البنية الأساسية لبرنامج ربط العمليات التجارية. للقراءة من مجموعة بيانات داخلية، قم بإيقاف LIVE الكلمة الأساسية مسبقا إلى اسم مجموعة البيانات. يعرف المثال التالي مجموعتي بيانات مختلفتين: جدول يسمى taxi_raw يأخذ ملف JSON كمصدر إدخال وجدول يسمى filtered_data يأخذ taxi_raw الجدول كمدخل:

CREATE OR REFRESH LIVE TABLE taxi_raw
AS SELECT * FROM json.`/databricks-datasets/nyctaxi/sample/json/`

CREATE OR REFRESH LIVE TABLE filtered_data
AS SELECT
  ...
FROM LIVE.taxi_raw

مثال: القراءة من مصدر دفق

لقراءة البيانات من مصدر دفق، على سبيل المثال، Auto Loader أو مجموعة بيانات داخلية، حدد جدولا STREAMING :

CREATE OR REFRESH STREAMING TABLE customers_bronze
AS SELECT * FROM cloud_files("/databricks-datasets/retail-org/customers/", "csv")

CREATE OR REFRESH STREAMING TABLE customers_silver
AS SELECT * FROM STREAM(LIVE.customers_bronze)

لمزيد من المعلومات حول تدفق البيانات، راجع تحويل البيانات باستخدام Delta Live Tables.

التحكم في كيفية ترجمة الجداول

توفر الجداول أيضا تحكما إضافيا في تجسيدها:

  • حدد كيفية تقسيم الجداول باستخدام PARTITIONED BY. يمكنك استخدام التقسيم لتسريع الاستعلامات.
  • يمكنك تعيين خصائص الجدول باستخدام TBLPROPERTIES. راجع خصائص جدول Delta Live Tables.
  • تعيين موقع تخزين باستخدام LOCATION الإعداد . بشكل افتراضي، يتم تخزين بيانات الجدول في موقع تخزين البنية الأساسية لبرنامج ربط العمليات التجارية إذا LOCATION لم يتم تعيينها.
  • يمكنك استخدام الأعمدة التي تم إنشاؤها في تعريف المخطط. راجع مثال: تحديد مخطط وأعمدة قسم.

إشعار

بالنسبة للجداول الأقل من 1 ТБ في الحجم، توصي Databricks بالسماح ل Delta Live Tables بالتحكم في تنظيم البيانات. ما لم تتوقع أن يزيد الجدول عن تيرابايت، يجب بشكل عام عدم تحديد أعمدة القسم.

مثال: تحديد مخطط وأعمدة قسم

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

CREATE OR REFRESH LIVE TABLE sales
(customer_id STRING,
  customer_name STRING,
  number_of_line_items STRING,
  order_datetime STRING,
  order_number LONG,
  order_day_of_week STRING GENERATED ALWAYS AS (dayofweek(order_datetime))
) PARTITIONED BY (order_day_of_week)
COMMENT "Raw data on sales"
AS SELECT * FROM ...

بشكل افتراضي، تستنتج Delta Live Tables المخطط من table التعريف إذا لم تحدد مخططا.

مثال: تعريف قيود الجدول

إشعار

يتوفر دعم Delta Live Tables لقيود الجدول في المعاينة العامة. لتعريف قيود الجدول، يجب أن تكون البنية الأساسية لبرنامج ربط العمليات التجارية الخاصة بك مسارا يدعم كتالوج Unity ويتم تكوينه لاستخدام القناة preview .

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

CREATE OR REFRESH LIVE TABLE sales
(customer_id STRING NOT NULL PRIMARY KEY,
  customer_name STRING,
  number_of_line_items STRING,
  order_datetime STRING,
  order_number LONG,
  order_day_of_week STRING GENERATED ALWAYS AS (dayofweek(order_datetime)),
  CONSTRAINT fk_customer_id FOREIGN KEY (customer_id) REFERENCES main.default.customers(customer_id)
)
COMMENT "Raw data on sales"
AS SELECT * FROM ...

تعيين قيم التكوين لجدول أو طريقة عرض

يستخدم SET لتحديد قيمة تكوين لجدول أو طريقة عرض، بما في ذلك تكوينات Spark. أي جدول أو طريقة عرض تقوم بتعريفها في دفتر ملاحظات بعد SET أن يكون للبيان حق الوصول إلى القيمة المعرفة. يتم استخدام أي تكوينات Spark محددة باستخدام العبارة SET عند تنفيذ استعلام Spark لأي جدول أو طريقة عرض تلي عبارة SET. لقراءة قيمة تكوين في استعلام، استخدم بناء جملة ${}استنتاج السلسلة . يعين المثال التالي قيمة تكوين Spark المسماة startDate ويستخدم هذه القيمة في استعلام:

SET startDate='2020-01-01';

CREATE OR REFRESH LIVE TABLE filtered
AS SELECT * FROM src
WHERE date > ${startDate}

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

خصائص SQL

إنشاء جدول أو طريقة عرض
TEMPORARY

إنشاء جدول ولكن لا تنشر بيانات التعريف للجدول. ترشد TEMPORARY العبارة Delta Live Tables لإنشاء جدول متوفر للبنية الأساسية لبرنامج ربط العمليات التجارية ولكن لا يجب الوصول إليه خارج البنية الأساسية لبرنامج ربط العمليات التجارية. لتقليل وقت المعالجة، يستمر جدول مؤقت طوال مدة بقاء المسار الذي يقوم بإنشائه، وليس فقط تحديث واحد.
STREAMING

إنشاء جدول يقرأ مجموعة بيانات إدخال كتدفق. يجب أن تكون مجموعة بيانات الإدخال مصدر بيانات دفق، على سبيل المثال، محمل تلقائي أو STREAMING جدول.
PARTITIONED BY

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

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

وصف اختياري للجدول.
column_constraint

مفتاح أساسي إعلامي اختياري أو قيد مفتاح خارجي على العمود.
table_constraint

مفتاح أساسي إعلامي اختياري أو قيد مفتاح خارجي على الجدول.
TBLPROPERTIES

قائمة اختيارية بخصائص الجدول للجدول.
select_statement

استعلام Delta Live Tables الذي يعرف مجموعة البيانات للجدول.
عبارة CONSTRAINT
EXPECT expectation_name

تعريف قيد expectation_nameجودة البيانات . إذا ON VIOLATION لم يتم تعريف القيد، أضف صفوفا تنتهك القيد إلى مجموعة البيانات الهدف.
ON VIOLATION

الإجراء الاختياري الذي يجب اتخاذه للصفوف الفاشلة:

* FAIL UPDATE: إيقاف تنفيذ البنية الأساسية لبرنامج ربط العمليات التجارية على الفور.
* DROP ROW: إسقاط السجل ومتابعة المعالجة.

تغيير التقاط البيانات باستخدام SQL في Delta Live Tables

استخدم العبارة APPLY CHANGES INTO لاستخدام وظيفة Delta Live Tables CDC، كما هو موضح في ما يلي:

CREATE OR REFRESH STREAMING TABLE table_name;

APPLY CHANGES INTO LIVE.table_name
FROM source
KEYS (keys)
[IGNORE NULL UPDATES]
[APPLY AS DELETE WHEN condition]
[APPLY AS TRUNCATE WHEN condition]
SEQUENCE BY orderByColumn
[COLUMNS {columnList | * EXCEPT (exceptColumnList)}]
[STORED AS {SCD TYPE 1 | SCD TYPE 2}]
[TRACK HISTORY ON {columnList | * EXCEPT (exceptColumnList)}]

يمكنك تعريف قيود جودة البيانات لهدف APPLY CHANGES ما باستخدام نفس CONSTRAINT العبارة مثل الاستعلامات غيرAPPLY CHANGES . راجع إدارة جودة البيانات باستخدام جداول Delta Live.

إشعار

السلوك الافتراضي للأحداث INSERT و UPDATE هو رفع أحداث CDC من المصدر: تحديث أي صفوف في الجدول الهدف تتطابق مع المفتاح (المفاتيح) المحددة أو إدراج صف جديد عندما لا يوجد سجل مطابق في الجدول الهدف. يمكن تحديد معالجة DELETE الأحداث مع APPLY AS DELETE WHEN الشرط .

هام

يجب الإعلان عن جدول تدفق هدف لتطبيق التغييرات فيه. يمكنك اختياريا تحديد المخطط للجدول الهدف. عند تحديد مخطط APPLY CHANGES الجدول الهدف، يجب أيضا تضمين __START_AT العمودين و __END_AT بنفس نوع البيانات مثل sequence_by الحقل.

راجع تطبيق واجهة برمجة تطبيقات التغييرات: تبسيط التقاط بيانات التغيير في Delta Live Tables.

شروط
KEYS

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

هذه العبارة مطلوبة.
IGNORE NULL UPDATES

السماح باستيعاب التحديثات التي تحتوي على مجموعة فرعية من الأعمدة الهدف. عندما يطابق حدث التقاط بيانات التغيير صفا موجودا ويتم تحديد IGNORE NULL UPDATES، ستحتفظ الأعمدة التي تحتوي على null بقيمها الموجودة في الهدف. ينطبق هذا أيضا على الأعمدة المتداخلة بقيمة null.

هذه العبارة اختيارية.

الإعداد الافتراضي هو الكتابة فوق الأعمدة الموجودة بالقيم null .
APPLY AS DELETE WHEN

يحدد متى يجب التعامل مع حدث CDC على DELETE أنه upsert بدلا من أن يتم التعامل معه. لمعالجة البيانات خارج الترتيب، يتم الاحتفاظ بالصف المحذوف مؤقتا كحصة في جدول Delta الأساسي، ويتم إنشاء طريقة عرض في metastore الذي يقوم بتصفية علامات الحذف هذه. يمكن تكوين الفاصل الزمني للاحتفاظ باستخدام
pipelines.cdc.tombstoneGCThresholdInSecondsخاصية الجدول.

هذه العبارة اختيارية.
APPLY AS TRUNCATE WHEN

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

APPLY AS TRUNCATE WHEN يتم اعتماد العبارة فقط لنوع SCD 1. لا يعتمد SCD النوع 2 الاقتطاع.

هذه العبارة اختيارية.
SEQUENCE BY

اسم العمود الذي يحدد الترتيب المنطقي لأحداث التقاط بيانات التغيير في البيانات المصدر. تستخدم Delta Live Tables هذا التسلسل لمعالجة أحداث التغيير التي تصل خارج الترتيب.

هذه العبارة مطلوبة.
COLUMNS

تحديد مجموعة فرعية من الأعمدة لتضمينها في الجدول الهدف. يمكنك إما أن:

* حدد القائمة الكاملة للأعمدة المراد تضمينها: COLUMNS (userId, name, city).
* حدد قائمة أعمدة لاستبعادها: COLUMNS * EXCEPT (operation, sequenceNum)

هذه العبارة اختيارية.

الإعداد الافتراضي هو تضمين كافة الأعمدة في الجدول الهدف عندما COLUMNS لا يتم تحديد العبارة.
STORED AS

ما إذا كنت تريد تخزين السجلات كنوع SCD 1 أو SCD من النوع 2.

هذه العبارة اختيارية.

الإعداد الافتراضي هو SCD من النوع 1.
TRACK HISTORY ON

تحديد مجموعة فرعية من أعمدة الإخراج لإنشاء سجلات المحفوظات عند وجود أي تغييرات على تلك الأعمدة المحددة. يمكنك إما أن:

* حدد القائمة الكاملة للأعمدة المراد تعقبها: COLUMNS (userId, name, city).
* حدد قائمة الأعمدة التي سيتم استبعادها من التعقب: COLUMNS * EXCEPT (operation, sequenceNum)

هذه العبارة اختيارية. الإعداد الافتراضي هو تعقب المحفوظات لجميع أعمدة الإخراج عند وجود أي تغييرات، ما يعادل TRACK HISTORY ON *.