إنشاء جداول في كتالوج Unity

تقدم هذه المقالة مفهوم الجداول المدارة والخارجية في كتالوج Unity وتصف كيفية إنشاء جداول في كتالوج Unity.

إشعار

عند إنشاء جدول، تأكد من الرجوع إلى كتالوج يحكمه كتالوج Unity أو تعيين الكتالوج الافتراضي إلى كتالوج يحكمه كتالوج Unity. راجع إدارة الكتالوج الافتراضي.

يظهر الكتالوج في مستكشف الكتالوج hive_metastore ولكنه لا يعتبر محكوما ب كتالوج Unity. تتم إدارته بواسطة مخزن بيانات Hive الخاص بمساحة عمل Azure Databricks. تخضع جميع الكتالوجات الأخرى المدرجة إلى كتالوج Unity.

يمكنك استخدام واجهة ترقية جدول كتالوج Unity لترقية الجداول الموجودة المسجلة في Hive metastore إلى كتالوج Unity. راجع ترقية جداول Hive وطرق العرض إلى كتالوج Unity.

الجداول المدارة

الجداول المدارة هي الطريقة الافتراضية لإنشاء جداول في كتالوج Unity. يدير كتالوج Unity دورة الحياة وتخطيط الملف لهذه الجداول. يجب عدم استخدام أدوات خارج Azure Databricks لمعالجة الملفات في هذه الجداول مباشرة.

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

تستخدم الجداول المدارة دائما تنسيق جدول Delta .

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

الجداول الخارجية

الجداول الخارجية هي جداول يتم تخزين بياناتها خارج موقع التخزين المدار المحدد لمخزن metastore أو الكتالوج أو المخطط. استخدم الجداول الخارجية فقط عندما تحتاج إلى الوصول المباشر إلى البيانات خارج مجموعات Azure Databricks أو مستودعات Databricks SQL.

عند التشغيل DROP TABLE على جدول خارجي، لا يحذف كتالوج Unity البيانات الأساسية. لإفلات جدول، يجب أن تكون مالكه. يمكنك إدارة الامتيازات على الجداول الخارجية واستخدامها في الاستعلامات بنفس الطريقة التي تدير بها الجداول المدارة. لإنشاء جدول خارجي باستخدام SQL، حدد مسارا في العبارة LOCATION الخاصة بك CREATE TABLE . يمكن للجداول الخارجية استخدام تنسيقات الملفات التالية:

  • دلتا
  • CSV
  • JSON
  • AVRO
  • PARQUET
  • ORC
  • TEXT

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

لمعرفة المزيد، راجع إنشاء جدول خارجي.

المتطلبات

يجب أن يكون لديك الامتياز CREATE TABLE على المخطط الذي تريد إنشاء الجدول فيه، بالإضافة USE SCHEMA إلى الامتياز على المخطط والامتياز USE CATALOG على الكتالوج الأصل.

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

إنشاء جدول مدار

لإنشاء جدول مدار، قم بتشغيل أمر SQL التالي. العناصر الموجودة بين قوسين اختيارية. استبدل قيم العنصر النائب:

  • <catalog-name>: اسم الكتالوج الذي سيحتوي على الجدول..

    لا يمكن أن يكون هذا الكتالوج hive_metastore الذي يتم إنشاؤه تلقائيا ل Hive metastore المقترن بمساحة عمل Azure Databricks. يمكنك إسقاط اسم الكتالوج إذا كنت تقوم بإنشاء الجدول في الكتالوج الافتراضي لمساحة العمل.

  • <schema-name>: اسم المخطط الذي سيحتوي على الجدول..

  • <table-name>: اسم للجدول.

  • <column-specification>: الاسم ونوع البيانات لكل عمود.

SQL

CREATE TABLE <catalog-name>.<schema-name>.<table-name>
(
  <column-specification>
);

Python

spark.sql("CREATE TABLE <catalog-name>.<schema-name>.<table-name> "
  "("
  "  <column-specification>"
  ")")

R

library(SparkR)

sql(paste("CREATE TABLE <catalog-name>.<schema-name>.<table-name> ",
  "(",
  "  <column-specification>",
  ")",
  sep = ""))

Scala

spark.sql("CREATE TABLE <catalog-name>.<schema-name>.<table-name> " +
  "(" +
  "  <column-specification>" +
  ")")

يمكنك أيضا إنشاء جدول مدار باستخدام موفر Databricks Terraform databricks_table. يمكنك استرداد قائمة بالأسماء الكاملة للجدول باستخدام databricks_tables.

على سبيل المثال، لإنشاء الجدول main.default.department وإدراج خمسة صفوف فيه:

SQL

CREATE TABLE main.default.department
(
  deptcode  INT,
  deptname  STRING,
  location  STRING
);

INSERT INTO main.default.department VALUES
  (10, 'FINANCE', 'EDINBURGH'),
  (20, 'SOFTWARE', 'PADDINGTON'),
  (30, 'SALES', 'MAIDSTONE'),
  (40, 'MARKETING', 'DARLINGTON'),
  (50, 'ADMIN', 'BIRMINGHAM');

Python

spark.sql("CREATE TABLE main.default.department "
  "("
  "  deptcode  INT,"
  "  deptname  STRING,"
  "  location  STRING"
  ")"
  "INSERT INTO main.default.department VALUES "
  "  (10, 'FINANCE', 'EDINBURGH'),"
  "  (20, 'SOFTWARE', 'PADDINGTON'),"
  "  (30, 'SALES', 'MAIDSTONE'),"
  "  (40, 'MARKETING', 'DARLINGTON'),"
  "  (50, 'ADMIN', 'BIRMINGHAM')")

R

library(SparkR)

sql(paste("CREATE TABLE main.default.department ",
  "(",
  "  deptcode  INT,",
  "  deptname  STRING,",
  "  location  STRING",
  ")",
  "INSERT INTO main.default.department VALUES ",
  "  (10, 'FINANCE', 'EDINBURGH'),",
  "  (20, 'SOFTWARE', 'PADDINGTON'),",
  "  (30, 'SALES', 'MAIDSTONE'),",
  "  (40, 'MARKETING', 'DARLINGTON'),",
  "  (50, 'ADMIN', 'BIRMINGHAM')",
  sep = ""))

Scala

spark.sql("CREATE TABLE main.default.department " +
  "(" +
  "  deptcode  INT," +
  "  deptname  STRING," +
  "  location  STRING" +
  ")" +
  "INSERT INTO main.default.department VALUES " +
  "  (10, 'FINANCE', 'EDINBURGH')," +
  "  (20, 'SOFTWARE', 'PADDINGTON')," +
  "  (30, 'SALES', 'MAIDSTONE')," +
  "  (40, 'MARKETING', 'DARLINGTON')," +
  "  (50, 'ADMIN', 'BIRMINGHAM')")

إسقاط جدول مدار

يجب أن تكون مالك الجدول لإفلات جدول. لإسقاط جدول مدار، قم بتشغيل أمر SQL التالي:

DROP TABLE IF EXISTS catalog_name.schema_name.table_name;

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

إنشاء جدول خارجي

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

  • تحتوي بيانات اعتماد التخزين على أسلوب مصادقة للوصول إلى موقع تخزين سحابي. لا تحتوي بيانات اعتماد التخزين على تعيين للمسار الذي تمنح الوصول إليه. يتم التحكم في الوصول إلى بيانات اعتماد التخزين لتحديد المستخدمين الذين يمكنهم استخدام بيانات الاعتماد.
  • يعين الموقع الخارجي بيانات اعتماد تخزين بمسار تخزين سحابي يمنح الوصول إليه. يمنح الموقع الخارجي الوصول فقط إلى مسار التخزين السحابي ومحتوياته. يتم التحكم في الوصول إلى المواقع الخارجية لتحديد المستخدمين الذين يمكنهم استخدامها. يتم استخدام موقع خارجي تلقائيا عندما يحتوي أمر SQL على عبارة LOCATION .

المتطلبات

لإنشاء جدول خارجي، يجب أن يكون لديك:

  • الامتياز CREATE EXTERNAL TABLE على موقع خارجي يمنح الوصول إلى LOCATION الذي تم الوصول إليه بواسطة الجدول الخارجي.
  • USE SCHEMA الإذن الموجود في المخطط الأصل للجدول.
  • USE CATALOG الإذن الموجود في الكتالوج الأصل للجدول.
  • CREATE TABLE الإذن الموجود في المخطط الأصل للجدول.

يتم تخزين المواقع الخارجية وبيانات اعتماد التخزين على مستوى metastore، بدلا من الكتالوج. لإنشاء بيانات اعتماد تخزين، يجب أن تكون مسؤول حساب أو تتمتع بالامتياز CREATE STORAGE CREDENTIAL . لإنشاء موقع خارجي، يجب أن تكون مسؤول metastore أو لديك الامتياز CREATE EXTERNAL LOCATION . راجع الاتصال إلى تخزين الكائنات السحابية باستخدام كتالوج Unity.

إنشاء جدول

استخدم أحد أمثلة الأوامر التالية في دفتر ملاحظات أو محرر استعلام SQL لإنشاء جدول خارجي.

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

في الأمثلة التالية، استبدل قيم العنصر النائب:

  • <catalog>: اسم الكتالوج الذي سيحتوي على الجدول.

    لا يمكن أن يكون هذا الكتالوج hive_metastore الذي يتم إنشاؤه تلقائيا ل Hive metastore المقترن بمساحة عمل Azure Databricks. يمكنك إسقاط اسم الكتالوج إذا كنت تقوم بإنشاء الجدول في الكتالوج الافتراضي لمساحة العمل.

  • <schema>: اسم المخطط الذي سيحتوي على الجدول.

  • <table-name>: اسم للجدول.

  • <column-specification>: الاسم ونوع البيانات لكل عمود.

  • <bucket-path>: المسار إلى مستودع التخزين السحابي حيث سيتم إنشاء الجدول.

  • <table-directory>: دليل حيث سيتم إنشاء الجدول. استخدم دليلا فريدا لكل جدول.

هام

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

SQL

CREATE TABLE <catalog>.<schema>.<table-name>
(
  <column-specification>
)
LOCATION 'abfss://<bucket-path>/<table-directory>';

Python

spark.sql("CREATE TABLE <catalog>.<schema>.<table-name> "
  "("
  "  <column-specification>"
  ") "
  "LOCATION 'abfss://<bucket-path>/<table-directory>'")

R

library(SparkR)

sql(paste("CREATE TABLE <catalog>.<schema>.<table-name> ",
  "(",
  "  <column-specification>",
  ") ",
  "LOCATION 'abfss://<bucket-path>/<table-directory>'",
  sep = ""))

Scala

spark.sql("CREATE TABLE <catalog>.<schema>.<table-name> " +
  "(" +
  "  <column-specification>" +
  ") " +
  "LOCATION 'abfss://<bucket-path>/<table-directory>'")

يتحقق كتالوج Unity من أن لديك الأذونات التالية:

  • CREATE EXTERNAL TABLE على الموقع الخارجي الذي يشير إلى مسار التخزين السحابي الذي تحدده.
  • CREATE TABLE على المخطط الأصل.
  • USE SCHEMA على المخطط الأصل.
  • USE CATALOG في الكتالوج الأصل.

إذا قمت بذلك، يتم إنشاء الجدول الخارجي. وإلا، يحدث خطأ ولا يتم إنشاء الجدول الخارجي.

إشعار

يمكنك بدلا من ذلك ترحيل جدول خارجي موجود في Hive metastore إلى كتالوج Unity دون تكرار بياناته. راجع ترقية جدول Hive واحد إلى جدول خارجي كتالوج Unity باستخدام معالج الترقية.

يمكنك أيضا إنشاء جدول خارجي باستخدام موفر Databricks Terraform databricks_table. يمكنك استرداد قائمة بالأسماء الكاملة للجدول باستخدام databricks_tables.

مثال على دفتر الملاحظات: إنشاء جداول خارجية

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

إنشاء جدول خارجي وإدارته في دفتر ملاحظات كتالوج Unity

الحصول على دفتر الملاحظات

إنشاء جدول من الملفات المخزنة في مستأجر السحابة

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

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

استكشاف محتويات الملفات

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

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

Sql

  1. سرد الملفات في مسار تخزين سحابي:

    LIST 'abfss://<path-to-files>';
    
  2. الاستعلام عن البيانات الموجودة في الملفات في مسار معين:

    SELECT * FROM <format>.`abfss://<path-to-files>`;
    

Python

  1. سرد الملفات في مسار تخزين سحابي:

    display(spark.sql("LIST 'abfss://<path-to-files>'"))
    
  2. الاستعلام عن البيانات الموجودة في الملفات في مسار معين:

    display(spark.read.load("abfss://<path-to-files>"))
    

R

  1. سرد الملفات في مسار تخزين سحابي:

    library(SparkR)
    
    display(sql("LIST 'abfss://<path-to-files>'"))
    
  2. الاستعلام عن البيانات الموجودة في الملفات في مسار معين:

    library(SparkR)
    
    display(loadDF("abfss://<path-to-files>"))
    

Scala

  1. سرد الملفات في مسار تخزين سحابي:

    display(spark.sql("LIST 'abfss://<path-to-files>'"))
    
  2. الاستعلام عن البيانات الموجودة في الملفات في مسار معين:

    display(spark.read.load("abfss://<path-to-files>"))
    

إنشاء جدول من الملفات

اتبع الأمثلة الواردة في هذا القسم لإنشاء جدول جديد وملئه بملفات البيانات على مستأجر السحابة.

إشعار

يمكنك بدلا من ذلك ترحيل جدول خارجي موجود في Hive metastore إلى كتالوج Unity دون تكرار بياناته. راجع ترقية جدول Hive واحد إلى جدول خارجي كتالوج Unity باستخدام معالج الترقية.

هام

  • عند إنشاء جدول باستخدام هذا الأسلوب، تتم قراءة مسار التخزين مرة واحدة فقط، لمنع تكرار السجلات. إذا كنت تريد إعادة قراءة محتويات الدليل، يجب إسقاط الجدول وإعادة إنشائه. بالنسبة لجدول موجود، يمكنك إدراج سجلات من مسار تخزين.
  • لا يمكن أيضا استخدام مسار المستودع حيث تقوم بإنشاء جدول لقراءة ملفات البيانات أو كتابتها.
  • تتم قراءة الملفات الموجودة في الدليل الدقيق فقط؛ القراءة غير متكررة.
  • يجب أن يكون لديك الأذونات التالية:
    • USE CATALOG على الكتالوج الأصل وعلى USE SCHEMA المخطط.
    • CREATE TABLE على المخطط الأصل.
    • READ FILES على الموقع الخارجي المقترن بمسار المستودع حيث توجد الملفات، أو مباشرة على بيانات اعتماد التخزين إذا كنت لا تستخدم موقعا خارجيا.
    • إذا كنت تقوم بإنشاء جدول خارجي، فستحتاج إلى CREATE EXTERNAL TABLE مسار المستودع حيث سيتم إنشاء الجدول.

لإنشاء جدول مدار جديد وملئه بالبيانات في التخزين السحابي، استخدم الأمثلة التالية.

SQL

CREATE TABLE <catalog>.<schema>.<table-name>
(
  <column-specification>
)
SELECT * from <format>.`abfss://<path-to-files>`;

Python

spark.sql("CREATE TABLE <catalog>.<schema>.<table-name> "
  "( "
  "  <column-specification> "
  ") "
  "SELECT * from <format>.`abfss://<path-to-files>`")

R

library(SparkR)

sql(paste("CREATE TABLE <catalog>.<schema>.<table-name> ",
  "( ",
  "  <column-specification> ",
  ") ",
  "SELECT * from <format>.`abfss://<path-to-files>`",
  sep = ""))

Scala

spark.sql("CREATE TABLE <catalog>.<schema>.<table-name> " +
  "( " +
  "  <column-specification> " +
  ") " +
  "SELECT * from <format>.`abfss://<path-to-files>`")

لإنشاء جدول خارجي وملئه بالبيانات في التخزين السحابي، أضف عبارة LOCATION :

SQL

CREATE TABLE <catalog>.<schema>.<table-name>
(
    <column-specification>
)
USING <format>
LOCATION 'abfss://<table-location>'
SELECT * from <format>.`abfss://<path-to-files>`;

Python

spark.sql("CREATE TABLE <catalog>.<schema>.<table-name> "
  "( "
  "  <column-specification> "
  ") "
  "USING <format> "
  "LOCATION 'abfss://<table-location>' "
  "SELECT * from <format>.`abfss://<path-to-files>`")

R

library(SparkR)

sql(paste("CREATE TABLE <catalog>.<schema>.<table-name> ",
  "( ",
  "  <column-specification> ",
  ") ",
  "USING <format> ",
  "LOCATION 'abfss://<table-location>' ",
  "SELECT * from <format>.`abfss://<path-to-files>`",
  sep = ""))

Scala

spark.sql("CREATE TABLE <catalog>.<schema>.<table-name> " +
  "( " +
  "  <column-specification> " +
  ") " +
  "USING <format> " +
  "LOCATION 'abfss://<table-location>' " +
  "SELECT * from <format>.`abfss://<path-to-files>`")

إدراج سجلات من مسار في جدول موجود

لإدراج سجلات من مسار مستودع في جدول موجود، استخدم COPY INTO الأمر . في الأمثلة التالية، استبدل قيم العنصر النائب:

  • <catalog>: اسم الكتالوج الأصل للجدول.
  • <schema>: اسم المخطط الأصل للجدول.
  • <path-to-files>: مسار المستودع الذي يحتوي على ملفات البيانات.
  • <format>: تنسيق الملفات، على سبيل المثال delta.
  • <table-location>: مسار المستودع حيث سيتم إنشاء الجدول.

هام

  • عند إدراج سجلات في جدول باستخدام هذا الأسلوب، تتم قراءة مسار المستودع الذي توفره مرة واحدة فقط، لمنع تكرار السجلات.
  • لا يمكن أيضا استخدام مسار المستودع حيث تقوم بإنشاء جدول لقراءة ملفات البيانات أو كتابتها.
  • تتم قراءة الملفات الموجودة في الدليل الدقيق فقط؛ القراءة غير متكررة.
  • يجب أن يكون لديك الأذونات التالية:
    • USE CATALOG على الكتالوج الأصل وعلى USE SCHEMA المخطط.
    • MODIFY على الطاولة.
    • READ FILES على الموقع الخارجي المقترن بمسار المستودع حيث توجد الملفات، أو مباشرة على بيانات اعتماد التخزين إذا كنت لا تستخدم موقعا خارجيا.
    • لإدراج سجلات في جدول خارجي، تحتاج إلى CREATE EXTERNAL TABLE مسار المستودع حيث يوجد الجدول.

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

SQL

COPY INTO <catalog>.<schema>.<table>
FROM (
  SELECT *
  FROM 'abfss://<path-to-files>'
)
FILEFORMAT = <format>;

Python

spark.sql("COPY INTO <catalog>.<schema>.<table> "
  "FROM ( "
  "  SELECT * "
  "  FROM 'abfss://<path-to-files>' "
  ") "
  "FILEFORMAT = <format>")

R

library(SparkR)

sql(paste("COPY INTO <catalog>.<schema>.<table> ",
  "FROM ( ",
  "  SELECT * ",
  "  FROM 'abfss://<path-to-files>' ",
  ") ",
  "FILEFORMAT = <format>",
  sep = ""))

Scala

spark.sql("COPY INTO <catalog>.<schema>.<table> " +
  "FROM ( " +
  "  SELECT * " +
  "  FROM 'abfss://<path-to-files>' " +
  ") " +
  "FILEFORMAT = <format>")

لإدراج في جدول خارجي، أضف عبارة LOCATION :

SQL

COPY INTO <catalog>.<schema>.<table>
LOCATION 'abfss://<table-location>'
FROM (
  SELECT *
  FROM 'abfss://<path-to-files>'
)
FILEFORMAT = <format>;

Python

spark.sql("COPY INTO <catalog>.<schema>.<table> "
  "LOCATION 'abfss://<table-location>' "
  "FROM ( "
  "  SELECT * "
  "  FROM 'abfss://<path-to-files>' "
  ") "
  "FILEFORMAT = <format>")

R

library(SparkR)

sql(paste("COPY INTO <catalog>.<schema>.<table> ",
  "LOCATION 'abfss://<table-location>' ",
  "FROM ( ",
  "  SELECT * ",
  "  FROM 'abfss://<path-to-files>' ",
  ") ",
  "FILEFORMAT = <format>",
  sep = ""))

Scala

spark.sql("COPY INTO <catalog>.<schema>.<table> " +
  "LOCATION 'abfss://<table-location>' " +
  "FROM ( " +
  "  SELECT * " +
  "  FROM 'abfss://<path-to-files>' " +
  ") " +
  "FILEFORMAT = <format>")

إضافة تعليقات إلى جدول

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

الخطوات التالية