Topik ini menjelaskan cara menggunakan kit pengembangan perangkat lunak (SDK) Java untuk membaca data dari online store FeatureStore, mencakup fitur offline, fitur real-time, dan fitur sequence.
Prasyarat
-
Buat Proyek, entitas fitur, Tampilan fitur, dan fitur model di FeatureStore, lalu sinkronkan datanya. Untuk informasi selengkapnya, lihat Konfigurasikan proyek FeatureStore.
-
Dapatkan ID AccessKey dan Rahasia AccessKey untuk Akun Alibaba Cloud Anda. Untuk informasi selengkapnya, lihat Buat AccessKey.
Simpan ID AccessKey dan Rahasia AccessKey Anda dalam variabel lingkungan lokal. Untuk informasi selengkapnya, lihat Konfigurasikan variabel lingkungan.
Instal FeatureStore Java SDK
Unduh dan instal FeatureStore Java SDK.
Inisialisasi client FeatureStore
API
Inisialisasi kelas Configuration.
Configuration configuration = new Configuration(regionId,accessKeyId,accessKeySecret,projectName);
Parameter
|
Parameter |
Contoh |
Deskripsi |
|
regionId |
cn-hangzhou |
Wilayah |
|
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. |
SDK terhubung langsung ke online store. Client harus dijalankan dalam lingkungan Virtual Private Cloud (VPC). Misalnya, Anda hanya dapat terhubung ke instans Hologres dari dalam 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");// System.getenv("") mendapatkan nilai variabel lingkungan.
accessKey = System.getenv("ACCESS_KEY_SECRET");
}
}// Inisialisasi kelas konfigurasi.
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);// Menanyakan seluruh tabel tanpa menggunakan alias.
public FeatureResult getOnlineFeatures(String[] joinIds, String[] features, Map<String, String> aliasFields);
Parameter
|
Parameter |
Contoh |
Deskripsi |
|
joinIds |
{"100001167","100001168"} |
Array nilai kunci primary. Kueri mengembalikan data berdasarkan nilai-nilai ini. |
|
features |
{"user_id","city"} Catatan: Untuk mendapatkan semua bidang, gunakan new String[]{"*"}. |
Bidang yang dikueri dari tabel data. |
|
aliasFields |
{"user_id":"uId"} |
Alias untuk bidang tabel data. Alias ini ditampilkan dalam data yang dikembalikan. |
Contoh
-
Contoh 1: Ambil data fitur dari Tampilan fitur offline
-
Ambil Tampilan fitur dan data yang disinkronkan dari tabel offline
// Dapatkan Tampilan fitur berdasarkan nama. // mo1 (Offline FeatureView) 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); -
Tanggapan contoh
[ { "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
-
Ambil Tampilan fitur dan data dari tabel online
// Dapatkan Tampilan fitur berdasarkan nama. // tfv1 (Online FeatureView) 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); -
Tanggapan contoh
[ { "USER_MD5":"35d3d5a52a7515c2ca6bb4d8e965149b", "USER_NICKNAME":"Miss Sini" } { "USER_MD5":"0ab7e3efacd56983f16503572d2b9915", "USER_NICKNAME":"Love You" } { "USER_MD5":"84dfd3f91dd85ea105bc74a4f0d7a067", "USER_NICKNAME":"Elementary Student's Dad" } ]
-
-
Contoh 3: Ambil data fitur dari Tampilan fitur sequence
-
Ambil Tampilan fitur dan data yang disinkronkan dari tabel offline
// Dapatkan Tampilan fitur berdasarkan nama. // ots_seq2 (Sequence FeatureView) 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"}); -
Tanggapan contoh
[ { "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 join ID. Kunci adalah nama join ID dan nilai adalah nilai join ID tersebut. |
|
featureEntityName |
"user" |
Mengambil data tertentu dari salah satu sisi FeatureEntity. |
Contoh
-
Contoh 1: Ambil data fitur dari fitur model yang tidak mencakup Tampilan fitur sequence
ModelFeature dapat dikaitkan dengan beberapa FeatureEntity, dan Anda dapat menetapkan beberapa join_ids untuk mengembalikan semua fitur terkait sekaligus.
Contoh ini berisi masing-masing dua:
join_id,user_id, danitem_id. Saat mengambil fitur, Anda harus menyediakan jumlah ID yang sama untuk setiap jenis.// 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 dalam fitur model
-
Ambil data fitur dari semua entitas fitur dalam fitur model
// Dapatkan data yang dimuat oleh semua entitas terkait. FeatureResult fr1 = mf1.getOnlineFeatures(mm); -
Tanggapan contoh
[ { "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_Check-in" }, { "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_Check-in" } ]
-
-
Ambil data fitur dari entitas fitur tertentu dalam fitur model
-
Ambil data fitur dari entitas fitur tertentu dalam fitur model
// Dapatkan hanya data dari entitas sisi server. FeatureResult fr2 = mf1.getOnlineFeaturesWithEntity(mm, "server"); -
Tanggapan contoh
[ { "item_id":200004157, "author":137649839, "category":2, "click_count":0, "duration":18.0, "praise_count":30, "pub_time":1698208690, "title":"#Workout_Check-in" }, { "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_Check-in" } ]
-
-
-
Contoh 2: Ambil data fitur dari fitur model yang mencakup Tampilan fitur sequence
ModelFeature dapat dikaitkan dengan beberapa FeatureEntity. Anda dapat menetapkan beberapa
join_iduntuk mengembalikan fitur-fitur tersebut bersamaan.Pada contoh ini,
join_idberkorespondensi denganuser_id.// Dapatkan data dari fitur model yang berisi fitur serialisasi. 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 entitas fitur dalam fitur model
-
Ambil data fitur dari entitas fitur dalam fitur model
FeatureResult fr3 = mdt2.getOnlineFeatures(fsmap); -
Tanggapan contoh
[ { "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 dalam fitur model
-
Ambil data fitur dari entitas fitur tertentu dalam fitur model
FeatureResult fr4 = mdt1.getOnlineFeaturesWithEntity(fsmap, "client"); -
Tanggapan contoh
[ { "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 } ]
-
-