Aracılığıyla paylaş


Özellik tablolarıyla çalışma

Bu sayfada Unity Kataloğu'nda özellik tablolarının nasıl oluşturulacağı ve bunlarla nasıl çalışıldığı açıklanmaktadır.

Bu sayfa yalnızca Unity Kataloğu için etkinleştirilmiş çalışma alanları için geçerlidir. Çalışma alanınız Unity Kataloğu için etkinleştirilmemişse bkz . Çalışma alanı özellik deposunda özellik tablolarıyla çalışma.

Bu sayfadaki örneklerde kullanılan komutlar ve parametreler hakkında ayrıntılı bilgi için bkz . Özellik Mühendisliği Python API başvurusu.

Gereksinimler

Unity Kataloğu'nda Özellik Mühendisliği için Databricks Runtime 13.2 veya üzeri gerekir. Ayrıca Unity Kataloğu meta veri deposunun Privilege Model Sürüm 1.0'a sahip olması gerekir.

Unity Kataloğu Python istemcisinde Özellik Mühendisliği'ni yükleme

Unity Kataloğu'nda Özellik Mühendisliği'nin bir Python istemcisi FeatureEngineeringClientvardır. sınıfı paketiyle databricks-feature-engineering PyPI üzerinde kullanılabilir ve Databricks Runtime 13.3 LTS ML ve üzeri sürümlerde önceden yüklenmiştir. ML olmayan bir Databricks Runtime kullanıyorsanız istemciyi el ile yüklemeniz gerekir. Databricks Runtime sürümünüz için doğru sürümü bulmak için uyumluluk matrisini kullanın.

%pip install databricks-feature-engineering

dbutils.library.restartPython()

Unity Kataloğu'nda özellik tabloları için katalog ve şema oluşturma

Özellik tabloları için yeni bir katalog oluşturmanız veya mevcut bir kataloğu kullanmanız gerekir.

Yeni bir katalog oluşturmak için meta veri deposunda ayrıcalığınız CREATE CATALOG olmalıdır.

CREATE CATALOG IF NOT EXISTS <catalog-name>

Mevcut bir kataloğu kullanmak için katalogda ayrıcalığınız USE CATALOG olmalıdır.

USE CATALOG <catalog-name>

Unity Kataloğu'ndaki özellik tabloları bir şemada depolanmalıdır. Katalogda yeni bir şema oluşturmak için, katalogda ayrıcalığınız CREATE SCHEMA olmalıdır.

CREATE SCHEMA IF NOT EXISTS <schema-name>

Unity Kataloğu'nda özellik tablosu oluşturma

Not

Unity Kataloğu'nda özellik tablosu olarak birincil anahtar kısıtlaması içeren mevcut bir Delta tablosunu kullanabilirsiniz. Tabloda tanımlanmış bir birincil anahtar yoksa, kısıtlamayı eklemek için DDL deyimlerini kullanarak ALTER TABLE tabloyu güncelleştirmeniz gerekir. Bkz . Unity Kataloğu'nda var olan bir Delta tablosunu özellik tablosu olarak kullanma.

Ancak, bir akış tablosuna birincil anahtar veya Delta Live Tables işlem hattı tarafından Unity Kataloğu'nda yayımlanan gerçekleştirilmiş görünüm eklemek için akış tablosunun şemasının değiştirilmesi veya gerçekleştirilmiş görünüm tanımının birincil anahtarı içerecek şekilde değiştirilmesi ve ardından akış tablosunun veya gerçekleştirilmiş görünümün yenilenmesi gerekir. Bkz . Delta Live Tables işlem hattı tarafından oluşturulan bir akış tablosunu veya gerçekleştirilmiş görünümü özellik tablosu olarak kullanma.

Unity Kataloğu'ndaki özellik tabloları Delta tablolarıdır. Özellik tablolarının birincil anahtarı olmalıdır. Unity Kataloğu'ndaki diğer veri varlıkları gibi özellik tablolarına üç düzeyli bir ad alanı kullanılarak erişilir: <catalog-name>.<schema-name>.<table-name>.

Unity Kataloğu'nda özellik tabloları oluşturmak için Databricks SQL, Python FeatureEngineeringClientveya Delta Live Tables işlem hattını kullanabilirsiniz.

Databricks SQL

Birincil anahtar kısıtlaması olan herhangi bir Delta tablosunu özellik tablosu olarak kullanabilirsiniz. Aşağıdaki kodda birincil anahtarla tablo oluşturma gösterilmektedir:

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)
);

Zaman serisi özellik tablosu oluşturmak için, birincil anahtar sütunu olarak bir saat sütunu ekleyin ve TIMESERIES anahtar sözcüğünü belirtin. TIMESERIES anahtar sözcüğü Databricks Runtime 13.3 LTS veya üzerini gerektirir.

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)
);

Tablo oluşturulduktan sonra, diğer Delta tabloları gibi bu tabloya da veri yazabilirsiniz ve özellik tablosu olarak kullanılabilir.

Python

Aşağıdaki örneklerde kullanılan komutlar ve parametreler hakkında ayrıntılı bilgi için bkz . Özellik Mühendisliği Python API başvurusu.

  1. Özellikleri hesaplamak için Python işlevlerini yazın. Her işlevin çıkışı, benzersiz bir birincil anahtara sahip bir Apache Spark DataFrame olmalıdır. Birincil anahtar bir veya daha fazla sütundan oluşabilir.
  2. ve create_tableörneği oluşturarak bir FeatureEngineeringClient özellik tablosu oluşturun.
  3. kullanarak write_tableözellik tablosunu doldurun.
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 Live Tables işlem hattıyla Unity Kataloğu'nda özellik tablosu oluşturma

Not

Tablo kısıtlamaları için Delta Live Tables desteği Genel Önizleme aşamasındadır. Aşağıdaki kod örnekleri Delta Live Tables önizleme kanalı kullanılarak çalıştırılmalıdır.

Delta Live Tables işlem hattından yayımlanan ve birincil anahtar kısıtlaması içeren tüm tablolar özellik tablosu olarak kullanılabilir. Delta Live Tables işlem hattında birincil anahtarla tablo oluşturmak için Databricks SQL veya Delta Live Tables Python programlama arabirimini kullanabilirsiniz.

Delta Live Tables işlem hattında birincil anahtarla tablo oluşturmak için aşağıdaki söz dizimini kullanın:

Databricks SQL

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 ...;

Python

import dlt

@dlt.table(
  schema="""
          customer_id int NOT NULL,
          feat1 long,
          feat2 varchar(100),
          CONSTRAINT customer_features_pk PRIMARY KEY (customer_id)
    """)
def customer_features():
  return ...

Zaman serisi özellik tablosu oluşturmak için, birincil anahtar sütunu olarak bir saat sütunu ekleyin ve TIMESERIES anahtar sözcüğünü belirtin.

Databricks SQL

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 ...;

Python

import dlt

@dlt.table(
  schema="""
    customer_id int NOT NULL,
    ts timestamp NOT NULL,
    feat1 long,
    feat2 varchar(100),
    CONSTRAINT customer_features_pk PRIMARY KEY (customer_id, ts TIMESERIES)
    """)
def customer_features():
  return ...

Tablo oluşturulduktan sonra, diğer Delta Live Tables veri kümeleri gibi bu tabloya veri yazabilirsiniz ve bu veriler özellik tablosu olarak kullanılabilir.

Unity Kataloğu'nda var olan bir Delta tablosunu özellik tablosu olarak kullanma

Unity Kataloğu'nda birincil anahtara sahip herhangi bir Delta tablosu Unity Kataloğu'ndaki bir özellik tablosu olabilir ve özellikler kullanıcı arabirimini ve API'sini tabloyla birlikte kullanabilirsiniz.

Not

  • Yalnızca tablo sahibi birincil anahtar kısıtlamalarını bildirebilir. Sahibin adı Katalog Gezgini'nin tablo ayrıntı sayfasında görüntülenir.
  • Delta tablosundaki veri türünün Unity Kataloğu'nda Özellik Mühendisliği tarafından desteklendiğini doğrulayın. Bkz. Desteklenen veri türleri.
  • TIMESERIES anahtar sözcüğü Databricks Runtime 13.3 LTS veya üzerini gerektirir.

Mevcut bir Delta tablosunun birincil anahtar kısıtlaması yoksa aşağıdaki gibi bir tane oluşturabilirsiniz:

  1. Birincil anahtar sütunlarını olarak NOT NULLayarlayın. Her birincil anahtar sütunu için şunu çalıştırın:

    ALTER TABLE <full_table_name> ALTER COLUMN <pk_col_name> SET NOT NULL
    
  2. Birincil anahtar kısıtlamasını eklemek için tabloyu değiştirin:

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

    pk_name birincil anahtar kısıtlamasının adıdır. Kurala göre, tablo adını (şema ve katalog olmadan) bir _pk sonekle kullanabilirsiniz. Örneğin, adı "ml.recommender_system.customer_features" customer_features_pk olan bir tablo birincil anahtar kısıtlamasının adı olabilir.

    Tabloyu bir zaman serisi özellik tablosu yapmak için, birincil anahtar sütunlarından birinde TIMESERIES anahtar sözcüğünü aşağıdaki gibi belirtin:

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

    Tabloya birincil anahtar kısıtlamasını ekledikten sonra, tablo Özellikler kullanıcı arabiriminde görünür ve bunu özellik tablosu olarak kullanabilirsiniz.

Delta Live Tables işlem hattı tarafından oluşturulan bir akış tablosunu veya gerçekleştirilmiş görünümü özellik tablosu olarak kullanma

Birincil anahtara sahip Unity Kataloğu'ndaki herhangi bir akış tablosu veya gerçekleştirilmiş görünüm, Unity Kataloğu'ndaki bir özellik tablosu olabilir ve özellikler kullanıcı arabirimini ve API'sini tabloyla birlikte kullanabilirsiniz.

Not

  • Tablo kısıtlamaları için Delta Live Tables desteği Genel Önizleme aşamasındadır. Aşağıdaki kod örnekleri Delta Live Tables önizleme kanalı kullanılarak çalıştırılmalıdır.
  • Yalnızca tablo sahibi birincil anahtar kısıtlamalarını bildirebilir. Sahibin adı Katalog Gezgini'nin tablo ayrıntı sayfasında görüntülenir.
  • Unity Kataloğu'nda Özellik Mühendisliği'nin Delta tablosundaki veri türünü desteklediğini doğrulayın. Bkz. Desteklenen veri türleri.

Mevcut bir akış tablosunun veya gerçekleştirilmiş görünümün birincil anahtarlarını ayarlamak için, akış tablosunun şemasını veya nesneyi yöneten not defterinde gerçekleştirilmiş görünümü güncelleştirin. Ardından Unity Kataloğu nesnesini güncelleştirmek için tabloyu yenileyin.

Gerçekleştirilmiş görünüme birincil anahtar ekleme söz dizimi aşağıdadır:

Databricks SQL

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

Python

import dlt

@dlt.table(
  schema="""
    id int NOT NULL PRIMARY KEY,
    ...
    """
)
def existing_live_table():
  return ...

Unity Kataloğu'nda özellik tablosunu güncelleştirme

Unity Kataloğu'nda yeni özellikler ekleyerek veya birincil anahtara göre belirli satırları değiştirerek özellik tablosunu güncelleştirebilirsiniz.

Aşağıdaki özellik tablosu meta verileri güncelleştirilmemelidir:

  • Birincil anahtar.
  • Bölüm anahtarı.
  • Mevcut bir özelliğin adı veya veri türü.

Bunların değiştirilmesi, modelleri eğitme ve sunma özelliklerini kullanan aşağı akış işlem hatlarının bozulmasına neden olur.

Unity Kataloğu'nda var olan bir özellik tablosuna yeni özellikler ekleme

Mevcut bir özellik tablosuna yeni özellikler eklemek için şu iki yöntemden birini kullanabilirsiniz:

  • Mevcut özellik hesaplama işlevini güncelleştirin ve döndürülen DataFrame ile çalıştırın write_table . Bu, özellik tablosu şemasını güncelleştirir ve yeni özellik değerlerini birincil anahtara göre birleştirir.
  • Yeni özellik değerlerini hesaplamak için yeni bir özellik hesaplama işlevi oluşturun. Bu yeni hesaplama işlevi tarafından döndürülen DataFrame, özellik tablolarının birincil ve bölüm anahtarlarını (tanımlandıysa) içermelidir. Aynı birincil anahtarı kullanarak yeni özellikleri mevcut özellik tablosuna yazmak için DataFrame ile komutunu çalıştırın write_table .

Özellik tablosunda yalnızca belirli satırları güncelleştirme

içinde write_tablekullanınmode = "merge". Çağrıda gönderilen DataFrame'de birincil anahtarı bulunmayan satırlar write_table değişmeden kalır.

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

Özellik tablosunu güncelleştirmek için iş zamanlama

Özellik tablolarındaki özelliklerin her zaman en son değerlere sahip olduğundan emin olmak için Databricks, özellik tablonuzu her gün gibi düzenli aralıklarla güncelleştirmek için not defteri çalıştıran bir iş oluşturmanızı önerir. Önceden oluşturulmuş zamanlanmamış bir işiniz varsa, özellik değerlerinin her zaman güncel olduğundan emin olmak için bunu zamanlanmış bir işe dönüştürebilirsiniz. Bkz. İş akışlarını zamanlama ve düzenleme.

Bir özellik tablosunu mode='merge'güncelleştirme kodu, aşağıdaki örnekte gösterildiği gibi kullanır.

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'
)

Günlük özelliklerin geçmiş değerlerini depolama

Bileşik birincil anahtarla bir özellik tablosu tanımlayın. Tarihi birincil anahtara ekleyin. Örneğin, bir özellik tablosu customer_featuresiçin, verimli okumalar için bileşik birincil anahtar (date, customer_id) ve bölüm anahtarı date kullanabilirsiniz.

Databricks, verimli okumalar için tabloda sıvı kümelediğini etkinleştirmenizi önerir. Sıvı kümelemesi kullanmıyorsanız, daha iyi okuma performansı için tarih sütununu bölüm anahtarı olarak ayarlayın.

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)
)
-- If you are not using liquid clustering, uncomment the following line.
-- 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'],
  # If you are not using liquid clustering, uncomment the following line.
  # partition_columns=['date'],
  schema=customer_features_df.schema,
  description='Customer features'
)

Ardından özellik tablosu filtrelemesinden date ilgilendiğiniz zaman aralığına kadar okumak için kod oluşturabilirsiniz.

veya kullanırken score_batchcreate_training_set belirli bir noktaya aramaları etkinleştiren bir zaman serisi özellik tablosu da oluşturabilirsiniz. Bkz . Unity Kataloğu'nda özellik tablosu oluşturma.

Özellik tablosunu güncel tutmak için, özellik yazmak veya yeni özellik değerlerini özellik tablosuna akışla aktarmak için düzenli olarak zamanlanmış bir iş ayarlayın.

Özellikleri güncelleştirmek için bir akış özelliği hesaplama işlem hattı oluşturma

Akış özelliği hesaplama işlem hattı oluşturmak için bir akışı DataFrame bağımsız değişken olarak geçirin write_table. Bu yöntem bir StreamingQuery nesne döndürür.

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

from databricks.feature_engineering import FeatureEngineeringClient
fe = FeatureEngineeringClient()

customer_transactions = spark.readStream.table("prod.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 Kataloğu'ndaki bir özellik tablosundan okuma

Özellik değerlerini okumak için kullanın read_table .

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

Unity Kataloğu'nda özellik tablolarını arama ve göz atma

Unity Kataloğu'nda özellik tablolarını aramak veya göz atmak için Özellikler kullanıcı arabirimini kullanın.

  1. Özellikler kullanıcı arabirimini görüntülemek için kenar çubuğunda Özellikler'e tıklayınÖzellik Deposu Simgesi.

  2. Katalogdaki tüm kullanılabilir özellik tablolarını görüntülemek için katalog seçicisi olan kataloğu seçin. Arama kutusuna özellik tablosunun, özelliğin veya açıklamanın adının tamamını veya bir bölümünü girin. Ayrıca, bir etiketin anahtarının veya değerinin tamamını veya bir kısmını da girebilirsiniz. Arama metni büyük/küçük harfe duyarlı değildir.

    Özellik arama örneği

Unity Kataloğu'nda özellik tablolarının meta verilerini alma

Özellik tablosu meta verilerini almak için kullanın 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 Kataloğu'nda özellik tablolarıyla ve özelliklerle etiketleri kullanma

Özellik tablolarınızı ve özelliklerinizi kategorilere ayırmak ve yönetmek için basit anahtar-değer çiftleri olan etiketleri kullanabilirsiniz.

Özellik tabloları için Katalog Gezgini'ni, not defterindeki VEYA SQL sorgu düzenleyicisindeki SQL deyimlerini veya Özellik Mühendisliği Python API'sini kullanarak etiket oluşturabilir, düzenleyebilir ve silebilirsiniz.

Özellikler için, bir not defterinde veya SQL sorgu düzenleyicisinde Katalog Gezgini'ni veya SQL deyimlerini kullanarak etiket oluşturabilir, düzenleyebilir ve silebilirsiniz.

Bkz . Unity Kataloğu güvenli hale getirilebilir nesnelere ve Özellik Mühendisliği ve Çalışma Alanı Özellik Deposu Python API'sine etiket uygulama.

Aşağıdaki örnekte özellik tablosu etiketlerini oluşturmak, güncelleştirmek ve silmek için Özellik Mühendisliği Python API'sinin nasıl kullanılacağı gösterilmektedir.

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 Kataloğu'nda özellik tablosunu silme

Unity Kataloğu'nda bir özellik tablosunu, Katalog Gezgini'ni veya Özellik Mühendisliği Python API'sini kullanarak Unity Kataloğu'ndaki Delta tablosunu doğrudan silerek silebilirsiniz.

Not

  • Özellik tablosunun silinmesi, yukarı akış üreticilerinde ve aşağı akış tüketicilerinde (modeller, uç noktalar ve zamanlanmış işler) beklenmeyen hatalara yol açabilir. Yayımlanan çevrimiçi mağazaları bulut sağlayıcınızla birlikte silmeniz gerekir.
  • Unity Kataloğu'nda bir özellik tablosunu sildiğinizde, temel delta tablosu da bırakılır.
  • drop_table Databricks Runtime 13.1 ML veya altında desteklenmez. Tabloyu silmek için SQL komutunu kullanın.

Databricks SQL'i kullanabilir veya FeatureEngineeringClient.drop_table Unity Kataloğu'nda bir özellik tablosunu silebilirsiniz:

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'
)

Unity Kataloğu'nda çalışma alanları veya hesaplar arasında özellik tablosu paylaşma

Unity Kataloğu'ndaki bir özellik tablosuna, tablonun Unity Kataloğu meta deposuna atanan tüm çalışma alanları erişebilir.

Özellik tablosunu aynı Unity Kataloğu meta deposuna atanmamış çalışma alanlarıyla paylaşmak için Delta Sharing'i kullanın.