إنشاء جدول [باستخدام]
ينطبق على: Databricks SQL Databricks Runtime
تعريف جدول مدار أو خارجي، بشكل اختياري باستخدام مصدر بيانات.
بناء الجملة
{ { [CREATE OR] REPLACE TABLE | CREATE [EXTERNAL] TABLE [ IF NOT EXISTS ] }
table_name
[ table_specification ]
[ USING data_source ]
[ table_clauses ]
[ AS query ] }
table_specification
( { column_identifier column_type [ column_properties ] } [, ...]
[ , table_constraint ] [...] )
column_properties
{ NOT NULL |
GENERATED ALWAYS AS ( expr ) |
GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ ( [ START WITH start ] [ INCREMENT BY step ] ) ] |
DEFAULT default_expression |
COMMENT column_comment |
column_constraint |
MASK clause } [ ... ]
table_clauses
{ OPTIONS clause |
PARTITIONED BY clause |
CLUSTER BY clause |
clustered_by_clause |
LOCATION path [ WITH ( CREDENTIAL credential_name ) ] |
COMMENT table_comment |
TBLPROPERTIES clause |
WITH { ROW FILTER clause } } [...]
clustered_by_clause
{ CLUSTERED BY ( cluster_column [, ...] )
[ SORTED BY ( { sort_column [ ASC | DESC ] } [, ...] ) ]
INTO num_buckets BUCKETS }
المعلمات
REPLACE
إذا تم تحديده، يستبدل الجدول ومحتواه إذا كان موجودا بالفعل. هذه العبارة معتمدة فقط لجداول Delta Lake.
REPLACE
يحافظ على محفوظات الجدول.إشعار
توصي Azure Databricks بشدة باستخدام
REPLACE
بدلا من إسقاط جداول Delta Lake وإعادة إنشائها.خارجي
إذا تم تحديده، ينشئ جدولا خارجيا. عند إنشاء جدول خارجي، يجب عليك أيضا توفير عبارة
LOCATION
. عند إسقاط جدول خارجي، لن يتم إسقاط الملفات فيLOCATION
.إذا لم يكن موجودا
إذا تم تحديده وجدول بنفس الاسم موجود بالفعل، يتم تجاهل العبارة .
IF NOT EXISTS
لا يمكن أن يتعايش معREPLACE
، مما يعنيCREATE OR REPLACE TABLE IF NOT EXISTS
أنه غير مسموح به.-
اسم الجدول الذي سيتم إنشاؤه. يجب ألا يتضمن الاسم مواصفات زمنية أو مواصفات خيارات. إذا لم يكن الاسم مؤهلا، يتم إنشاء الجدول في المخطط الحالي.
يمكن أن تحتوي الجداول التي تم إنشاؤها في
hive_metastore
على أحرف ASCII أبجدية رقمية فقط وتسطير أسفل السطر (INVALID_SCHEMA_OR_RELATION_NAME). table_specification
تحدد هذه العبارة الاختيارية قائمة الأعمدة وأنواعها وخصائصها ووصفها وقيود الأعمدة.
إذا لم تقم بتعريف الأعمدة، يجب تحديد مخطط الجدول إما
AS query
أوLOCATION
.-
اسم فريد للعمود.
يجب ألا تحتوي معرفات الأعمدة لجداول Delta Lake بدون خاصية تعيين العمود (
'delta.columnMapping.mode' = 'name'
) على مسافات أو الأحرف التالية:, ; { } ( ) \n \t =
.يجب أن تبدأ معرفات الأعمدة للجدول
AVRO
بتسطير سفلي (_
) أو حرف Unicode (بما في ذلك أحرف غير ASCII) وأن يتبعها مزيج من أحرف Unicode والأرقام والتسطير السفلي. -
تحديد نوع بيانات العمود. لا تدعم جميع مصادر البيانات جميع أنواع البيانات التي يدعمها Azure Databricks.
ليس فارغا
إذا تم تحديد العمود، فلن يقبل
NULL
القيم. هذه العبارة معتمدة فقط لجداول Delta Lake.تم إنشاؤه دائما ك ( expr )
عند تحديد هذه العبارة، يتم تحديد قيمة هذا العمود بواسطة المحدد
expr
.expr
قد تتكون من القيم الحرفية ومعرفات الأعمدة داخل الجدول ودالات SQL أو عوامل التشغيل الحتمية والمضمنة باستثناء:- دالات التجميع
- دوال النافذة التحليلية
- دالات نافذة تحديد المرتبة
- دالات مولد قيم الجدول
كما
expr
يجب ألا يحتوي على أي استعلام فرعي.تم الإنشاء { دائما | افتراضيا } AS IDENTITY [ ( [ START WITH start ] [ INCREMENT BY step ] ] ]
ينطبق على: Databricks SQL Databricks Runtime 10.4 LTS وما فوق
تعريف عمود هوية. عند الكتابة إلى الجدول، وعدم توفير قيم لعمود الهوية، سيتم تعيين قيمة فريدة ومتزايدة إحصائيا (أو تتناقص إذا كانت
step
سالبة). هذه العبارة معتمدة فقط لجداول Delta Lake. يمكن استخدام هذه العبارة فقط للأعمدة ذات نوع بيانات BIGINT.تبدأ القيم المعينة تلقائيا بزيادة
start
بمقدارstep
. القيم المعينة فريدة ولكنها غير مضمونة لتكون متقاربة. كلتا المعلمتين اختياريتين، والقيمة الافتراضية هي 1.step
لا يمكن أن يكون0
.إذا كانت القيم المعينة تلقائيا خارج نطاق نوع عمود الهوية، فسيفشل الاستعلام.
عند
ALWAYS
الاستخدام، لا يمكنك توفير القيم الخاصة بك لعمود الهوية.العمليات التالية غير مدعومة:
PARTITIONED BY
عمود هويةUPDATE
عمود هوية
إشعار
يؤدي الإعلان عن عمود هوية في جدول Delta إلى تعطيل المعاملات المتزامنة. استخدم أعمدة الهوية فقط في حالات الاستخدام حيث لا تكون عمليات الكتابة المتزامنة إلى الجدول الهدف مطلوبة.
default_expression الافتراضي
ينطبق على: Databricks SQL Databricks Runtime 11.3 LTS وما فوق
DEFAULT
تعريف قيمة للعمود الذي يتم استخدامه فيINSERT
،UPDATE
و، وعندماMERGE ... INSERT
لا يتم تحديد العمود.إذا لم يتم
DEFAULT NULL
تحديد أي افتراضي، يتم تطبيق للأعمدة التي تقبل القيم الخالية.default_expression
قد تتكون من القيم الحرفية، ووظائف SQL المضمنة أو عوامل التشغيل باستثناء:- دالات التجميع
- دوال النافذة التحليلية
- دالات نافذة تحديد المرتبة
- دالات مولد قيم الجدول
كما
default_expression
يجب ألا يحتوي على أي استعلام فرعي.DEFAULT
معتمد للمصادرCSV
JSON
PARQUET
و و.ORC
column_comment التعليق
سلسلة حرفية لوصف العمود.
-
إضافة مفتاح أساسي أو قيد مفتاح خارجي إلى العمود في جدول Delta Lake.
القيود غير معتمدة للجداول في الكتالوج
hive_metastore
.لإضافة قيد فحص إلى جدول Delta Lake، استخدم ALTER TABLE.
-
ينطبق على: Databricks SQL Databricks Runtime 12.2 LTS وما فوق كتالوج Unity فقط
إضافة دالة قناع عمود إلى إخفاء البيانات الحساسة. تتلقى جميع الاستعلامات اللاحقة من هذا العمود نتيجة تقييم تلك الدالة فوق العمود بدلا من القيمة الأصلية للعمود. يمكن أن يكون هذا مفيدا لأغراض التحكم في الوصول الدقيقة حيث يمكن للدالة فحص الهوية أو عضويات المجموعة للمستخدم الذي يستدعي لتحديد ما إذا كان سيتم تنقيح القيمة.
-
إضافة مفتاح أساسي إعلامي أو قيود مفتاح خارجي إعلامية إلى جدول Delta Lake.
القيود الرئيسية غير معتمدة للجداول في الكتالوج
hive_metastore
.لإضافة قيد فحص إلى جدول Delta Lake، استخدم ALTER TABLE.
-
استخدام data_source
data_source
يمكن أن يكون إما تنسيق ملف أو مصدر بيانات JDBC متحد.يجب أن يكون تنسيق الملف واحدا مما يلي:
AVRO
BINARYFILE
CSV
DELTA
JSON
ORC
PARQUET
TEXT
بالنسبة لأي تنسيق ملف آخر غير
DELTA
ذلك، يجب عليك أيضا تحديدLOCATION
ما لم يكن كتالوج الجدول هوhive_metastore
.يتم دعم مصادر JDBC الموحدة التالية:
POSTGRESQL
SQLSERVER
MYSQL
BIGQUERY
NETSUITE
ORACLE
REDSHIFT
SNOWFLAKE
SQLDW
SYNAPSE
SALESFORCE
SALESFORCE_DATA_CLOUD
TERADATA
WORKDAY_RAAS
MONGODB
عند تحديد مصدر JDBC متحد، يجب عليك أيضا تحديد العبارة
OPTIONS
بمعلومات الاتصال الضرورية. راجع قواعد بيانات الاستعلام باستخدام JDBC لمزيد من المعلومات حول الاستعلام عن مصادر البيانات الموحدة.يتم دعم تنسيقات الملفات الإضافية التالية لاستخدامها للجدول في Databricks Runtime:
JDBC
LIBSVM
- اسم فئة مؤهل بالكامل لتنفيذ مخصص ل
org.apache.spark.sql.sources.DataSourceRegister
.
إذا
USING
تم حذفه، يكون الافتراضي هوDELTA
.ينطبق ما يلي على: Databricks Runtime
HIVE
معتمد لإنشاء جدول Hive SerDe في Databricks Runtime. يمكنك تحديد الخاص ب Hivefile_format
واستخدامrow_format
OPTIONS
عبارة ، وهو مخطط سلسلة غير حساس لحالة الأحرف. وهيoption_keys
:FILEFORMAT
INPUTFORMAT
OUTPUTFORMAT
SERDE
FIELDDELIM
ESCAPEDELIM
MAPKEYDELIM
LINEDELIM
table_clauses
تحديد الموقع والتقسيم وتكوين المجموعات والخيارات والتعليقات والخصائص المعرفة من قبل المستخدم للجدول الجديد اختياريا. يمكن تحديد كل عبارة فرعية مرة واحدة فقط.
-
عبارة اختيارية لتقسيم الجدول حسب مجموعة فرعية من الأعمدة.
إشعار
إذا لم تقم بتعريف جدول Delta، يتم وضع أعمدة التقسيم في نهاية الجدول، حتى إذا تم تعريفها مسبقا في مواصفات العمود. ضع في اعتبارك استخدام
CLUSTER BY
بدلا منPARTITIONED BY
لجداول Delta. -
ينطبق على: Databricks SQL Databricks Runtime 13.3 والإحدث
عبارة اختيارية لمجموعة جدول Delta بواسطة مجموعة فرعية من الأعمدة. لمجموعة الجداول الأخرى، استخدم
clustered_by_clause
.لا يمكن دمج تكوين أنظمة المجموعات السائلة في Delta Lake مع
PARTITIONED BY
. clustered_by_clause
قم بشكل اختياري بتجميع الجدول أو كل قسم في عدد ثابت من مستودعات التجزئة باستخدام مجموعة فرعية من الأعمدة.
التجميع غير معتمد لجداول Delta Lake.
متفاوت المسافات حسب
تحديد مجموعة الأعمدة التي يتم من خلالها تجميع كل قسم، أو الجدول إذا لم يتم تحديد تقسيم.
-
معرف يشير إلى
column_identifier
في الجدول. إذا قمت بتحديد أكثر من عمود واحد، يجب ألا تكون هناك تكرارات. نظرا لأن التجميع يعمل على مستوى القسم، يجب عدم تسمية عمود القسم أيضا ك عمود نظام مجموعة.
-
تم الفرز حسب
يحافظ اختياريا على ترتيب فرز للصفوف في مستودع.
sort_column
عمود لفرز المستودع حسبه. يجب ألا يكون العمود عمود قسم. يجب أن تكون أعمدة الفرز فريدة.
ASC أو DESC
يحدد اختياريا ما إذا كان
sort_column
يتم فرزه بترتيب تصاعدي (ASC
) أو تنازلي (DESC
). القيم الافتراضية هيASC
.
إلى مستودعات num_buckets
قيمة INTEGER الحرفية التي تحدد عدد المستودعات التي يتم فيها تقسيم كل قسم (أو الجدول إذا لم يتم تحديد تقسيم).
مسار الموقع [ مع ( بيانات الاعتماد credential_name ) ]
مسار اختياري إلى الدليل حيث يتم تخزين بيانات الجدول، والذي يمكن أن يكون مسارا على التخزين الموزع.
path
يجب أن تكون قيمة STRING حرفية. إذا لم تحدد أي موقع، اعتبارmanaged table
الجدول وAzure Databricks موقع جدول افتراضي.يؤدي تحديد موقع إلى جعل الجدول جدولا خارجيا.
بالنسبة للجداول غير الموجودة في الكتالوج
hive_metastore
، يجب حماية الجدولpath
بموقع خارجي ما لم يتم تحديد بيانات اعتماد تخزين صالحة.لا يمكنك إنشاء جداول خارجية في مواقع تتداخل مع موقع الجداول المدارة.
بالنسبة لجدول Delta Lake، يتم توريث تكوين الجدول من
LOCATION
إذا كانت البيانات موجودة. لذلك، إذا تم تحديد أيTBLPROPERTIES
من عباراتtable_specification
أو أوPARTITIONED BY
لجداول Delta Lake، فيجب أن تتطابق تماما مع بيانات موقع Delta Lake.-
تعيين خيار جدول معرف من قبل مستخدم واحد أو أكثر أو إعادة تعيينه.
table_comment التعليق
سلسلة حرفية لوصف الجدول.
-
تعيين خاصية واحدة أو أكثر من الخصائص المعرفة من قبل المستخدم اختياريا.
عبارة WITH ROW FILTER
ينطبق على: Databricks SQL Databricks Runtime 12.2 LTS وما فوق كتالوج Unity فقط
إضافة دالة عامل تصفية صف إلى الجدول. ستتلقى جميع الاستعلامات اللاحقة من هذا الجدول مجموعة فرعية من الصفوف حيث يتم تقييم الدالة إلى TRUE منطقي. يمكن أن يكون هذا مفيدا لأغراض التحكم في الوصول الدقيقة حيث يمكن للدالة فحص الهوية أو عضويات المجموعة للمستخدم الذي يستدعي لتحديد ما إذا كان سيتم تصفية صفوف معينة.
-
-
تملأ هذه العبارة الاختيارية الجدول باستخدام البيانات من
query
. عند تحديدquery
يجب عدم تحديدtable_specification
أيضا . مخطط الجدول مشتق من الاستعلام.لاحظ أن Azure Databricks يحل محل مصدر البيانات الأساسي ببيانات استعلام الإدخال، للتأكد من إنشاء الجدول يحتوي على نفس البيانات تماما مثل استعلام الإدخال.
امثله
-- Creates a Delta table
> CREATE TABLE student (id INT, name STRING, age INT);
-- Use data from another table
> CREATE TABLE student_copy AS SELECT * FROM student;
-- Creates a CSV table from an external directory
> CREATE TABLE student USING CSV LOCATION '/path/to/csv_files';
-- Specify table comment and properties
> CREATE TABLE student (id INT, name STRING, age INT)
COMMENT 'this is a comment'
TBLPROPERTIES ('foo'='bar');
-- Specify table comment and properties with different clauses order
> CREATE TABLE student (id INT, name STRING, age INT)
TBLPROPERTIES ('foo'='bar')
COMMENT 'this is a comment';
-- Create partitioned table
> CREATE TABLE student (id INT, name STRING, age INT)
PARTITIONED BY (age);
-- Create a table with a generated column
> CREATE TABLE rectangles(a INT, b INT,
area INT GENERATED ALWAYS AS (a * b));
-- Create an external table connected to Oracle
> CREATE TABLE IF NOT EXISTS ora_tab
USING ORACLE
OPTIONS (
url '<jdbc-url>',
dbtable '<table-name>',
user '<username>',
password '<password>'
);
> SELECT * FROM ora_tab;