使用功能表

有關跟蹤特性沿襲和新鮮度的信息,請參見發現特性並跟蹤特性沿襲

請注意

  • 目前,Databricks特性庫不支持寫入Unity Catalog轉移庫。在支持Unity catalog的工作空間中,你可以將特性表寫入默認的Hive metastore。

  • 數據庫和特性表名稱不能包含連字符(-)。

為特性表創建一個數據庫

在創建任何特性表之前,必須創建一個數據庫儲存它們。

sql創建數據庫如果存在<database_name>

特性表存儲為三角洲表.當您使用create_table(Feature Store客戶端v0.3.6及以上版本)或create_feature_table(v0.3.5及以下版本),必須指定數據庫名稱。例如,該參數創建一個名為customer_features在數據庫中recommender_system

name = ' recommender_system.customer_features '

當您將特性表發布到在線商店時,默認表和數據庫名稱是您創建表時指定的名稱;方法可以指定不同的名稱publish_table方法。

Databricks Feature Store UI顯示了在線商店中的表和數據庫的名稱,以及其他元數據。

在Databricks feature Store中創建一個特性表

請注意

您也可以注冊一個現有的差值表作為一個特征表。看到將現有的Delta表注冊為特性表

創建特征表的基本步驟如下:

  1. 編寫Python函數來計算特性。每個函數的輸出都應該是一個具有唯一主鍵的Apache Spark DataFrame。主鍵可以由一個或多個列組成。

  2. 創建一個特征表FeatureStoreClient和使用create_table(v0.3.6及以上版本)或create_feature_table(v0.3.5及以下版本)。

  3. 使用填充特征表write_table

databricks.feature_store進口feature_tabledefcompute_customer_features數據):" '特征計算代碼返回一個以'customer_id'為主鍵的數據幀' "通過#創建customer_id的特征表通過compute_customer_features獲取DataFrame輸出的schemadatabricks.feature_store進口FeatureStoreClientcustomer_features_dfcompute_customer_featuresdffsFeatureStoreClient()customer_feature_tablefscreate_table的名字“recommender_system.customer_features”primary_keys“customer_id”模式customer_features_df模式描述“客戶特性”#另一種方法是使用' create_table '並指定' df '參數。這段代碼自動將特性保存到底層的Delta表中。# customer_feature_table = fs.create_table(#……# df = customer_features_df,#……#)要使用複合鍵,在create_table調用中傳遞所有鍵# customer_feature_table = fs.create_table(#……# primary_keys=['customer_id', 'date'],#……#)#使用write_table向特性表寫入數據# Overwrite模式完全刷新功能表fswrite_table的名字“recommender_system.customer_features”dfcustomer_features_df模式“覆蓋”
databricks.feature_store進口feature_tabledefcompute_customer_features數據):" '特征計算代碼返回一個以'customer_id'為主鍵的數據幀' "通過#創建customer_id的特征表通過compute_customer_features獲取DataFrame輸出的schemadatabricks.feature_store進口FeatureStoreClientcustomer_features_dfcompute_customer_featuresdffsFeatureStoreClient()customer_feature_tablefscreate_feature_table的名字“recommender_system.customer_features”“customer_id”模式customer_features_df模式描述“客戶特性”#另一種方法是使用' create_feature_table '並指定' features_df '參數。這段代碼自動將特性保存到底層的Delta表中。# customer_feature_table = fs.create_feature_table(#……# features_df = customer_features_df,#……#)#使用複合鍵,在create_feature_table調用中傳遞所有鍵# customer_feature_table = fs.create_feature_table(#……# keys=['customer_id', 'date'],#……#)#使用write_table向特性表寫入數據# Overwrite模式完全刷新功能表fswrite_table的名字“recommender_system.customer_features”dfcustomer_features_df模式“覆蓋”databricks.feature_store進口feature_tabledefcompute_customer_features數據):" '特征計算代碼返回一個以'customer_id'為主鍵的數據幀' "通過#創建customer_id的特征表通過compute_customer_features獲取DataFrame輸出的schemadatabricks.feature_store進口FeatureStoreClientcustomer_features_dfcompute_customer_featuresdffsFeatureStoreClient()customer_feature_tablefscreate_feature_table的名字“recommender_system.customer_features”“customer_id”模式customer_features_df模式描述“客戶特性”#另一種方法是使用' create_feature_table '並指定' features_df '參數。這段代碼自動將特性保存到底層的Delta表中。# customer_feature_table = fs.create_feature_table(#……# features_df = customer_features_df,#……#)#使用複合鍵,在create_feature_table調用中傳遞所有鍵# customer_feature_table = fs.create_feature_table(#……# keys=['customer_id', 'date'],#……#)#使用write_table向特性表寫入數據# Overwrite模式完全刷新功能表fswrite_table的名字“recommender_system.customer_features”dfcustomer_features_df模式“覆蓋”

將現有的Delta表注冊為特性表

使用v0.3.8及以上版本,可以注冊現有的差值表作為一個特征表。Delta表一定存在於轉移瘤中。

請注意

更新已注冊的特性表,你必須使用特性庫Python API

fsregister_tabledelta_table“recommender.customer_features”primary_keys“customer_id”描述“客戶特性”

更新功能表

您可以通過添加新特性或根據主鍵修改特定行來更新特性表。

以下特性表元數據無法更新:

  • 主鍵

  • 分區鍵

  • 已存在特性的名稱或類型

向現有特性表中添加新特性

你可以通過以下兩種方式向已有的特性表中添加新特性:

  • 更新現有的特征計算函數並運行write_table使用返回的DataFrame。這將更新特征表模式,並基於主鍵合並新的特征值。

  • 創建一個新的特征計算函數來計算新的特征值。這個新的計算函數返回的DataFrame必須包含特征表的主鍵和分區鍵(如果定義了的話)。運行write_table使用相同的主鍵,將新特性寫入現有的特性表。

隻更新特性表中的特定行

使用模式“合並”write_table.中發送的數據幀中主鍵不存在的行write_table呼叫保持不變。

fswrite_table的名字“recommender.customer_features”dfcustomer_features_df模式“合並”

計劃一個作業來更新功能表

為了確保特性表中的特性總是具有最新的值,Databricks建議您創造一份工作它運行一個筆記本,定期更新功能表,比如每天。如果已經創建了非計劃作業,則可以將其轉換為安排的工作確保特征值總是最新的。

更新特性表使用的代碼模式=“合並”,如下例所示。

fsFeatureStoreClient()customer_features_dfcompute_customer_features數據fswrite_tabledfcustomer_features_df的名字“recommender_system.customer_features”模式“合並”

存儲日常特征的過去值

定義一個帶有複合主鍵的特征表。在主鍵中包含日期。例如,對於一個特征表store_purchases,則可以使用複合主鍵(日期user_id)和分區鍵日期為了高效的閱讀。

然後可以創建代碼從特征表過濾中讀取日期到利息的時間段。為了保持特性表的更新,建立一個定期計劃的任務來寫入特性,或者將新的特性值輸入到特性表中。

創建一個流特性計算管道來更新特性

要創建一個流特性計算管道,傳遞一個流DataFrame作為一個論點write_table.此方法返回一個StreamingQuery對象。

defcompute_additional_customer_features數據):返回流數據幀“‘通過#未顯示customer_transactions火花readStream負載“dbfs: /事件/ customer_transactions”stream_dfcompute_additional_customer_featurescustomer_transactionsfswrite_tabledfstream_df的名字“recommender_system.customer_features”模式“合並”

從特性表中讀取

使用read_table讀取特征值。

從特定的時間戳讀取數據

Databricks特性表是差值表,因此您可以檢索任何時間戳的特征值。

進口datetime昨天datetime日期今天()-datetimetimedelta1#從1天前讀取customer_features值customer_features_dffsread_table的名字“recommender_system.customer_features”as_of_delta_timestampstr昨天

搜索和瀏覽功能表

使用功能商店UI搜索或瀏覽功能表。

  1. 點擊功能商店圖標特色商店在側邊欄中顯示Feature Store UI。此圖標僅在您處於機器學習角色

  2. 在搜索框中,輸入特征表名稱、特征名稱或用於特征計算的數據源名稱的全部或部分。您也可以輸入全部或部分標記的鍵或值.搜索文本不區分大小寫。

    下麵的屏幕截圖顯示了一個示例。從“年齡”搜索的結果包括一個表的特征年齡,一個有特色的表HouseAge,以及基於數據源的表raw_data.usage_logs

    特征搜索示例

獲取特性表元數據

獲取特性表元數據的API取決於您正在使用的Databricks運行時版本。對於v0.3.6及以上版本,使用get_table.對於v0.3.5及以下版本,使用get_feature_table

#此示例適用於v0.3.6及以上版本#對於v0.3.5,使用get_feature_tabledatabricks.feature_store進口FeatureStoreClientfsFeatureStoreClient()fsget_table“feature_store_example.user_feature_table”

使用特性表標記

標記是可以創建和使用的鍵-值對搜索特征表.您可以使用Feature Store UI或特性庫Python API

在UI中使用特性表標簽

使用功能商店UI搜索或瀏覽功能表。單擊,進入用戶界麵功能商店圖標特色商店在側邊欄中顯示Feature Store UI。此圖標僅在您處於機器學習角色

使用Feature Store UI添加一個標簽

  1. 點擊標簽圖標如果它還沒有打開。這時會出現標簽表。

    標簽表
  2. 按一下的名字而且價值字段並為您的標記輸入鍵和值。

  3. 點擊添加

使用Feature Store UI編輯或刪除標簽

控件中的圖標可編輯或刪除現有標記行動列。

標簽的行為

使用feature Store Python API處理特性表標記

在運行v0.4.1及以上版本的集群上,您可以使用特性庫Python API

需求

Feature Store客戶端v0.4.1及以上版本

使用feature Store Python API創建帶有標簽的特性表

databricks.feature_store進口FeatureStoreClientfsFeatureStoreClient()customer_feature_tablefscreate_table...標簽“tag_key_1”“tag_value_1”“tag_key_2”“tag_value_2”...},...

使用Feature Store Python API添加、更新和刪除標記

databricks.feature_store進口FeatureStoreClientfsFeatureStoreClient()#插入標簽fsset_feature_table_tagtable_name“my_table”關鍵“質量”價值“黃金”#刪除標簽fsdelete_feature_table_tagtable_name“my_table”關鍵“質量”

更新特征表的數據源

特征庫自動跟蹤用於計算特征的數據源。方法還可以手動更新數據源特性庫Python API

需求

Feature Store客戶端v0.5.0及以上版本

使用特性庫Python API添加數據源

下麵是一些示例命令。詳情請參見API文檔

databricks.feature_store進口FeatureStoreClientfsFeatureStoreClient()使用' source_type="table"在metastore中添加一個表作為數據源。fsadd_data_sourcesfeature_table_name“點擊”data_sources“user_info.clicks”source_type“表”使用' source_type="path" '添加一個路徑格式的數據源。fsadd_data_sourcesfeature_table_name“user_metrics”data_sources“dbfs: / FileStore / user_metrics.json”source_type“路徑”如果源不是表或路徑,則使用' source_type="custom"。fsadd_data_sourcesfeature_table_name“user_metrics”data_sources“user_metrics.txt”source_type“自定義”

使用特性庫Python API刪除數據源

詳情請參見API文檔

請注意

以下命令刪除與數據源名稱匹配的所有類型(“表”、“路徑”和“自定義”)的數據源。

databricks.feature_store進口FeatureStoreClientfsFeatureStoreClient()fsdelete_data_sourcesfeature_table_name“點擊”sources_names“user_info.clicks”

刪除特性表

您可以通過特性庫界麵或特性庫Python API

請注意

  • 刪除特性表可能會導致上遊生產者和下遊消費者(模型、端點和計劃的作業)出現意外故障。您必須通過雲提供商刪除已發布的在線商店。

  • 當您使用API刪除特性表時,底層的Delta表也會被刪除。從UI中刪除特性表時,必須單獨刪除底層Delta表。

通過UI刪除特性表

  1. 在特征表頁麵,單擊紐扣在特性表名稱的右側進行選擇刪除.如果你沒有可以管理功能表的權限,您將看不到此選項。

    從下拉菜單中選擇刪除
  2. 在“刪除特性表”對話框中,單擊刪除來確認。

  3. 如果你也想的話刪除底層的Delta表,在筆記本電腦中執行以下命令。

    sql下降表格如果存在<feature_table_name>

使用特性庫Python API刪除特性表

對於Feature Store客戶端v0.4.1及以上版本,您可以使用drop_table刪除特征表。刪除表時使用drop_table,底層的Delta表也會被刪除。

fsdrop_table的名字“recommender_system.customer_features”

支持的數據類型

特性商店支持以下功能PySpark數據類型

  • IntegerType

  • FloatType

  • BooleanType

  • StringType

  • 倍增式

  • LongType

  • TimestampType

  • DateType

  • ShortType

  • ArrayType

  • BinaryType(v0.3.5及以上版本)

  • DecimalType(v0.3.5及以上版本)

  • MapType(v0.3.5及以上版本)

上麵列出的數據類型支持機器學習應用程序中常見的特征類型。例如:

  • 您可以將密集向量、張量和嵌入存儲為ArrayType

  • 您可以將稀疏向量、張量和嵌入存儲為MapType

  • 可以將文本存儲為StringType

Feature Store界麵根據特性數據類型顯示元數據:

複雜數據類型示例

當發布到網上商店時,ArrayType而且MapType特性以JSON格式存儲。