Topik ini menjelaskan cara menggunakan FeatureStore SDK untuk Go untuk membaca data dari online store, termasuk fitur offline, real-time, dan urutan.
Prasyarat
Proyek FeatureStore, entitas fitur, tampilan fitur, dan fitur model telah dibuat. Data disinkronkan antara online store dan offline store. Untuk informasi lebih lanjut, lihat Konfigurasikan proyek FeatureStore.
ID AccessKey dan Rahasia AccessKey diperoleh. Untuk informasi lebih lanjut, lihat Buat pasangan AccessKey.
Disarankan untuk menggunakan variabel lingkungan guna menyimpan ID AccessKey dan Rahasia AccessKey Anda. Untuk informasi lebih lanjut, lihat Langkah 2: Konfigurasikan variabel lingkungan.
Instal FeatureStore SDK untuk Go
Jalankan perintah berikut untuk menginstal FeatureStore SDK untuk Go:
go get github.com/aliyun/aliyun-pai-featurestore-go-sdk/v2Inisialisasi klien FeatureStore
API
// Inisialisasi klien FeatureStore.
// regionId menentukan wilayah tempat instance berada.
// accessKeyId menentukan ID AccessKey yang digunakan untuk mengakses layanan penyimpanan. Untuk mendapatkan ID AccessKey, kunjungi situs resmi Alibaba Cloud atau hubungi administrator.
// accessKeySecret menentukan Rahasia AccessKey yang digunakan untuk mengakses layanan penyimpanan. Untuk mendapatkan Rahasia AccessKey, kunjungi situs resmi Alibaba Cloud atau hubungi administrator.
// projectName menentukan nama Proyek FeatureStore yang Anda buat di konsol Platform for AI (PAI).
func NewFeatureStoreClient(regionId, accessKeyId, accessKeySecret, projectName string, opts ...ClientOption) (*FeatureStoreClient, error)Klien FeatureStore harus berjalan dalam virtual private cloud (VPC) agar SDK untuk Go dapat langsung terhubung ke online store. Sebagai contoh, SDK untuk Go hanya dapat mengakses instance Hologres melalui VPC tertentu.
Contoh kode
accessId := os.Getenv("AccessId")
accessKey := os.Getenv("AccessKey")
client, err := featurestore.NewFeatureStoreClient("cn-beijing", accessId, accessKey, "project_name")Ambil data fitur dari tampilan fitur
API
// Ambil data fitur dari tampilan fitur berdasarkan join ID, nama fitur, dan alias fitur.
GetOnlineFeatures(joinIds []interface{}, features []string, alias map[string]string) ([]map[string]interface{}, error)Parameter
Parameter | Deskripsi | |
joinIds | Menentukan join ID (primary key) dari fitur yang ingin Anda ambil. | |
features | Menentukan nama fitur yang ingin Anda ambil. | |
alias | Menentukan alias fitur yang ingin Anda ambil. Parameter ini tidak berlaku untuk tampilan fitur urutan. | |
Contoh kode
// dapatkan proyek berdasarkan nama
project, err := client.GetProject("project_name")
if err != nil {
// t.Fatal(err)
}
// dapatkan featureview berdasarkan nama
user_feature_view := project.GetFeatureView("feature_view_name")
if user_feature_view == nil {
// t.Fatal("feature view not exist")
}
// dapatkan fitur online
features, err := user_feature_view.GetOnlineFeatures([]interface{}{"key1", "key2"}, []string{"*"}, nil)Respon Sukses: Ambil Data dari Tampilan Fitur Offline atau Real-Time
[ { "city":"Hefei", "follow_cnt":1, "gender":"male", "user_id":"100043186" }, { "city":"", "follow_cnt":5, "gender":"male", "user_id":"100060369" } ]Respon Sukses: Ambil Data dari Tampilan Fitur Urutan
Tabel berikut menjelaskan konfigurasi fitur urutan yang digunakan dalam contoh ini.
Bidang fitur urutan offline
Nama event
Panjang urutan
Nama fitur urutan online
click_seq_50_seq
click
50
click_seq_50_seq
expr_seq_100_seq
expr
100
expr_seq_100
Contoh Keluaran
[ { "click_seq_50_seq": "216751275;228787053;220852269;242884721", "click_seq_50_seq__event": "click;click;click;click", "click_seq_50_seq__event_time": "1699128398;1699128398;1699118623;1699118623", "click_seq_50_seq__item_id": "216751275;228787053;220852269;242884721", "click_seq_50_seq__playtime": "65.40;72.06;104.69;62.74", "click_seq_50_seq__ts": "389018;389018;398793;398793", "expr_seq_100": "207474427;216751275;228787053;247136848;270584471;299485479;220852269;242884721;245999124;265863707", "expr_seq_100__event": "expr;expr;expr;expr;expr;expr;expr;expr;expr;expr", "expr_seq_100__event_time": "1699128398;1699128398;1699128398;1699128398;1699128398;1699128398;1699118623;1699118623;1699118623;1699118623", "expr_seq_100__item_id": "207474427;216751275;228787053;247136848;270584471;299485479;220852269;242884721;245999124;265863707", "expr_seq_100__playtime": "0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00", "expr_seq_100__ts": "389018;389018;389018;389018;389018;389018;398793;398793;398793;398793", "user_id": "186569075" }, { "click_seq_50_seq": "201741544;236327912;293320498", "click_seq_50_seq__event": "click;click;click", "click_seq_50_seq__event_time": "1699178245;1699178245;1699178245", "click_seq_50_seq__item_id": "201741544;236327912;293320498", "click_seq_50_seq__playtime": "97.41;70.32;135.21", "click_seq_50_seq__ts": "339171;339171;339171", "expr_seq_100": "201741544;224940066;236327912;240253906;247562151;293320498", "expr_seq_100__event": "expr;expr;expr;expr;expr;expr", "expr_seq_100__event_time": "1699178245;1699178245;1699178245;1699178245;1699178245;1699178245", "expr_seq_100__item_id": "201741544;224940066;236327912;240253906;247562151;293320498", "expr_seq_100__playtime": "0.00;0.00;0.00;0.00;0.00;0.00", "expr_seq_100__ts": "339171;339171;339171;339171;339171;339171", "user_id": "186569870" } ]
Ambil data fitur dari fitur model
API
// Ambil data fitur dari fitur model berdasarkan join ID dan entitas fitur.
GetOnlineFeatures(joinIds map[string][]interface{}) ([]map[string]interface{}, error) // Ambil data fitur tentang entitas tertentu dari fitur model berdasarkan join ID.
GetOnlineFeaturesWithEntity(joinIds map[string][]interface{}, featureEntityName string) ([]map[string]interface{}, error)Parameter
Parameter | Deskripsi | |
joinIds | Kumpulan pasangan nilai-kunci dari join ID. Kunci adalah nama join ID dan nilainya adalah nilai join ID. | |
featureEntityName | Menentukan nama entitas fitur yang ingin Anda ambil datanya. | |
Contoh kode
Setiap fitur model dapat dikaitkan dengan beberapa entitas fitur. Anda dapat menentukan beberapa join ID untuk mengambil fitur yang sesuai.
Contoh kode berikut menentukan dua join ID: user_id dan item_id. Anda harus menentukan semua join ID yang telah dikonfigurasikan.
// dapatkan proyek berdasarkan nama
project, err := client.GetProject("fs_test_ots")
if err != nil {
// t.Fatal(err)
}
// dapatkan ModelFeature berdasarkan nama
model_feature := project.GetModelFeature("rank")
if model_feature == nil {
// t.Fatal("model feature not exist")
}
// dapatkan fitur online
features, err := model_feature.GetOnlineFeatures(map[string][]interface{}{"user_id": {"100000676", "100004208"}, "item_id":{"238038872", "264025480"}} )Anda juga dapat menentukan entitas fitur untuk mengambil fiturnya.
features, err := model_feature.GetOnlineFeaturesWithEntity(map[string][]interface{}{"user_id": {"100000676", "100004208"}}, "user" )Respon Sukses: Ambil Data dari Fitur Model (Tidak Termasuk Fitur Urutan)
[ { "age":26, "city":"Shenyang", "gender":"male", "user_id":"100000676" }, { "age":23, "city":"Xi'an", "gender":"male", "user_id":"100004208" } ]Respon Sukses: Ambil Data dari Fitur Model (Termasuk Fitur Urutan)
Saat mendaftarkan fitur model, Anda dapat menentukan fitur urutan offline yang ingin digunakan untuk pelatihan model. Fitur urutan offline yang ditentukan disinkronkan ke penyimpanan data online. Kemudian, Anda dapat memperoleh fitur urutan online yang sesuai menggunakan FeatureStore SDK untuk Go.
Secara umum, entitas fitur urutan adalah pengguna. Contoh kode berikut menentukan dua
join ID:user_iddanitem_id. Anda harus menentukan semua join ID yang telah dikonfigurasikan.Tabel berikut menjelaskan konfigurasi fitur urutan yang digunakan dalam contoh ini.
Bidang fitur urutan offline
Nama event
Panjang urutan
Nama fitur urutan online
click_seq_50_seq
click
50
click_seq_50_seq
Contoh Keluaran
[ { "age": 51, "author": 147848300, "category": "7", "city": "", "click_count": 0, "click_seq_50_seq": "216751275;228787053;220852269;242884721", "click_seq_50_seq__event": "click;click;click;click", "click_seq_50_seq__event_time": "1699128398;1699128398;1699118623;1699118623", "click_seq_50_seq__item_id": "216751275;228787053;220852269;242884721", "click_seq_50_seq__playtime": "65.40;72.06;104.69;62.74", "click_seq_50_seq__ts": "391447;391447;401222;401222", "duration": 48, "follow_cnt": 2, "follower_cnt": 0, "gender": "female", "item_cnt": 0, "item_id": 299485479, "praise_count": 2, "pub_time": 1697885713, "register_time": 1696582012, "tags": "0", "title": "#Workout tracking", "user_id": "186569075" }, { "age": 28, "author": 119734983, "category": "18", "city": "", "click_count": 0, "click_seq_50_seq": "201741544;236327912;293320498", "click_seq_50_seq__event": "click;click;click", "click_seq_50_seq__event_time": "1699178245;1699178245;1699178245", "click_seq_50_seq__item_id": "201741544;236327912;293320498", "click_seq_50_seq__playtime": "97.41;70.32;135.21", "click_seq_50_seq__ts": "341600;341600;341600", "duration": 15, "follow_cnt": 0, "follower_cnt": 2, "gender": "male", "item_cnt": 0, "item_id": 207474427, "praise_count": 79, "pub_time": 1697731285, "register_time": 1699135393, "tags": "1", "title": "#Idiom story", "user_id": "186569870" } ]