Aracılığıyla paylaş


Özellikleri çevrimiçi bir mağazada yayımlama

Bu makalede, gerçek zamanlı sunum için özelliklerin çevrimiçi bir mağazada nasıl yayımlandığı açıklanmaktadır.

Databricks Özellik Deposu şu çevrimiçi mağazaları destekler:

Çevrimiçi mağaza sağlayıcısı Unity Kataloğu'nda Özellik Mühendisliği ile yayımlama Çalışma Alanı Özellik Deposu ile yayımlama Eski MLflow Modeli Sunma özelliği araması Model Sunma'da özellik arama
Azure Cosmos DB [1] X X (Özellik Deposu istemcisi v0.5.0 ve üzeri) X X
Azure MySQL (Tek Sunucu) X X
Azure SQL Server X

Cosmos DB uyumluluk notları

Bu bölüm, Cosmos DB ile Databricks Özellik Deposu kullanılırken göz önünde bulundurulması gereken bazı önemli şeyleri içerir.

Unity Kataloğu etkin çalışma alanları

Databricks Runtime 12.2 LTS ML ve altında, Cosmos DB çevrimiçi mağaza sağlayıcısı Unity Kataloğu etkin çalışma alanlarıyla uyumlu değildir. Hem Unity Kataloğu hem de resmi Cosmos DB Spark bağlayıcısı Spark kataloglarını değiştirir. Databricks Runtime 12.2 LTS ML veya altındaki bir kümede Unity Kataloğu etkin çalışma alanından Cosmos DB'ye özellik yayımladığınızda, Özellik Deposu'nu Cosmos DB'de yayımlamanın başarısız olmasına neden olan bir yazma çakışması olabilir.

Cosmos DB'yi Unity Kataloğu özellikli bir çalışma alanında kullanmak için Databricks Runtime 13.0 ML veya üzerini çalıştıran bir kümeyi ya da Databricks Runtime 11.3 LTS ML veya üzerini çalıştıran bir kümeyi Sınırsız veya Paylaşılan İşlem küme ilkesiyle kullanmanız gerekir.

Spark bağlayıcısı

Azure Cosmos DB'yi kullanmak için hesabın Çekirdek (SQL) API'siyle oluşturulması ve ağ bağlantısı yönteminin Tüm ağlar olarak ayarlanması gerekir. SQL API için uygun Azure Cosmos DB Spark 3 OLTP Bağlayıcısı kümeye yüklenmelidir. Databricks, Spark 3.3 bağlayıcısı yayımlanana kadar Spark 3.2 için en son bağlayıcı sürümünü yüklemenizi önerir.

El ile veritabanı veya kapsayıcı oluşturma - kullanma publish_table()

Cosmos DB çevrimiçi deposu, çevrimdışı depodan farklı bir şema kullanır. Özellikle, çevrimiçi mağazada birincil anahtarlar sütununda _feature_store_internal__primary_keysbirleştirilmiş anahtar olarak depolanır.

Özellik Mağazası'nın Cosmos DB çevrimiçi mağazasına erişebildiğinden emin olmak için, kullanarak publish_table()tabloyu çevrimiçi mağazada oluşturmanız gerekir. Cosmos DB içinde el ile veritabanı veya kapsayıcı oluşturmayın. publish_table() bunu sizin için otomatik olarak yapar.

Toplu işlemle hesaplanan özellikleri çevrimiçi bir mağazada yayımlama

Güncelleştirilmiş özellikleri düzenli olarak yayımlamak için databricks işi oluşturabilir ve zamanlayabilirsiniz. Bu iş, güncelleştirilmiş özellikleri hesaplama kodunu da içerebilir veya özellik güncelleştirmelerini hesaplamak ve yayımlamak için ayrı işler oluşturup çalıştırabilirsiniz.

SQL depoları için aşağıdaki kod, çevrimiçi mağazada "recommender_system" adlı bir çevrimiçi veritabanının zaten var olduğunu ve çevrimdışı deponun adıyla eşleşdiğini varsayar. Veritabanında "customer_features" adlı bir tablo yoksa, bu kod bir tablo oluşturur. Ayrıca özelliklerin her gün hesaplandığını ve bölümlenmiş sütun _dtolarak depolandığını varsayar.

Aşağıdaki kod, bu çevrimiçi mağazaya erişmek için gizli diziler oluşturduğunuzu varsayar.

Cosmos DB

Cosmos DB desteği Unity Kataloğu istemcisinde Özellik Mühendisliği'nin tüm sürümlerinde ve Feature Store istemcisi v0.5.0 ve üzeri sürümlerde kullanılabilir.

import datetime
from databricks.feature_engineering.online_store_spec import AzureCosmosDBSpec
# or databricks.feature_store.online_store_spec for Workspace Feature Store
online_store = AzureCosmosDBSpec(
  account_uri='<account-uri>',
  read_secret_prefix='<read-scope>/<prefix>',
  write_secret_prefix='<write-scope>/<prefix>'
)

fe.publish_table( # or fs.publish_table for Workspace Feature Store
  name='ml.recommender_system.customer_features',
  online_store=online_store,
  filter_condition=f"_dt = '{str(datetime.date.today())}'",
  mode='merge'
)

SQL depoları

import datetime
from databricks.feature_engineering.online_store_spec import AzureMySqlSpec
# or databricks.feature_store.online_store_spec for Workspace Feature Store
online_store = AzureMySqlSpec(
  hostname='<hostname>',
  port='<port>',
  read_secret_prefix='<read-scope>/<prefix>',
  write_secret_prefix='<write-scope>/<prefix>'
)

fs.publish_table(
  name='recommender_system.customer_features',
  online_store=online_store,
  filter_condition=f"_dt = '{str(datetime.date.today())}'",
  mode='merge'
)

Çevrimiçi bir mağazada akış özellikleri yayımlama

Çevrimiçi mağazaya sürekli olarak özellik akışı yapmak için öğesini ayarlayın streaming=True.

fe.publish_table( # or fs.publish_table for Workspace Feature Store
  name='ml.recommender_system.customer_features',
  online_store=online_store,
  streaming=True
)

Seçili özellikleri çevrimiçi bir mağazada yayımlama

Yalnızca seçili özellikleri çevrimiçi mağazada yayımlamak için bağımsız değişkenini features kullanarak yayımlayacak özellik adlarını belirtin. Birincil anahtarlar ve zaman damgası anahtarları her zaman yayımlanır. Bağımsız değişkeni belirtmezseniz features veya değer Yok ise, çevrimdışı özellik tablosundaki tüm özellikler yayımlanır.

Not

Çevrimiçi bir mağazada yalnızca bir özellik alt kümesi yayımlasanız bile çevrimdışı tablonun tamamı geçerli bir özellik tablosu olmalıdır. Çevrimdışı tablo desteklenmeyen veri türleri içeriyorsa, bu tablodaki özelliklerin bir alt kümesini çevrimiçi bir depoya yayımlayamazsınız.

fe.publish_table( # or fs.publish_table for Workspace Feature Store
  name='ml.recommender_system.customer_features',
  online_store=online_store,
  features=["total_purchases_30d"]
)

Özellik tablosunu belirli bir veritabanına yayımlama

Çevrimiçi mağaza belirtiminde veritabanı adını (database_name) ve tablo adını (table_name) belirtin. Bu parametreleri belirtmezseniz, çevrimdışı veritabanı adı ve özellik tablosu adı kullanılır. database_name çevrimiçi mağazada zaten mevcut olmalıdır.

online_store = AzureMySqlSpec(
  hostname='<hostname>',
  port='<port>',
  database_name='<database-name>',
  table_name='<table-name>',
  read_secret_prefix='<read-scope>/<prefix>',
  write_secret_prefix='<write-scope>/<prefix>'
)

Var olan bir çevrimiçi özellik tablosunun veya belirli satırların üzerine yazma

Aramada publish_table kullanınmode='overwrite'. Çevrimiçi tablo, çevrimdışı tablodaki veriler tarafından tamamen üzerine yazılır.

Not

Azure Cosmos DB üzerine yazma modunu desteklemez.

fs.publish_table(
  name='recommender_system.customer_features',
  online_store=online_store,
  mode='overwrite'
)

Yalnızca belirli satırların üzerine yazmak için bağımsız değişkenini filter_condition kullanın:

fs.publish_table(
  name='recommender_system.customer_features',
  online_store=online_store,
  filter_condition=f"_dt = '{str(datetime.date.today())}'",
  mode='merge'
)

Yayımlanmış tabloyu çevrimiçi mağazadan silme

Özellik Deposu istemcisi v0.12.0 ve üzeri ile, yayımlanmış bir tabloyu çevrimiçi bir mağazadan silmek için kullanabilirsiniz drop_online_table . ile drop_online_tableyayımlanan bir tabloyu sildiğinizde, tablo çevrimiçi mağaza sağlayıcınızdan silinir ve çevrimiçi mağaza meta verileri Databricks'ten kaldırılır.

fe.drop_online_table( # or fs.drop_online_table for Workspace Feature Store
  name='recommender_system.customer_features',
  online_store = online_store
)

Not

  • drop_online_table yayımlanan tabloyu çevrimiçi mağazadan siler. Databricks'teki özellik tablosunu silmez.
  • Yayımlanan tabloyu silmeden önce, tablonun Model Sunma özelliği araması için kullanılmadığından ve başka aşağı akış bağımlılıkları olmadığından emin olmalısınız. Silme işlemi geri alınamaz ve bağımlılıkların başarısız olmasına neden olabilir.
  • Bağımlılıkları denetlemek için, yürütmeden drop_online_tablebir gün önce silmeyi planladığınız yayımlanmış tablonun anahtarlarını döndürmeyi göz önünde bulundurun.