Topik ini menjelaskan cara menggunakan FeatureStore SDK untuk Java guna membaca data seperti fitur offline, fitur real-time, dan fitur urutan dari penyimpanan data online.
Prasyarat
Sebuah Proyek, entitas fitur, Tampilan fitur, dan fitur model harus dibuat di FeatureStore. Data disinkronkan antara penyimpanan data online dan offline. Untuk informasi lebih lanjut, lihat Konfigurasikan proyek di FeatureStore.
Pasangan AccessKey akun Alibaba Cloud Anda harus diperoleh. Untuk informasi lebih lanjut, lihat Buat pasangan AccessKey.
Disarankan untuk menyimpan ID AccessKey dan Rahasia AccessKey dalam variabel lingkungan. Untuk informasi lebih lanjut, lihat bagian Langkah 2: Konfigurasikan variabel lingkungan dari topik "Memulai dengan Alibaba Cloud Darabonba SDK untuk Python".
Instal FeatureStore SDK untuk Java
Unduh dan instal FeatureStore SDK untuk Java.
Inisialisasi klien FeatureStore
API
Inisialisasi kelas Configuration.
Configuration configuration = new Configuration(regionId,accessKeyId,accessKeySecret,projectName);Parameter
Parameter | Contoh | Deskripsi |
regionId | cn-hangzhou | ID wilayah tempat klien FeatureStore berada. |
accessKeyId | System.getenv("ACCESS_KEY_ID") | ID AccessKey yang diperoleh dari variabel lingkungan. |
accessKeySecret | System.getenv("ACCESS_KEY_SECRET") | Rahasia AccessKey yang diperoleh dari variabel lingkungan. |
projectName | holo_pro | Nama proyek FeatureStore. |
Klien FeatureStore harus berjalan di virtual private cloud (VPC) agar FeatureStore SDK untuk Java dapat langsung terhubung ke penyimpanan data online. Sebagai contoh, FeatureStore SDK untuk Java hanya dapat mengakses instance Hologres melalui VPC tertentu.
Contoh
public class Constants {
public static String accessId = "";
public static String accessKey = "";
public static String host = "paifeaturestore.cn-hangzhou.aliyuncs.com";
static {
accessId = System.getenv("ACCESS_KEY_ID");// Metode System.getenv("") digunakan untuk mendapatkan nilai variabel lingkungan.
accessKey = System.getenv("ACCESS_KEY_SECRET");
}
}// Inisialisasi kelas Configuration.
Configuration configuration = new Configuration("cn-hangzhou",Constants.accessId,
Constants.accessKey,"dec8");
configuration.setDomain(Constants.host);
ApiClient apiClient = new ApiClient(configuration);
FeatureStoreClient fsclient = new FeatureStoreClient(apiClient);Ambil data fitur dari tampilan fitur
API
public FeatureResult getOnlineFeatures(String[] joinIds);// Kueri tabel penuh tanpa menentukan alias untuk bidang tertentu.
public FeatureResult getOnlineFeatures(String[] joinIds, String[] features, Map<String, String> aliasFields);Parameter
Parameter | Contoh | Deskripsi |
joinIds | {"100001167","100001168"} | Array nilai bidang kunci utama. Data dikueri berdasarkan nilai-nilai yang ditentukan dari bidang kunci utama. |
features | {"user_id","city"} Catatan: Anda dapat menggunakan new String[]{"*"} untuk mengkueri semua bidang dalam tabel. | Bidang yang akan dikueri dalam tabel. |
aliasFields | {"user_id":"uId"} | Alias yang ditentukan untuk bidang dalam tabel. Alias tersebut ditampilkan dalam data yang dikembalikan. |
Contoh
Contoh 1: Ambil data fitur dari tampilan fitur offline
Dapatkan tampilan fitur offline dan ambil data fitur dari tampilan fitur tersebut.
// dapatkan FeatureView Berdasarkan nama //mo1(Tampilan Fitur Offline) FeatureView mo1 = project.getFeatureViewMap().get("mo1"); if(mo1==null){ throw new RuntimeException("Tampilan fitur ini tidak ada"); } HashMap<String, String> ss = new HashMap<>(); FeatureResult features = mo1.getOnlineFeatures(new String[]{"100001167", "100004088","100006646"}, new String[]{"*"}, ss);Respon sampel
[ { "user_id":100001167, "gender":"male", "age":28, "city":"Shenyang" "item_cnt":0, "follow_cnt":0, "follower_cnt":0, "register_time":1696658585, "tags":"2", } { "user_id":100004088, "gender":"female", "age":28, "city":"Changchun" "item_cnt":0, "follow_cnt":8, "follower_cnt":0, "register_time":1695618449, "tags":"1", } { "user_id":100006646, "gender":"male", "age":28, "city":"Changchun" "item_cnt":0, "follow_cnt":1, "follower_cnt":1, "register_time":1698213339, "tags":"1", } ]
Contoh 2: Ambil data fitur dari tampilan fitur real-time
Dapatkan tampilan fitur real-time dan ambil data fitur dari tampilan fitur tersebut.
// dapatkan FeatureView Berdasarkan nama //tfv1(Tampilan Fitur Online) FeatureView tfv1 = project.getFeatureViewMap().get("tfv1"); if(tfv1==null){ throw new RuntimeException("Tampilan fitur ini tidak ada"); } //Dapatkan data FeatureResult rf = tfv1.getOnlineFeatures(new String[]{"35d3d5a52a7515c2ca6bb4d8e965149b", "0ab7e3efacd56983f16503572d2b9915","84dfd3f91dd85ea105bc74a4f0d7a067"}, new String[]{"*"}, ss);Respon sampel
[ { "USER_MD5":"35d3d5a52a7515c2ca6bb4d8e965149b", "USER_NICKNAME":"Tom" } { "USER_MD5":"0ab7e3efacd56983f16503572d2b9915", "USER_NICKNAME":"Jack" } { "USER_MD5":"84dfd3f91dd85ea105bc74a4f0d7a067", "USER_NICKNAME":"Jerry" } ]
Contoh 3: Ambil data fitur dari tampilan fitur urutan
Dapatkan tampilan fitur urutan dan ambil data fitur dari tampilan fitur tersebut.
// dapatkan FeatureView Berdasarkan nama //ots_seq2(Tampilan Fitur Urutan) SequenceFeatureView ots_seq2 = project.getSeqFeatureView("ots_seq2"); if(ots_seq2==null){ throw new RuntimeException("Tampilan fitur ini tidak ada"); } //dapatkan data FeatureResult features2 = ots_seq2.getOnlineFeatures(new String[]{"157843277", "157843278"});Respon sampel
[ { "click _50_seq_playtime":"null;15.0", "click_50_seq_event_time":"null;1704684504747", "click_50_seq_ts":"625662604;625662604", "user_id":"157843277", "click_50_seq":"null;200167895", "click_50_seq_event":"null;click", "click_50_seq_item_id":"null;200167895" } { "click_50_seq_playtime":"null;15.0", "click_50_seq_event_time":"null;1704684504747", "click_50_seq_ts":"625662604;625662604", "user_id":"157843278", "click_50_seq":"null;200167895", "click_50_seq_event":"null;click", "click_50_seq_item_id":"null;200167895" } ]
Ambil data fitur dari fitur model
API
public FeatureResult getOnlineFeatures(Map<String, List<String>> joinIds);
public FeatureResult getOnlineFeaturesWithEntity(Map<String, List<String>> joinIds, String featureEntityName);Parameter
Parameter | Contoh | Deskripsi |
joinIds | [ "user_id": {"101598051", "101598471", "101601287" } ] | Peta nilai ID gabungan. Setiap elemen peta adalah pasangan nilai-kunci dari ID gabungan tertentu. Kunci adalah nama ID gabungan, sedangkan nilainya adalah nilai dari ID gabungan. |
featureEntityName | "user" | Nama entitas fitur yang ingin Anda kueri datanya. |
Contoh
Contoh 1: Ambil data fitur dari fitur model, tidak termasuk data fitur urutan
Setiap fitur model dapat dikaitkan dengan beberapa entitas fitur. Anda dapat menentukan beberapa ID gabungan untuk mengambil fitur yang sesuai sekaligus.
Dalam contoh ini,
ID gabunganberikut ditentukan:user_iddanitem_id. Untuk setiap ID gabungan, jumlah nilai yang sama harus ditentukan.//Dapatkan fitur model Model mf1 = project.getModelFeature("model_ots1"); HashMap<String, List<String>> mm = new HashMap<>(); mm.put("user_id", Arrays.asList("101598051", "101598471", "101601287")); mm.put("item_id",Arrays.asList("200004157", "200006185", "200034730"));Ambil data fitur dari semua entitas fitur yang terkait dengan fitur model
Ambil data fitur dari semua entitas fitur yang terkait dengan fitur model.
//Dapatkan data yang dimiliki semua entitas terkait FeatureResult fr1 = mf1.getOnlineFeatures(mm);Respon sampel
[ { "user_id":101598051, "gender":"male", "age":28, "city":"Hangzhou", "item_cnt":0, "follow_cnt":0, "follower_cnt":0, "register_time":1695785665, "tags":"1", "item_id":200004157, "author":137649839, "category":2, "click_count":0, "duration":18.0, "praise_count":30, "pub_time":1698208690, "title":"#Workout Tracking" } { "user_id":200004157, "gender":"female", "age":31, "city":"Shenzhen" "item_cnt":0, "follow_cnt":1, "follower_cnt":0, "register_time":1695726582, "tags":"1", "item_id":200006185, "author":134195601, "category":14, "click_count":50, "duration":55.0, "praise_count":21, "pub_time":1696700908, "title":"#Idiom Story" } { "user_id":101601287, "gender":"female", "age":33, "city":"Shenzhen" "item_cnt":0, "follow_cnt":0, "follower_cnt":55, "register_time":1697519102, "tags":"0", "item_id":200034730, "author":112739045, "category":6, "click_count":2, "duration":9.0, "praise_count":0, "pub_time":1696568654, "title":"#Workout Tracking" } ]
Ambil data fitur dari entitas fitur tertentu yang terkait dengan fitur model
Ambil data fitur dari entitas fitur tertentu yang terkait dengan fitur model.
// Ambil hanya data fitur dari entitas fitur server. FeatureResult fr2 = mf1.getOnlineFeaturesWithEntity(mm, "server");Respon sampel
[ { "item_id":200004157, "author":137649839, "category":2, "click_count":0, "duration":18.0, "praise_count":30, "pub_time":1698208690, "title":"#Workout Tracking" }, { "item_id":200006185, "author":134195601, "category":14, "click_count":50, "duration":55.0, "praise_count":21, "pub_time":1696700908, "title":"#Idiom Story" }, { "item_id":200034730, "author":112739045, "category":6, "click_count":2, "duration":9.0, "praise_count":0, "pub_time":1696568654, "title":"#Workout Tracking" } ]
Contoh 2: Ambil data fitur dari fitur model, termasuk data fitur urutan
Setiap fitur model dapat dikaitkan dengan beberapa entitas fitur. Anda dapat menentukan beberapa ID gabungan untuk mengambil fitur yang sesuai sekaligus.
Dalam contoh ini, ID gabungan berikut digunakan:
user_id.// Ambil data fitur dari fitur model, termasuk data fitur urutan. Model mdt1 =project.getModelFeature("mdt1"); if(mdt1==null){ throw new RuntimeException("Fitur model ini tidak ada"); } HashMap<String, List<String>> fsmap = new HashMap<>(); fsmap.put("user_id",Arrays.asList("100001167","100024146")); fsmap.put("item_id",Arrays.asList("200138790","200385417"));Ambil data fitur dari semua entitas fitur yang terkait dengan fitur model
Ambil data fitur dari semua entitas fitur yang terkait dengan fitur model.
FeatureResult fr3 = mdt2.getOnlineFeatures(fsmap);Respon sampel
[ { "click_50_seq_event_time":"null;1698170945", "gender":"male", "click_50_seq_ts":"1704292557212;1704292557212", "city":"Shenyang", "item_id":"200138790", "click_50_seq":"null;204153583", "author":186784264, "pub_time":1696574947, "follower_cnt":0, "follow_cnt":0, "item_cnt":0, "click_count":2, "title":"#Idiom Story", "register_time":1696658585, "tags":2, "duration":13.0, "click_50_seq_playtime":"null;98.93932923011255", "user_id":"100001167", "praise_count":3, "click_50_seq_event":null;click, "category":20, "click_50_seq_item_id":null;204153583, "age":28, } { "click_50_seq_event_time":"null;1698180365", "gender":"male", "click_50_seq_ts":"1704292547792;1704292547792;1704292547792", "city":"Ningbo", "item_id":200385417, "click_50_seq":"null;299049390", "author":189247964, "pub_time":1696432224, "follower_cnt":47, "follow_cnt":0, "item_cnt":0, "click_count":4, "title":"#Idiom Story", "register_time":1697253820, "tags":1, "duration":"9.0", "click_50_seq_playtime":"null;32.15018252408633", "user_id":100024146, "praise_count":0, "click_50_seq_event":"null;click", "category":0, "click_50_seq_item_id":"null;299049390", "age":28, } { "click_50_seq_event_time":"null;1698170945", "gender":"male", "click_50_seq_ts":"1704292557212;1704292557212", "city":"Shenyang", "item_id":200138790, "click_50_seq":"null;204153583", "author":186784264, "pub_time":1696574947, "follower_cnt":0, "follow_cnt":0, "item_cnt":0, "click_count":2, "title":"#Idiom Story", "register_time":1696658585, "tags":2, "duration":13.0, "click_50_seq_playtime":"null;98.93932923011255", "user_id":"100001167", "praise_count":3, "click_50_seq_event":"null;click", "category":20, "click_50_seq_item_id":"null;204153583", "age":28, } { "click_50_seq_event_time":"null;1698180365", "gender":"male", "click_50_seq_ts":"1704292547792;1704292547792", "city":"Ningbo", "item_id":200385417, "click_50_seq":"null;299049390", "author":189247964, "pub_time":1696432224, "follower_cnt":47, "follow_cnt":0, "item_cnt":0, "click_count":4, "title":"#Idiom Story", "register_time":1697253820, "tags":1, "duration":9.0 "click_50_seq_playtime":"null;32.15018252408633", "user_id":"100024146", "praise_count":"0", "click_50_seq_event":"null;click", "category":0, "click_50_seq_item_id":"null;299049390", "age":28, } ]
Ambil data fitur dari entitas fitur tertentu yang terkait dengan fitur model
Ambil data fitur dari entitas fitur tertentu yang terkait dengan fitur model.
FeatureResult fr4 = mdt1.getOnlineFeaturesWithEntity(fsmap, "client");Respon sampel
[ { "click_50_seq_event_time":"null;1698170945" "gender":"male" "click_50_seq_ts":"1704292555552;1704292555552" "city":"Shenyang" "click_50_seq":"null;204153583" "follower_cnt":0 "follow_cnt":0 "item_cnt":0 "register_time":1696658585 "tags":2 "click_50_seq_playtime":"null;98.93932923011255" "user_id":"100001167" "click_50_seq_event":"null;click" "click_50_seq_item_id":"null;204153583" "age":28 } { "click_50_seq_event_time":"null;1698180365", "gender":"male", "click_50_seq_ts":1704292546132;1704292546132;1704292546132, "city":"Ningbo", "click_50_seq":"null;299049390" "follower_cnt":47, "follow_cnt":0, "item_cnt":0, "register_time":1697253820, "tags":"1", "click_50_seq_playtime":"null;32.15018252408633", "user_id":100024146, "click_50_seq_event":"null;click", "click_50_seq_item_id":"null;299049390", "age":28 } { "click_50_seq_event_time":"null;1698170945", "gender":"male", "click_50_seq_ts":"1704292555552;1704292555552", "city":"Shenyang", "click_50_seq":"null;204153583", "follower_cnt":0, "follow_cnt":0, "item_cnt":0, "register_time":1696658585, "tags":2, "click_50_seq_playtime":"null;98.93932923011255", "user_id":"100001167", "click_50_seq_event":"null;click", "click_50_seq_item_id":"null;204153583", "age":28 } { "click_50_seq_event_time":"null;1698180365", "gender":"male", "click_50_seq_ts":"1704292546132;1704292546132;1704292546132", "city":"Ningbo", "click_50_seq":"null;299049390", "follower_cnt":47, "follow_cnt":0, "item_cnt":0, "register_time":1697253820, "tags":1, "click_50_seq_playtime":"null;32.15018252408633" "user_id":"100024146", "click_50_seq_event":"null;click", "click_50_seq_item_id":"null;299049390", "age":28 } ]