تغيير الجدول

يغير مخطط الجدول أو خصائصه.

لتغييرات النوع أو إعادة تسمية الأعمدة في Delta Lake، راجع إعادة كتابة البيانات.

لتغيير التعليق على جدول، استخدم التعليق على.

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

بناء الجملة

ALTER TABLE table_name
   { RENAME clause |
     ADD COLUMN clause |
     ALTER COLUMN clause |
     RENAME COLUMN clause |
     ADD CONSTRAINT clause |
     DROP CONSTRAINT clause |
     ADD PARTITION clause |
     DROP PARTITION clause |
     RENAME PARTITION clause |
     RECOVER PARTITIONS clause |
     SET TBLPROPERTIES clause |
     UNSET TBLPROPERTIES clause |
     SET SERDE clause |
     SET LOCATION clause |
     OWNER TO clause }

المعلمات

  • table_name

    يحدد الجدول الذي يتم تغييره. يجب ألا يتضمن الاسم مواصفات زمنية.

  • إعادة تسمية إلى to_table_name

    يعيد تسمية الجدول داخل المخطط نفسه.

  • إضافة عمود

    هذا البند غير مدعوم لمصادر JDBC البيانات.

    إضافة عمود واحد أو أكثر إلى الجدول، أو حقول إلى أعمدة موجودة في جدول بحيرة دلتا.

    { ADD [COLUMN | COLUMNS ]
      ( { {column_identifier | field_name} data_type [COMMENT comment] [FIRST | AFTER identifier] } [, ...] ) }
    
    • column_identifier

      اسم العمود المراد إضافته. يجب أن يكون الاسم فريدا داخل الجدول.

      ما لم FIRST يتم تحديد أو AFTER name تحديد العمود أو الحقل سيتم إلحاقه في النهاية.

    • field_name

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

    • تعليق تعليق

      سلسلة اختيارية حرفية تصف العمود أو الحقل المضاف.

    • أولا

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

    • معرف AFTER

      إذا تم تحديد العمود أو الحقل سيتم إضافته مباشرة بعد الحقل أو العمود identifier.

  • تغيير العمود

    تغيير خاصية أو موقع عمود.

    { { ALTER | CHANGE } [COLUMN] { column_identifier | field_name }
      { COMMENT comment |
        { FIRST | AFTER column_identifier } |
        { SET | DROP } NOT NULL |
        SYNC IDENTITY } }
    
    • column_identifier

      اسم العمود المراد تغييره.

    • field_name

      الاسم المؤهل بالكامل للحقل المراد تغييره. يجب أن توجد كافة مكونات المسار إلى الحقل المتداخل.

    • تعليق تعليق

      تغيير وصف العمود column_name . comment يجب أن يكون حرفيا STRING.

    • المعرف الأول أو اللاحق

      يحرك العمود من موضعه الحالي إلى الأمام (FIRST) أو على identifierالفور AFTER . يتم دعم هذا البند فقط إذا كان table_name جدول دلتا.

    • تعيين ليس فارغا أو إسقاط غير فارغ

      يغير مجال قيم الأعمدة الصالحة لاستبعاد الفراغات SET NOT NULL، أو تضمين الفراغات DROP NOT NULL. هذا الخيار مدعوم فقط لجداول بحيرة دلتا. ستضمن Delta Lake أن يكون القيد صالحا لجميع البيانات الحالية والجديدة.

    • مزامنة الهوية

      منذ:Databricks وقت التشغيل 10.3

      هام

      توجد هذه الميزة في "المعاينة العامة".

      مزامنة بيانات التعريف لعمود الهوية مع البيانات الفعلية. عند كتابة القيم الخاصة بك إلى عمود هوية، قد لا يتوافق مع بيانات التعريف. يقوم هذا الخيار بتقييم الحالة وتحديث بيانات التعريف لتكون متسقة مع البيانات الفعلية. بعد هذا الأمر ، ستبدأ قيمة الهوية المعينة تلقائيا التالية من start + (n + 1) * step، حيث n تكون أصغر قيمة تلبي start + n * step >= max() (لخطوة إيجابية).

      هذا الخيار مدعوم فقط لأعمدة الهوية على جداول Delta Lake.

    • مزامنة الهوية

      منذ:Databricks وقت التشغيل 10.3

      هام

      توجد هذه الميزة في "المعاينة العامة".

      مزامنة بيانات التعريف لعمود الهوية مع البيانات الفعلية. عند كتابة القيم الخاصة بك إلى عمود هوية، قد لا يتوافق مع بيانات التعريف. يقوم هذا الخيار بتقييم الحالة وتحديث بيانات التعريف لتكون متسقة مع البيانات الفعلية. بعد هذا الأمر ، ستبدأ قيمة الهوية المعينة تلقائيا التالية من start + (n + 1) * step، حيث n تكون أصغر قيمة تلبي start + n * step >= max() (لخطوة إيجابية).

      هذا الخيار مدعوم فقط لأعمدة الهوية على جداول Delta Lake.

  • إعادة تسمية العمود

    إعادة تسمية عمود أو حقل في جدول بحيرة دلتا.

    عند إعادة تسمية عمود أو حقل، تحتاج أيضا إلى تغيير قيود التحقق التابعة والأعمدة التي تم إنشاؤها.

    RENAME COLUMN { column_identifier TO to_column_identifier|
                    field_name TO to_field_identifier }
    
    • column_identifier

      الاسم الحالي للعمود.

    • to_column_identifier

      معرف العمود الجديد. يجب أن يكون المعرف فريدا داخل الجدول.

    • field_name

      الاسم الحالي المؤهل بالكامل للحقل.

    • to_field_identifier

      معرف الحقل الجديد. يجب أن يكون المعرف فريدا داخل البنية المحلية.

  • إضافة قيد constraint_name تحقق ( شرط )

    إضافة قيد تحقق إلى جدول بحيرة دلتا.

    • constraint_name

      معرف فريد داخل الجدول.

    • تحقق ( شرط )

      تعبير حتمي يعيد منطقيا.

      conditionقد تتكون من الحروف ومعرفات الأعمدة داخل الجدول والوظائف أو العوامل الحتمية المضمنة SQL باستثناء:

      كما condition يجب ألا تحتوي على أي condition.

      لكي يتم استيفاء قيد CHECK في Azure Databricks ، يجب تقييمه إلى true.

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

  • إسقاط القيد constraint_name

    إزالة قيد تحقق من جدول بحيرة دلتا.

  • إضافة قسم

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

    ADD [IF NOT EXISTS] { PARTITION clause [ LOCATION path ] } [...]
    
    • إن لم يكن موجودا

      عبارة اختيارية توجه Databricks Runtime لتجاهل العبارة إذا كان القسم موجودا بالفعل.

    • بند التقسيم

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

    • مسار الموقع

      path يجب أن يكون حرف STRING يمثل موقعا اختياريا يشير إلى القسم.

      إذا لم يتم تحديد أي موقع ، اشتقاق الموقع من موقع الجدول ومفاتيح القسم.

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

  • قسم الإسقاط

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

    لا تدعم جداول Delta Lake إسقاط الأقسام.

    DROP [ IF EXISTS ] PARTITION clause [, ...] [PURGE]
    
    • إذا كان موجودا

      عند تحديد IF EXISTS Azure Databricks سوف تتجاهل محاولة لإسقاط أقسام غير موجودة. وإلا، فإن الأقسام غير الموجودة سوف يسبب خطأ.

    • بند التقسيم

      يحدد قسما ليتم إسقاطه. إذا تم تحديد القسم جزئيا فقط ، إسقاط شريحة من الأقسام.

    • تطهير

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

      يدعم نظام الملفات مجلد المهملات. تم تكوين الكتالوج لنقل القسم الذي تم إسقاطه إلى مجلد المهملات. لا يوجد مجلد مهملات في AWS S3، لذا فهو غير فعال.

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

  • إعادة تسمية القسم

    يستبدل مفاتيح القسم.

    لا تدعم جداول Delta Lake إعادة تسمية الأقسام.

    from_partition_clause RENAME TO to_partition_clause
    
    • from_partition_clause

      تعريف القسم المراد إعادة تسميته.

    • to_partition_clause

      التعريف الجديد لهذا القسم. يجب ألا يكون القسم الذي يحتوي على نفس المفاتيح موجودا بالفعل.

  • استعادة الأقسام

    لا ينطبق هذا البند على جداول بحيرة دلتا.

    يرشد Databricks Runtime لفحص موقع الجدول وإضافة أي ملفات إلى الجدول تمت إضافتها مباشرة إلى نظام الملفات.

  • تعيين خصائص TBL

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

    SET TBLPROPERTIES ( { property_key = property_val } [, ...] )
    
    • property_key

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

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

    • property_val

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

  • خصائص TBL غير محددة

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

    UNSET TBLPROPERTIES [ IF EXISTS ] ( property_key [, ...] )
    
    • إذا كان موجودا

      ما لم IF EXISTS يتم تحديد خطأ يتم مداهمته إذا لم يتم تعيين الخاصية.

    • property_key

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

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

  • تعيين سيردي

    SERDE تعيين أو SERDEPROPERTIES في جداول الخلية. إذا تم تعيين خاصية بالفعل، فإنها تتجاوز القيمة القديمة مع القيمة الجديدة.

    { SET SERDEPROPERTIES ( property_key = property_val [, ...] ) |
      SET SERDE serde_class_name [ WITH SERDEPROPERTIES ( property_key = property_val [, ...] ) ] }
    
    • serde_class_name

      المسار المؤهل بالكامل إلى اسم فئة SerDe.

    • SERDEPROPERTIES ( property_key = property_val [, ...] )

      خصائص SerDe التي سيتم تعيينها.

      • property_key

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

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

      • property_val

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

  • تعيين الموقع

    نقل موقع قسم أو جدول.

    لا تدعم Delta Lake نقل الأقسام الفردية لجدول Delta Lake.

    [ PARTITION clause ] SET LOCATION path
    
    • بند التقسيم

      يحدد اختياريا القسم الذي سيتم تغيير الموقع له. إذا حذفت تسمية قسم يقوم Azure Databricks بنقل موقع الجدول.

    • مسار الموقع

      path يجب أن يكون حرفيا STRING. يحدد الموقع الجديد للقسم أو الجدول.

      لن يتم نقل الملفات الموجودة في الموقع الأصلي إلى الموقع الجديد.

  • المالك إلى المدير

    نقل ملكية الجدول إلى principal.

امثله

للاطلاع على دلتا ليك، أضف أمثلة الأعمدة وقم بتغييرها، راجع

-- RENAME table
> DESCRIBE student;
                col_name data_type comment
 ----------------------- --------- -------
                    name    string    NULL
                  rollno       int    NULL
                     age       int    NULL
 # Partition Information
              # col_name data_type comment
                     age       int    NULL

> ALTER TABLE Student RENAME TO StudentInfo;

-- After Renaming the table
> DESCRIBE StudentInfo;
                col_name data_type comment
 ----------------------- --------- -------
                    name    string    NULL
                  rollno       int    NULL
                     age       int    NULL
 # Partition Information
              # col_name data_type comment
                     age       int    NULL

-- RENAME partition
> SHOW PARTITIONS StudentInfo;
 partition
 ---------
    age=10
    age=11
    age=12

> ALTER TABLE default.StudentInfo PARTITION (age='10') RENAME TO PARTITION (age='15');

-- After renaming Partition
> SHOW PARTITIONS StudentInfo;
 partition
 ---------
    age=11
    age=12
    age=15

-- Add new columns to a table
> DESCRIBE StudentInfo;
                col_name data_type comment
 ----------------------- --------- -------
                    name    string    NULL
                  rollno       int    NULL
                     age       int    NULL
 # Partition Information
              # col_name data_type comment
                     age       int    NULL

> ALTER TABLE StudentInfo ADD columns (LastName string, DOB timestamp);

-- After Adding New columns to the table
> DESCRIBE StudentInfo;
                col_name data_type comment
 ----------------------- --------- -------
                    name    string    NULL
                  rollno       int    NULL
                LastName    string    NULL
                     DOB timestamp    NULL
                     age       int    NULL
 # Partition Information
              # col_name data_type comment
                     age       int    NULL

-- Add a new partition to a table
> SHOW PARTITIONS StudentInfo;
 partition
 ---------
    age=11
    age=12
    age=15

> ALTER TABLE StudentInfo ADD IF NOT EXISTS PARTITION (age=18);

-- After adding a new partition to the table
> SHOW PARTITIONS StudentInfo;
 partition
 ---------
    age=11
    age=12
    age=15
    age=18

-- Drop a partition from the table
> SHOW PARTITIONS StudentInfo;
 partition
 ---------
    age=11
    age=12
    age=15
    age=18

> ALTER TABLE StudentInfo DROP IF EXISTS PARTITION (age=18);

-- After dropping the partition of the table
> SHOW PARTITIONS StudentInfo;
 partition
 ---------
    age=11
    age=12
    age=15

-- Adding multiple partitions to the table
> SHOW PARTITIONS StudentInfo;
 partition
 ---------
    age=11
    age=12
    age=15

> ALTER TABLE StudentInfo ADD IF NOT EXISTS PARTITION (age=18) PARTITION (age=20);

-- After adding multiple partitions to the table
> SHOW PARTITIONS StudentInfo;
 partition
 ---------
    age=11
    age=12
    age=15
    age=18
    age=20

-- ALTER or CHANGE COLUMNS
> DESCRIBE StudentInfo;
                col_name data_type comment
+-----------------------+---------+-------
                    name    string    NULL
                  rollno       int    NULL
                LastName    string    NULL
                     DOB timestamp    NULL
                     age       int    NULL
 # Partition Information
              # col_name data_type comment
                     age       int    NULL

ALTER TABLE StudentInfo ALTER COLUMN name COMMENT "new comment";

--After ALTER or CHANGE COLUMNS
> DESCRIBE StudentInfo;
                col_name data_type     comment
 ----------------------- --------- -----------
                    name    string new comment
                  rollno       int        NULL
                LastName    string        NULL
                     DOB timestamp        NULL
                     age       int        NULL
 # Partition Information
              # col_name data_type     comment
                     age       int        NULL

-- RENAME COLUMN
> ALTER TABLE StudentInfo RENAME COLUMN name TO FirstName;

--After RENAME COLUMN
> DESCRIBE StudentInfo;
                col_name data_type     comment
 ----------------------- --------- -----------
               FirstName    string new comment
                  rollno       int        NULL
                LastName    string        NULL
                     DOB timestamp        NULL
                     age       int        NULL
 # Partition Information
              # col_name data_type     comment
                     age       int        NULL

-- Change the file Location
> ALTER TABLE dbx.tab1 PARTITION (a='1', b='2') SET LOCATION '/path/to/part/ways'

-- SET SERDE/ SERDE Properties
> ALTER TABLE test_tab SET SERDE 'org.apache.hadoop.hive.serde2.columnar.LazyBinaryColumnarSerDe';

> ALTER TABLE dbx.tab1 SET SERDE 'org.apache.hadoop' WITH SERDEPROPERTIES ('k' = 'v', 'kay' = 'vee')

-- SET TABLE PROPERTIES
> ALTER TABLE dbx.tab1 SET TBLPROPERTIES ('winner' = 'loser');

-- DROP TABLE PROPERTIES
> ALTER TABLE dbx.tab1 UNSET TBLPROPERTIES ('winner');