توافق ANSI في وقت تشغيل Databricks

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

توضح هذه المقالة توافق ANSI في Databricks Runtime. للحصول على وضع ANSI في Databricks SQL، راجع ANSI_MODE.

لدى Spark SQL خياران لدعم التوافق مع معيار ANSI SQL: spark.sql.ansi.enabled و spark.sql.storeAssignmentPolicy.

عندما spark.sql.ansi.enabled يتم تعيين إلى true، يستخدم Spark SQL لهجة متوافقة مع ANSI بدلا من أن تكون متوافقة مع Hive. على سبيل المثال، سيطرح Spark استثناء في وقت التشغيل بدلا من إرجاع نتائج فارغة إذا كانت المدخلات إلى عامل تشغيل/دالة SQL غير صالحة. قد لا تكون بعض ميزات لهجة ANSI من معيار ANSI SQL مباشرة، ولكن سلوكياتها تتماشى مع نمط ANSI SQL.

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

عندما spark.sql.storeAssignmentPolicy يتم تعيين إلى ANSI، يتوافق Spark SQL مع قواعد تعيين مخزن ANSI. هذا تكوين منفصل لأن قيمته الافتراضية هي ANSI، بينما يتم تعطيل التكوين spark.sql.ansi.enabled بشكل افتراضي.

يلخص الجدول التالي السلوك:

اسم الخاصية الإعداد الافتراضي المعنى
spark.sql.ansi.enabled true عندما يكون صحيحا، يحاول Spark التوافق مع مواصفات ANSI SQL:

- يطرح استثناء وقت التشغيل إذا حدث تجاوز في أي عملية على عدد صحيح أو حقل عشري.
- يمنع استخدام الكلمات الأساسية المحجوزة ل ANSI SQL كمعرفات في محلل SQL.
spark.sql.storeAssignmentPolicy ANSI عند تخزين قيمة في عمود بنوع بيانات مختلف، يقوم Spark بتحويل النوع. هناك ثلاثة نهج لقواعد الإكراه من النوع: ANSIو legacyو.strict

- ANSI: ينفذ Spark نوع الإكراه وفقا ل ANSI SQL. في الممارسة العملية، السلوك هو في الغالب نفس PostgreSQL. لا تسمح ببعض تحويلات النوع غير المعقولة مثل تحويل السلسلة إلى int أو مزدوجة إلى منطقية.
- legacy: يسمح Spark بالإكراه النوع طالما أنه صب صالح، وهو فضفاض جدا. على سبيل المثال، يسمح بتحويل السلسلة إلى int أو مزدوجة إلى منطقية. كما أنه السلوك الوحيد في Spark 2.x وهو متوافق مع Apache Hive.
- strict: لا يسمح Spark بأي فقدان دقة محتمل أو اقتطاع البيانات في الإكراه على النوع، على سبيل المثال، لا يسمح بالتحويل المزدوج إلى int أو عشري إلى مزدوج.

تقدم الأقسام الفرعية التالية تغييرات السلوك في العمليات الحسابية وتحويلات النوع وتحليل SQL عند تمكين وضع ANSI. بالنسبة إلى تحويلات النوع في Spark SQL، هناك ثلاثة أنواع منها وستقدمها هذه المقالة واحدا تلو الآخر: الإرسال والتعيين المخزن والإكراه على النوع.

العمليات الحسابية

في Spark SQL، لا يتم التحقق من العمليات الحسابية التي يتم إجراؤها على الأنواع الرقمية (باستثناء الفاصلة العشرية) للتجاوز بشكل افتراضي. وهذا يعني أنه في حالة حدوث تجاوز في العملية، تكون النتيجة هي نفسها مع العملية المقابلة في برنامج Java أو Scala (على سبيل المثال، إذا كان مجموع عددين صحيحين أعلى من الحد الأقصى للقيمة القابلة للتمثيل، تكون النتيجة رقما سالبا). من ناحية أخرى، يقوم Spark SQL بإرجاع قيمة خالية للتجاوز العشري. عندما spark.sql.ansi.enabled يتم تعيين إلى true ويحدث تجاوز في العمليات الحسابية الرقمية والفاصل الزمني، فإنه يطرح استثناء حسابيا في وقت التشغيل.

-- `spark.sql.ansi.enabled=true`
> SELECT 2147483647 + 1;
 error: integer overflow

-- `spark.sql.ansi.enabled=false`
> SELECT 2147483647 + 1;
  -2147483648

التحويل

عندما spark.sql.ansi.enabled يتم تعيين إلى true، يطرح التحويل الصريح بواسطة CAST بناء الجملة استثناء وقت التشغيل لأنماط التحويل غير القانونية المحددة في المعيار، مثل عمليات التحويل من سلسلة إلى عدد صحيح.

CAST يتبع بند وضع Spark ANSI قواعد بناء الجملة للقسم 6.13 "مواصفات التحويل" في ISO/IEC 9075-2:2011 Information technology — لغات قاعدة البيانات - SQL — الجزء 2: Foundation (SQL/Foundation)، باستثناء أنه يسمح بشكل خاص بتحويلات النوع المباشر التالية التي لا يسمح بها وفقا لمعيار ANSI:

  • NumericType <=> BooleanType
  • StringType <=> BinaryType

يتم إعطاء المجموعات الصالحة من نوع البيانات المصدر والهدف في CAST تعبير بواسطة الجدول التالي. يشير "Y" إلى أن التركيبة صالحة من الناحية التركيبية دون قيود ويشير "N" إلى أن المجموعة غير صالحة.

مصدر الهدف رقمي السلسلة‬ التاريخ طابع زمني الفاصل الزمني Boolean ثنائي صفيف الخريطة البنية
رقمي نعم السنة N N N السنة N N N N
السلسلة‬ نعم السنة السنة السنة السنة السنة السنة N N N
التاريخ N نعم السنة السنة N N N N N N
طابع زمني N نعم السنة السنة N N N N N N
الفاصل الزمني N السنة N N السنة N N N N N
Boolean نعم السنة N N N السنة N N N N
ثنائي Y N N N N N السنة N N N
صفيف N N N N N N N السنة N N
الخريطة N N N N N N N N السنة N
البنية N N N N N N N N N Y
-- Examples of explicit casting

-- `spark.sql.ansi.enabled=true`
> SELECT CAST('a' AS INT);
  ERROR: [CAST_INVALID_INPUT] The value 'a' of the type "STRING" cannot be cast to "INT" because it is malformed.

> SELECT CAST(2147483648L AS INT);
  ERROR: [CAST_OVERFLOW] The value 2147483648L of the type "BIGINT" cannot be cast to "INT" due to an overflow.

> SELECT CAST(DATE'2020-01-01' AS INT)
  ERROR: [DATATYPE_MISMATCH.CAST_WITH_FUNC_SUGGESTION] Cannot resolve "CAST(DATE '2020-01-01' AS INT)" due to data type mismatch: cannot cast "DATE" to "INT".

-- `spark.sql.ansi.enabled=false` (This is a default behavior)
> SELECT cast('a' AS INT);
  null

> SELECT CAST(2147483648L AS INT);
  -2147483648

> SELECT CAST(DATE'2020-01-01' AS INT);
  null

تعيين المتجر

الإعداد spark.sql.storeAssignmentPolicy افتراضيا إلى ANSI. باستخدام هذا الإعداد، عندما لا تتطابق أنواع بيانات قيم المصدر مع أنواع الأعمدة الهدف، يضيف Spark SQL تلقائيا عبارات ANSI CAST إلى عبارة INSERT. أثناء إدراج الجدول ضمن هذا النهج، يتحقق Spark من عمليات الإرسال غير الصالحة ويرفضها، ما يطرح استثناء لضمان جودة البيانات. وهذا يعني أنه إذا فشلت محاولة الإدراج بسبب عدم تطابق النوع، فلن يؤدي ذلك إلى كتابة أي بيانات جزئيا في الجدول.

أمثلة:

-- spark.sql.storeAssignmentPolicy=ANSI
> CREATE TABLE test(i INT);
> INSERT INTO test VALUES (2147483648L);
  ERROR: [CAST_OVERFLOW_IN_TABLE_INSERT] Fail to insert a value of "BIGINT" type into the "INT" type column `i` due to an overflow.

> INSERT INTO test VALUES ('a');
  ERROR: [CAST_INVALID_INPUT ERROR] The value 'a' of the type "STRING" cannot be cast to "INT" because it is malformed

توضح هذه الأمثلة أن Spark SQL يمنع إدراج البيانات غير المتوافقة، وبالتالي الحفاظ على تكامل البيانات.

spark.sql.storeAssignmentPolicy عند تعيين إلى LEGACY، يعود Spark SQL إلى السلوك السائد حتى Spark 2.x. في هذا الوضع، بدلا من استخدام ANSI CAST، فإنه يطبق عمليات CAST القديمة. ضمن هذا النهج، ينتج عن عمليات التحويل غير الصالحة أثناء إدراج الجدول إما قيم NULL أو قيم غير صحيحة يتم إدراجها، بدلا من طرح استثناء. أمثلة:

-- spark.sql.storeAssignmentPolicy=LEGACY
> CREATE TABLE test(i INT);
> INSERT INTO test VALUES (2147483648L);
> INSERT INTO test VALUES ('a');
> SELECT * FROM test;

-- Results
--  -2147483648 (incorrect value due to overflow)
--  null (cannot cast 'a' to INT)

نوع الإكراه

ترقية النوع والأسبقية

عندما spark.sql.ansi.enabled يتم تعيين إلى true، يستخدم Spark SQL العديد من القواعد التي تحكم كيفية حل التعارضات بين أنواع البيانات. في صميم حل التعارض هذا توجد قائمة أسبقية النوع التي تحدد ما إذا كان يمكن ترقية قيم نوع بيانات معين إلى نوع بيانات آخر ضمنيا.

نوع البيانات قائمة الأسبقية (من الأضيق إلى الأعرض)
بايت بايت -> قصير -> Int -> طويل -> عشري -> عائم* -> مزدوج
قصير Short -> Int -> Long -> Decimal -> Float* -> Double
Int Int -> Long -> Decimal -> Float* -> Double
طويل Long -> عشري -> عائم* -> مزدوج
عدد عشري عشري -> عائم* -> مزدوج
Float Float -> مزدوج
مزدوج مزدوج
التاريخ التاريخ -> الطابع الزمني
الطابع الزمني الطابع الزمني
السلسلة‬ السلسلة‬
ثنائي ثنائي
قيمة منطقية قيمة منطقية
الفاصل الزمني الفاصل الزمني
الخريطة خريطة**
صفيف صفيف**
البنية البنيه**
  • بالنسبة للنوع الأقل شيوعا، يتم تخطي الدقة العائمة لتجنب فقدان الدقة.

** بالنسبة لنوع معقد، تنطبق قاعدة الأسبقية بشكل متكرر على عناصر المكون الخاصة بها.

تنطبق القواعد الخاصة على نوع السلسلة و NULL غير مكتوب. يمكن ترقية NULL إلى أي نوع آخر، بينما يمكن ترقية سلسلة إلى أي نوع بيانات بسيط.

هذا تصوير رسومي لقائمة الأسبقية كشجرة موجهة: تمثيل رسومي لقواعد الأسبقية

دقة النوع الأقل شيوعا

النوع الأقل شيوعا من مجموعة من الأنواع هو النوع الأضيق الذي يمكن الوصول إليه من قائمة الأسبقية بواسطة كافة عناصر مجموعة الأنواع.

يتم استخدام دقة النوع الأقل شيوعا من أجل:

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

يتم تطبيق قواعد خاصة إذا تم حل النوع الأقل شيوعا إلى FLOAT. مع قيم النوع العائم، إذا كان أي من الأنواع هو INT أو BIGINT أو DECIMAL، يتم دفع النوع الأقل شيوعا إلى DOUBLE لتجنب الخسارة المحتملة للأرقام.

-- The coalesce function accepts any set of argument types as long as they share a least common type.
-- The result type is the least common type of the arguments.
> SET spark.sql.ansi.enabled=true;

> SELECT typeof(coalesce(1Y, 1L, NULL));
BIGINT

> SELECT typeof(coalesce(1, DATE'2020-01-01'));
Error: Incompatible types [INT, DATE]

> SELECT typeof(coalesce(ARRAY(1Y), ARRAY(1L)));
ARRAY<BIGINT>

> SELECT typeof(coalesce(1, 1F));
DOUBLE

> SELECT typeof(coalesce(1L, 1F));
DOUBLE

> SELECT (typeof(coalesce(1BD, 1F)));
DOUBLE

-- The substring function expects arguments of type INT for the start and length parameters.
> SELECT substring('hello', 1Y, 2);
he

> SELECT substring('hello', '1', 2);
he

> SELECT substring('hello', 1L, 2);
Error: Argument 2 requires an INT type.

> SELECT substring('hello', str, 2) FROM VALUES(CAST('1' AS STRING)) AS T(str);
Error: Argument 2 requires an INT type.

دوال SQL

يمكن أن يكون سلوك بعض وظائف SQL مختلفا ضمن وضع ANSI (spark.sql.ansi.enabled=true).

  • size: ترجع هذه الدالة قيمة خالية لإدخال فارغ ضمن وضع ANSI.
  • element_at:
    • تطرح هذه الدالة ArrayIndexOutOfBoundsException إذا كنت تستخدم مؤشرات غير صالحة.
    • تطرح هذه الدالة NoSuchElementException إذا لم يكن المفتاح موجودا في الخريطة.
  • elt: تطرح هذه الدالة ArrayIndexOutOfBoundsException إذا كنت تستخدم فهارس غير صالحة.
  • make_date: تفشل هذه الدالة باستثناء إذا كان تاريخ النتيجة غير صالح.
  • make_timestamp: تفشل هذه الدالة باستثناء إذا كان الطابع الزمني للنتيجة غير صالح.
  • make_interval: تفشل هذه الدالة باستثناء إذا كان الفاصل الزمني للنتيجة غير صالح.
  • next_day: تطرح هذه الدالة IllegalArgumentException إذا لم يكن الإدخال يوما صالحا من الأسبوع.
  • parse_url: تطرح هذه الدالة IllegalArgumentException إذا لم تكن سلسلة الإدخال عنوان url صالحا.
  • to_date: تفشل هذه الدالة باستثناء إذا تعذر تحليل سلسلة الإدخال، أو كانت سلسلة النمط غير صالحة.
  • to_timestamp: تفشل هذه الدالة باستثناء إذا تعذر تحليل سلسلة الإدخال، أو كانت سلسلة النمط غير صالحة.
  • to_unix_timestamp: تفشل هذه الدالة باستثناء إذا تعذر تحليل سلسلة الإدخال، أو كانت سلسلة النمط غير صالحة.
  • unix_timestamp: تفشل هذه الدالة باستثناء إذا تعذر تحليل سلسلة الإدخال، أو كانت سلسلة النمط غير صالحة.

عوامل تشغيل SQL

يمكن أن يكون سلوك بعض عوامل تشغيل SQL مختلفا ضمن وضع ANSI (spark.sql.ansi.enabled=true).

  • array_col[index]: يطرح ArrayIndexOutOfBoundsException عامل التشغيل هذا إذا كان يستخدم مؤشرات غير صالحة.
  • map_col[key]: يطرح NoSuchElementException عامل التشغيل هذا إذا لم يكن المفتاح موجودا في الخريطة.
  • CAST(string_col AS TIMESTAMP): يفشل عامل التشغيل هذا باستثناء إذا تعذر تحليل سلسلة الإدخال.
  • CAST(string_col AS DATE): يفشل عامل التشغيل هذا باستثناء إذا تعذر تحليل سلسلة الإدخال.

وظائف مفيدة لوضع ANSI

عند تشغيل وضع ANSI، فإنه يطرح استثناءات لعمليات غير صالحة. يمكنك استخدام وظائف SQL التالية لمنع مثل هذه الاستثناءات.

  • try_cast: مطابق ل CAST، باستثناء أنه يرجع NULL النتيجة بدلا من طرح استثناء في خطأ وقت التشغيل.
  • try_add: مطابق لعامل تشغيل +الإضافة ، باستثناء أنه يرجع NULL نتيجة بدلا من طرح استثناء على تجاوز القيمة المتكاملة.
  • try_divide: مطابق لعامل تشغيل /القسمة ، باستثناء أنه يرجع NULL النتيجة بدلا من طرح استثناء على قسمة 0.

الكلمات الأساسية ل SQL

عندما spark.sql.ansi.enabled يكون صحيحا، سيستخدم Spark SQL محلل وضع ANSI. في هذا الوضع، يحتوي Spark SQL على نوعين من الكلمات الأساسية:

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

عند تعطيل وضع ANSI، يحتوي Spark SQL على نوعين من الكلمات الأساسية:

  • الكلمات الأساسية غير المحجوزة: نفس التعريف مثل التعريف عند تمكين وضع ANSI.
  • كلمات أساسية صارمة غير محجوزة: إصدار صارم من الكلمات الأساسية غير المحجوزة، والتي لا يمكن استخدامها كاسم مستعار للجدول.

بشكل افتراضي spark.sql.ansi.enabled غير صحيح.

فيما يلي قائمة بجميع الكلمات الأساسية في Spark SQL.

كلمة أساسية وضع Spark SQL ANSI الوضع الافتراضي ل Spark SQL SQL-2016
ADD غير محجوز غير محجوز غير محجوز
بعد غير محجوز غير محجوز غير محجوز
ALL محجوز غير محجوز محجوز
تعديل غير محجوز غير محجوز محجوز
دوما غير محجوز غير محجوز غير محجوز
التحليل غير محجوز غير محجوز غير محجوز
و محجوز غير محجوز محجوز
مضاد غير محجوز صارم غير محجوز غير محجوز
ANY محجوز غير محجوز محجوز
ARCHIVE غير محجوز غير محجوز غير محجوز
ARRAY غير محجوز غير محجوز محجوز
AS محجوز غير محجوز محجوز
الرابطه غير محجوز غير محجوز غير محجوز
AT غير محجوز غير محجوز محجوز
إذن محجوز غير محجوز محجوز
‏‏بين غير محجوز غير محجوز محجوز
كلا محجوز غير محجوز محجوز
دلو غير محجوز غير محجوز غير محجوز
الجرادل غير محجوز غير محجوز غير محجوز
BY غير محجوز غير محجوز محجوز
تخزين مؤقت غير محجوز غير محجوز غير محجوز
تتالي غير محجوز غير محجوز غير محجوز
CASE محجوز غير محجوز محجوز
CAST محجوز غير محجوز محجوز
تغيير غير محجوز غير محجوز غير محجوز
فحص محجوز غير محجوز محجوز
مسح غير محجوز غير محجوز غير محجوز
عنقود غير محجوز غير محجوز غير محجوز
متفاوت المسافات غير محجوز غير محجوز غير محجوز
CODEGEN غير محجوز غير محجوز غير محجوز
جمع محجوز غير محجوز محجوز
مجموعة غير محجوز غير محجوز غير محجوز
العمود محجوز غير محجوز محجوز
الأعمدة غير محجوز غير محجوز غير محجوز
التعليق غير محجوز غير محجوز غير محجوز
ارتكب غير محجوز غير محجوز محجوز
الاتفاق غير محجوز غير محجوز غير محجوز
الضغطات غير محجوز غير محجوز غير محجوز
حسب غير محجوز غير محجوز غير محجوز
سلسله غير محجوز غير محجوز غير محجوز
القيد محجوز غير محجوز محجوز
كلف غير محجوز غير محجوز غير محجوز
CREATE محجوز غير محجوز محجوز
عبر محجوز صارم غير محجوز محجوز
المكعب غير محجوز غير محجوز محجوز
حالي غير محجوز غير محجوز محجوز
CURRENT_DATE محجوز غير محجوز محجوز
CURRENT_TIME محجوز غير محجوز محجوز
CURRENT_TIMESTAMP محجوز غير محجوز محجوز
CURRENT_USER محجوز غير محجوز محجوز
بيانات غير محجوز غير محجوز غير محجوز
قاعدة البيانات غير محجوز غير محجوز غير محجوز
قواعد البيانات غير محجوز غير محجوز غير محجوز
DAY غير محجوز غير محجوز غير محجوز
خصائص DB غير محجوز غير محجوز غير محجوز
تعريف غير محجوز غير محجوز غير محجوز
حذف غير محجوز غير محجوز محجوز
محدد غير محجوز غير محجوز غير محجوز
تنازلي غير محجوز غير محجوز غير محجوز
وصف غير محجوز غير محجوز محجوز
DFS غير محجوز غير محجوز غير محجوز
الدلائل غير محجوز غير محجوز غير محجوز
دليل غير محجوز غير محجوز غير محجوز
مميز محجوز غير محجوز محجوز
قسم غير محجوز غير محجوز غير محجوز
شعبه غير محجوز غير محجوز ليست كلمة أساسية
DROP غير محجوز غير محجوز محجوز
اخر محجوز غير محجوز محجوز
انتهاء محجوز غير محجوز محجوز
فرار محجوز غير محجوز محجوز
هرب غير محجوز غير محجوز غير محجوز
EXCEPT محجوز صارم غير محجوز محجوز
EXCHANGE غير محجوز غير محجوز غير محجوز
EXISTS غير محجوز غير محجوز محجوز
EXPLAIN غير محجوز غير محجوز غير محجوز
تصدير غير محجوز غير محجوز غير محجوز
ممتد غير محجوز غير محجوز غير محجوز
خارجي غير محجوز غير محجوز محجوز
استخرج غير محجوز غير محجوز محجوز
خطأ محجوز غير محجوز محجوز
إحضار محجوز غير محجوز محجوز
حقول غير محجوز غير محجوز غير محجوز
راووق محجوز غير محجوز محجوز
تنسيق الملف غير محجوز غير محجوز غير محجوز
FIRST غير محجوز غير محجوز غير محجوز
الجبهه الوطنيه غير محجوز غير محجوز غير محجوز
التاليه غير محجوز غير محجوز غير محجوز
من أجل محجوز غير محجوز محجوز
FOREIGN محجوز غير محجوز محجوز
التنسيق غير محجوز غير محجوز غير محجوز
تنسيق غير محجوز غير محجوز غير محجوز
FROM محجوز غير محجوز محجوز
كامل محجوز صارم غير محجوز محجوز
دالة غير محجوز غير محجوز محجوز
وظائف غير محجوز غير محجوز غير محجوز
انشاء غير محجوز غير محجوز غير محجوز
عمومي غير محجوز غير محجوز محجوز
GRANT محجوز غير محجوز محجوز
منح غير محجوز غير محجوز غير محجوز
مجموعة محجوز غير محجوز محجوز
تجميع غير محجوز غير محجوز محجوز
HAVING محجوز غير محجوز محجوز
ساعة غير محجوز غير محجوز غير محجوز
IF غير محجوز غير محجوز ليست كلمة أساسية
تجاهل غير محجوز غير محجوز غير محجوز
استورد غير محجوز غير محجوز غير محجوز
IN محجوز غير محجوز محجوز
فهرس غير محجوز غير محجوز غير محجوز
الفهارس غير محجوز غير محجوز غير محجوز
INNER محجوز صارم غير محجوز محجوز
INPATH غير محجوز غير محجوز غير محجوز
تنسيق الإدخال غير محجوز غير محجوز غير محجوز
إدراج غير محجوز غير محجوز محجوز
INTERSECT محجوز صارم غير محجوز محجوز
الفاصل غير محجوز غير محجوز محجوز
INTO محجوز غير محجوز محجوز
IS محجوز غير محجوز محجوز
العناصر غير محجوز غير محجوز غير محجوز
انضمام محجوز صارم غير محجوز محجوز
مفتاح غير محجوز غير محجوز غير محجوز
المفاتيح غير محجوز غير محجوز غير محجوز
LAST غير محجوز غير محجوز غير محجوز
جانبي محجوز صارم غير محجوز محجوز
كسلان غير محجوز غير محجوز غير محجوز
دالة LEADING محجوز غير محجوز محجوز
LEFT محجوز صارم غير محجوز محجوز
LIKE غير محجوز غير محجوز محجوز
ILIKE غير محجوز غير محجوز غير محجوز
حد غير محجوز غير محجوز غير محجوز
اسطر غير محجوز غير محجوز غير محجوز
قائمة غير محجوز غير محجوز غير محجوز
حمل غير محجوز غير محجوز غير محجوز
LOCAL غير محجوز غير محجوز محجوز
الموقع غير محجوز غير محجوز غير محجوز
قفل غير محجوز غير محجوز غير محجوز
اقفال غير محجوز غير محجوز غير محجوز
منطقي غير محجوز غير محجوز غير محجوز
ماكرو غير محجوز غير محجوز غير محجوز
تعيين غير محجوز غير محجوز غير محجوز
مطابقه غير محجوز غير محجوز غير محجوز
دمج غير محجوز غير محجوز غير محجوز
دقيقة غير محجوز غير محجوز غير محجوز
ناقص غير محجوز صارم غير محجوز غير محجوز
MONTH غير محجوز غير محجوز غير محجوز
MSCK غير محجوز غير محجوز غير محجوز
Namespace غير محجوز غير محجوز غير محجوز
مساحات الأسماء غير محجوز غير محجوز غير محجوز
طبيعي محجوز صارم غير محجوز محجوز
لا غير محجوز غير محجوز محجوز
NOT محجوز غير محجوز محجوز
قيمة فارغة محجوز غير محجوز محجوز
القيم الخاليه غير محجوز غير محجوز غير محجوز
من غير محجوز غير محجوز محجوز
تشغيل محجوز صارم غير محجوز محجوز
فقط محجوز غير محجوز محجوز
الخيار غير محجوز غير محجوز غير محجوز
الخيارات غير محجوز غير محجوز غير محجوز
OR محجوز غير محجوز محجوز
ترتيب محجوز غير محجوز محجوز
خارج غير محجوز غير محجوز محجوز
خارجي محجوز غير محجوز محجوز
تنسيق الإخراج غير محجوز غير محجوز غير محجوز
OVER غير محجوز غير محجوز غير محجوز
التداخلات محجوز غير محجوز محجوز
تراكب غير محجوز غير محجوز غير محجوز
الكتابه غير محجوز غير محجوز غير محجوز
قسم غير محجوز غير محجوز محجوز
تقسيم غير محجوز غير محجوز غير محجوز
اقسام غير محجوز غير محجوز غير محجوز
المائه غير محجوز غير محجوز غير محجوز
محور غير محجوز غير محجوز غير محجوز
وضع غير محجوز غير محجوز غير محجوز
موضع غير محجوز غير محجوز محجوز
سابق غير محجوز غير محجوز غير محجوز
PRIMARY محجوز غير محجوز محجوز
مديري المدارس غير محجوز غير محجوز غير محجوز
الخصائص غير محجوز غير محجوز غير محجوز
تطهير غير محجوز غير محجوز غير محجوز
التاهل محجوز غير محجوز محجوز
QUERY غير محجوز غير محجوز غير محجوز
نطاق غير محجوز غير محجوز محجوز
المستلم غير محجوز غير محجوز غير محجوز
المستلمين غير محجوز غير محجوز غير محجوز
قارئ السجلات غير محجوز غير محجوز غير محجوز
كاتب السجلات غير محجوز غير محجوز غير محجوز
أفاق غير محجوز غير محجوز غير محجوز
قلل غير محجوز غير محجوز غير محجوز
المراجع محجوز غير محجوز محجوز
تحديث غير محجوز غير محجوز غير محجوز
REGEXP غير محجوز غير محجوز ليست كلمة أساسية
أبعد غير محجوز غير محجوز غير محجوز
RENAME غير محجوز غير محجوز غير محجوز
رم غير محجوز غير محجوز غير محجوز
REPLACE غير محجوز غير محجوز غير محجوز
اعاده تعيين غير محجوز غير محجوز غير محجوز
احترام غير محجوز غير محجوز غير محجوز
تقيد غير محجوز غير محجوز غير محجوز
إبطال غير محجوز غير محجوز محجوز
RIGHT محجوز صارم غير محجوز محجوز
مفتاح RLIKE غير محجوز غير محجوز غير محجوز
الدور غير محجوز غير محجوز غير محجوز
ادوار غير محجوز غير محجوز غير محجوز
العوده غير محجوز غير محجوز محجوز
القيمة المحتسبة غير محجوز غير محجوز محجوز
صف غير محجوز غير محجوز محجوز
الصفوف غير محجوز غير محجوز محجوز
مخطط غير محجوز غير محجوز غير محجوز
المخططات غير محجوز غير محجوز ليست كلمة أساسية
ثان غير محجوز غير محجوز غير محجوز
حدد … محجوز غير محجوز محجوز
شبه غير محجوز صارم غير محجوز غير محجوز
منفصل غير محجوز غير محجوز غير محجوز
SERDE غير محجوز غير محجوز غير محجوز
خصائص SERDE غير محجوز غير محجوز غير محجوز
SESSION_USER محجوز غير محجوز محجوز
SET غير محجوز غير محجوز محجوز
طقوم غير محجوز غير محجوز غير محجوز
SHARE غير محجوز غير محجوز غير محجوز
الاسهم غير محجوز غير محجوز غير محجوز
عرض غير محجوز غير محجوز غير محجوز
منحرفه غير محجوز غير محجوز غير محجوز
بعض محجوز غير محجوز محجوز
صنف غير محجوز غير محجوز غير محجوز
فرز غير محجوز غير محجوز غير محجوز
START غير محجوز غير محجوز محجوز
الاحصاءات غير محجوز غير محجوز غير محجوز
تخزين غير محجوز غير محجوز غير محجوز
STRATIFY غير محجوز غير محجوز غير محجوز
البنيه غير محجوز غير محجوز غير محجوز
SUBSTR غير محجوز غير محجوز غير محجوز
SUBSTRING غير محجوز غير محجوز غير محجوز
SYNC غير محجوز غير محجوز غير محجوز
TABLE محجوز غير محجوز محجوز
الجداول غير محجوز غير محجوز غير محجوز
الطابع الزمني للجداول غير محجوز غير محجوز محجوز
TBLPROPERTIES غير محجوز غير محجوز غير محجوز
TEMP غير محجوز غير محجوز ليست كلمة أساسية
مؤقت غير محجوز غير محجوز غير محجوز
انهاء غير محجوز غير محجوز غير محجوز
ثم محجوز غير محجوز محجوز
TIME محجوز غير محجوز محجوز
معدل فقد الكرة محجوز غير محجوز محجوز
يلمس غير محجوز غير محجوز غير محجوز
الدالة TRAILING محجوز غير محجوز محجوز
العملية غير محجوز غير محجوز غير محجوز
المعاملات غير محجوز غير محجوز غير محجوز
تحول غير محجوز غير محجوز غير محجوز
TRIM غير محجوز غير محجوز غير محجوز
صواب غير محجوز غير محجوز محجوز
اقتطاع غير محجوز غير محجوز محجوز
TRY_CAST غير محجوز غير محجوز غير محجوز
اكتب غير محجوز غير محجوز غير محجوز
غير أرشفي غير محجوز غير محجوز غير محجوز
غير محدود غير محجوز غير محجوز غير محجوز
UNCACHE غير محجوز غير محجوز غير محجوز
UNION محجوز صارم غير محجوز محجوز
فريد محجوز غير محجوز محجوز
UNKNOWN محجوز غير محجوز محجوز
إلغاء القفل غير محجوز غير محجوز غير محجوز
إلغاء الإعداد غير محجوز غير محجوز غير محجوز
تحديث غير محجوز غير محجوز محجوز
استخدم غير محجوز غير محجوز غير محجوز
USER محجوز غير محجوز محجوز
استخدام محجوز صارم غير محجوز محجوز
القيم غير محجوز غير محجوز محجوز
منظر غير محجوز غير محجوز غير محجوز
طرق العرض غير محجوز غير محجوز غير محجوز
متى محجوز غير محجوز محجوز
WHERE محجوز غير محجوز محجوز
نافذة غير محجوز غير محجوز محجوز
مع محجوز غير محجوز محجوز
YEAR غير محجوز غير محجوز غير محجوز
منطقة غير محجوز غير محجوز غير محجوز