Ö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_keys
birleş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 _dt
olarak 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_table
yayı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_table
bir gün önce silmeyi planladığınız yayımlanmış tablonun anahtarlarını döndürmeyi göz önünde bulundurun.