هندسة الميزات في كتالوج Unity

توضح هذه الصفحة كيفية إنشاء جداول الميزات والعمل معها في كتالوج Unity.

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

المتطلبات

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

تثبيت هندسة الميزات في عميل Python كتالوج Unity

توفر هندسة الميزات في كتالوج Unity عميل FeatureEngineeringClientPython . الفئة متوفرة على PyPI مع الحزمة databricks-feature-engineering ويتم تثبيتها مسبقا في Databricks Runtime 13.2 ML وما فوق. إذا كنت تستخدم وقت تشغيل Databricks غير ML، فستحتاج إلى تثبيت العميل يدويا. استخدم مصفوفة التوافق للعثور على الإصدار الصحيح لإصدار Databricks Runtime.

%pip install databricks-feature-engineering

dbutils.library.restartPython()

إنشاء كتالوج ومخطط لجداول الميزات في كتالوج Unity

يجب إنشاء كتالوج جديد أو استخدام كتالوج موجود لجداول الميزات.

لإنشاء كتالوج جديد، يجب أن يكون لديك الامتياز CREATE CATALOG على metastore.

CREATE CATALOG IF NOT EXISTS <catalog-name>

لاستخدام كتالوج موجود، يجب أن يكون لديك الامتياز USE CATALOG في الكتالوج.

USE CATALOG <catalog-name>

يجب تخزين جداول الميزات في كتالوج Unity في مخطط. لإنشاء مخطط جديد في الكتالوج، يجب أن يكون لديك الامتياز CREATE SCHEMA على الكتالوج.

CREATE SCHEMA IF NOT EXISTS <schema-name>

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

إشعار

يمكنك استخدام جدول Delta موجود في كتالوج Unity كجدول ميزات. راجع استخدام جدول Delta موجود في كتالوج Unity كجدول ميزات.

يمكنك أيضا استخدام جدول Delta Live موجود في كتالوج Unity كجدول ميزات. راجع استخدام جدول دفق موجود أو طريقة عرض مجسدة تم إنشاؤها بواسطة مسار Delta Live Tables كجدول ميزات.

جداول الميزات في كتالوج Unity هي جداول دلتا أو جداول Delta Live التي يديرها كتالوج Unity. يجب أن تحتوي جداول الميزات على مفتاح أساسي. يحتوي اسم جدول الميزات في كتالوج Unity على بنية من ثلاثة مستويات، <catalog-name>.<schema-name>.<table-name>.

يمكنك استخدام Databricks SQL أو Python FeatureEngineeringClient لإنشاء جداول دلتا للميزات في كتالوج Unity. يمكنك استخدام خطوط أنابيب Delta Live Tables لإنشاء ميزة Delta Live Tables في كتالوج Unity.

Databricks sql

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

CREATE TABLE ml.recommender_system.customer_features (
  customer_id int NOT NULL,
  feat1 long,
  feat2 varchar(100),
  CONSTRAINT customer_features_pk PRIMARY KEY (customer_id)
);

لإنشاء جدول ميزات سلسلة زمنية، أضف عمودا زمنيا ك عمود مفتاح أساسي وحدد الكلمة الأساسية TIMESERIES. تتطلب الكلمة الأساسية TIMESERIES Databricks Runtime 13.3 LTS أو أعلى.

CREATE TABLE ml.recommender_system.customer_features (
  customer_id int NOT NULL,
  ts timestamp NOT NULL,
  feat1 long,
  feat2 varchar(100),
  CONSTRAINT customer_features_pk PRIMARY KEY (customer_id, ts TIMESERIES)
);

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

Python

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

  1. اكتب وظائف Python لحساب الميزات. يجب أن يكون إخراج كل وظيفة هو Apache Spark DataFrame مع مفتاح أساسي فريد. يمكن أن يتكون المفتاح الأساسي من عمود واحد أو أكثر.
  2. إنشاء جدول ميزات عن طريق إنشاء FeatureEngineeringClient مثيل واستخدام create_table.
  3. قم بتعبئة جدول الميزات باستخدام write_table.
from databricks.feature_engineering import FeatureEngineeringClient

fe = FeatureEngineeringClient()

# Prepare feature DataFrame
def compute_customer_features(data):
  ''' Feature computation code returns a DataFrame with 'customer_id' as primary key'''
  pass

customer_features_df = compute_customer_features(df)

# Create feature table with `customer_id` as the primary key.
# Take schema from DataFrame output by compute_customer_features
customer_feature_table = fe.create_table(
  name='ml.recommender_system.customer_features',
  primary_keys='customer_id',
  schema=customer_features_df.schema,
  description='Customer features'
)

# An alternative is to use `create_table` and specify the `df` argument.
# This code automatically saves the features to the underlying Delta table.

# customer_feature_table = fe.create_table(
#  ...
#  df=customer_features_df,
#  ...
# )

# To use a composite primary key, pass all primary key columns in the create_table call

# customer_feature_table = fe.create_table(
#   ...
#   primary_keys=['customer_id', 'date'],
#   ...
# )

# To create a time series table, set the timeseries_columns argument

# customer_feature_table = fe.create_table(
#   ...
#   primary_keys=['customer_id', 'date'],
#   timeseries_columns='date',
#   ...
# )

جداول Delta المباشرة

إشعار

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

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

CREATE LIVE TABLE customer_features (
  customer_id int NOT NULL,
  feat1 long,
  feat2 varchar(100),
  CONSTRAINT customer_features_pk PRIMARY KEY (customer_id)
) AS SELECT * FROM ...;

لإنشاء جدول ميزات سلسلة زمنية، أضف عمودا زمنيا ك عمود مفتاح أساسي وحدد الكلمة الأساسية TIMESERIES.

CREATE LIVE TABLE customer_features (
  customer_id int NOT NULL,
  ts timestamp NOT NULL,
  feat1 long,
  feat2 varchar(100),
  CONSTRAINT customer_features_pk PRIMARY KEY (customer_id, ts TIMESERIES)
) AS SELECT * FROM ...;

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

قيود الجدول لجداول Delta Live معتمدة فقط في SQL. لتعيين المفاتيح الأساسية لجداول Delta Live التي تم الإعلان عنها في Python، راجع استخدام جدول دفق موجود أو طريقة عرض مجسدة تم إنشاؤها بواسطة مسار Delta Live Tables كجدول ميزات.

استخدام جدول Delta موجود في كتالوج Unity كجدول ميزات

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

إشعار

  • يمكن لمالك الجدول فقط الإعلان عن قيود المفتاح الأساسي. يتم عرض اسم المالك في صفحة تفاصيل الجدول في مستكشف الكتالوج.
  • تحقق من أن نوع البيانات في جدول Delta مدعوم بواسطة هندسة الميزات في كتالوج Unity. راجع أنواع البيانات المدعومة.
  • تتطلب الكلمة الأساسية TIMESERIES Databricks Runtime 13.3 LTS أو أعلى.

إذا لم يكن جدول Delta موجود قيد مفتاح أساسي، يمكنك إنشاء جدول على النحو التالي:

  1. تعيين أعمدة المفتاح الأساسي إلى NOT NULL. لكل عمود مفتاح أساسي، قم بتشغيل:

    ALTER TABLE <full_table_name> ALTER COLUMN <pk_col_name> SET NOT NULL
    
  2. قم بتغيير الجدول لإضافة قيد المفتاح الأساسي:

    ALTER TABLE <full_table_name> ADD CONSTRAINT <pk_name> PRIMARY KEY(pk_col1, pk_col2, ...)
    

    pk_name هو اسم قيد المفتاح الأساسي. حسب الاصطلاح، يمكنك استخدام اسم الجدول (بدون مخطط وكتالوج) مع لاحقة _pk . على سبيل المثال، سيكون customer_features_pk جدول بالاسم "ml.recommender_system.customer_features" كاسم لقيد المفتاح الأساسي الخاص به.

    لجعل الجدول جدول ميزات سلسلة زمنية، حدد الكلمة الأساسية TIMESERIES على أحد أعمدة المفتاح الأساسي، كما يلي:

    ALTER TABLE <full_table_name> ADD CONSTRAINT <pk_name> PRIMARY KEY(pk_col1 TIMESERIES, pk_col2, ...)
    

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

استخدام جدول دفق موجود أو طريقة عرض مجسدة تم إنشاؤها بواسطة مسار Delta Live Tables كجدول ميزات

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

إشعار

  • توجد قيود الجدول في Delta Live Tables في المعاينة العامة. يجب تشغيل أمثلة التعليمات البرمجية التالية باستخدام قناة معاينة Delta Live Tables.
  • يمكن لمالك الجدول فقط الإعلان عن قيود المفتاح الأساسي. يتم عرض اسم المالك في صفحة تفاصيل الجدول في مستكشف الكتالوج.
  • تحقق من أن نوع البيانات في جدول Delta مدعوم بواسطة هندسة الميزات في كتالوج Unity. راجع أنواع البيانات المدعومة.

إضافة مفتاح أساسي إلى جدول دفق أو طريقة عرض مجسدة تم إنشاؤها باستخدام SQL

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

يجب أن تكون التعليمات البرمجية مشابهة للآتي:

CREATE OR REFRESH MATERIALIZED VIEW existing_live_table(
  id int NOT NULL PRIMARY KEY,
  ...
) AS SELECT ...

إضافة مفتاح أساسي إلى جدول دفق أو طريقة عرض مجسدة تم إنشاؤها باستخدام Python

لإنشاء مفاتيح أساسية لجدول دفق موجود أو طريقة عرض مجسدة تم إنشاؤها بواسطة مسار Delta Live Tables، يجب استخدام SQL، حتى إذا تم إنشاء جدول البث أو طريقة العرض المجسدة باستخدام Python. إنشاء دفتر ملاحظات SQL جديد لتعريف جدول دفق جديد أو طريقة عرض مجسدة تقرأ من القائمة الموجودة. ثم قم بتشغيل دفتر الملاحظات كخطوة من مسار Delta Live Tables الموجود أو في مسار جديد.

يجب أن يتضمن دفتر ملاحظات SQL الجديد تعليمات برمجية مشابهة للآتي:

CREATE OR REFRESH MATERIALIZED VIEW new_live_table_with_constraint(
  id int NOT NULL PRIMARY KEY,
  ...
) AS SELECT * FROM existing_live_table

التحكم في الوصول إلى جداول الميزات في كتالوج Unity

تتم إدارة التحكم في الوصول لجداول الميزات في كتالوج Unity بواسطة كتالوج Unity. راجع امتيازات كتالوج Unity.

تحديث جدول ميزات في كتالوج Unity

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

يجب عدم تحديث بيانات تعريف جدول الميزات التالية:

  • المفتاح الأساسي.
  • مفتاح التقسيم⁧
  • اسم ميزة موجودة أو نوع بياناتها.

سيؤدي تغييرها إلى تعطل مسارات انتقال البيانات من الخادم التي تستخدم ميزات للتدريب وتقديم النماذج.

إضافة ميزات جديدة إلى جدول ميزات موجود في كتالوج Unity

يمكنك إضافة ميزات جديدة إلى جدول ميزات موجود بإحدى طريقتين:

  • قم بتحديث دالة حساب الميزة الموجودة وتشغيلها write_table باستخدام DataFrame الذي تم إرجاعه. يحدث هذا مخطط جدول الميزات ويدمج قيم الميزات الجديدة استنادا إلى المفتاح الأساسي.
  • إنشاء دالة حساب ميزة جديدة لحساب قيم الميزات الجديدة. يجب أن تحتوي DataFrame التي تم إرجاعها بواسطة دالة الحساب الجديدة هذه على المفاتيح الأساسية ومفاتيح الأقسام لجداول الميزات (إذا تم تعريفها). قم بتشغيل write_table مع DataFrame لكتابة الميزات الجديدة إلى جدول الميزات الموجود، باستخدام نفس المفتاح الأساسي.

تحديث صفوف معينة فقط في جدول الميزات

استخدم mode = "merge" في write_table. تظل الصفوف التي لا يوجد مفتاحها الأساسي في DataFrame المرسلة write_table في الاستدعاء دون تغيير.

from databricks.feature_engineering import FeatureEngineeringClient
fe = FeatureEngineeringClient()
fe.write_table(
  name='ml.recommender_system.customer_features',
  df = customer_features_df,
  mode = 'merge'
)

جدولة مهمة لتحديث جدول ميزات

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

تستخدم mode='merge'التعليمات البرمجية لتحديث جدول الميزات ، كما هو موضح في المثال التالي.

from databricks.feature_engineering import FeatureEngineeringClient
fe = FeatureEngineeringClient()

customer_features_df = compute_customer_features(data)

fe.write_table(
  df=customer_features_df,
  name='ml.recommender_system.customer_features',
  mode='merge'
)

تخزين القيم السابقة للميزات اليومية

تعريف جدول ميزات باستخدام مفتاح أساسي مركب. قم بتضمين التاريخ في المفتاح الأساسي. على سبيل المثال، لجدول ميزة customer_features، قد تستخدم مفتاحا أساسيا مركبا (date، customer_idو) ومفتاح date قسم للقراءات الفعالة.

Databricks sql

CREATE TABLE ml.recommender_system.customer_features (
  customer_id int NOT NULL,
  `date` date NOT NULL,
  feat1 long,
  feat2 varchar(100),
  CONSTRAINT customer_features_pk PRIMARY KEY (`date`, customer_id)
)
PARTITIONED BY (`date`)
COMMENT "Customer features";

Python

from databricks.feature_engineering import FeatureEngineeringClient
fe = FeatureEngineeringClient()
fe.create_table(
  name='ml.recommender_system.customer_features',
  primary_keys=['date', 'customer_id'],
  partition_columns=['date'],
  schema=customer_features_df.schema,
  description='Customer features'
)

يمكنك بعد ذلك إنشاء تعليمة برمجية للقراءة من تصفية date جدول الميزات إلى الفترة الزمنية ذات الاهتمام.

يمكنك أيضا إنشاء جدول ميزات سلسلة زمنية يتيح عمليات البحث في نقطة زمنية عند استخدام create_training_set أو score_batch. راجع إنشاء جدول ميزات في كتالوج Unity.

للحفاظ على تحديث جدول الميزات، قم بإعداد مهمة مجدولة بانتظام لكتابة الميزات، أو دفق قيم الميزات الجديدة في جدول الميزات.

إنشاء تدفق حساب ميزة الدفق لتحديث الميزات

لإنشاء تدفق حساب ميزة دفق، مرر دفق DataFrame كوسيطة إلى write_table. يقوم هذا الأسلوب بإرجاع كائن StreamingQuery .

def compute_additional_customer_features(data):
  ''' Returns Streaming DataFrame
  '''
  pass

from databricks.feature_engineering import FeatureEngineeringClient
fe = FeatureEngineeringClient()

customer_transactions = spark.readStream.load("dbfs:/events/customer_transactions")
stream_df = compute_additional_customer_features(customer_transactions)

fe.write_table(
  df=stream_df,
  name='ml.recommender_system.customer_features',
  mode='merge'
)

القراءة من جدول ميزات في كتالوج Unity

استخدم read_table لقراءة قيم الميزات.

from databricks.feature_engineering import FeatureEngineeringClient
fe = FeatureEngineeringClient()
customer_features_df = fe.read_table(
  name='ml.recommender_system.customer_features',
)

البحث عن جداول الميزات واستعراضها في كتالوج Unity

استخدم واجهة مستخدم الميزات للبحث عن جداول الميزات أو استعراضها في كتالوج Unity.

  1. انقر فوق أيقونة 'متجر الميزات'الميزات في الشريط الجانبي لعرض واجهة مستخدم الميزات.

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

    مثال البحث عن الميزات

الحصول على بيانات التعريف لجداول الميزات في كتالوج Unity

استخدم get_table للحصول على بيانات تعريف جدول الميزات.

from databricks.feature_engineering import FeatureEngineeringClient
fe = FeatureEngineeringClient()
ft = fe.get_table(name="ml.recommender_system.user_feature_table")
print(ft.features)

استخدام العلامات مع جداول الميزات والميزات في كتالوج Unity

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

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

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

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

from databricks.feature_engineering import FeatureEngineeringClient
fe = FeatureEngineeringClient()

# Create feature table with tags
customer_feature_table = fe.create_table(
  # ...
  tags={"tag_key_1": "tag_value_1", "tag_key_2": "tag_value_2", ...},
  # ...
)

# Upsert a tag
fe.set_feature_table_tag(name="customer_feature_table", key="tag_key_1", value="new_key_value")

# Delete a tag
fe.delete_feature_table_tag(name="customer_feature_table", key="tag_key_2")

حذف جدول ميزات في كتالوج Unity

يمكنك حذف جدول ميزات في كتالوج Unity عن طريق حذف جدول Delta مباشرة في كتالوج Unity باستخدام مستكشف الكتالوج أو باستخدام واجهة برمجة تطبيقات ميزة هندسة الميزة Python.

إشعار

  • يمكن أن يؤدي حذف جدول الميزات إلى فشل غير متوقع في منتجي المصدر ومستهلكي انتقال البيانات من الخادم (النماذج ونقاط النهاية والمهام المجدولة). يجب حذف المتاجر المنشورة عبر الإنترنت مع موفر السحابة الخاص بك.
  • عند حذف جدول ميزة في كتالوج Unity، يتم أيضا إسقاط جدول Delta الأساسي.
  • drop_table غير مدعوم في Databricks Runtime 13.1 ML أو أقل. استخدم أمر SQL لحذف الجدول.

يمكنك استخدام Databricks SQL أو FeatureEngineeringClient.drop_table لحذف جدول ميزات في كتالوج Unity:

Databricks sql

DROP TABLE ml.recommender_system.customer_features;

Python

from databricks.feature_engineering import FeatureEngineeringClient
fe = FeatureEngineeringClient()
fe.drop_table(
  name='ml.recommender_system.customer_features'
)