このトピックでは、FeatureStore SDK for Javaを使用して、オンラインデータストアからオフライン機能、リアルタイム機能、シーケンス機能などのデータを読み取る方法について説明します。
前提条件
プロジェクト、フィーチャエンティティ、フィーチャビュー、およびモデルフィーチャがFeatureStoreで作成されます。 データはオンラインとオフラインのデータストア間で同期されます。 詳細については、「FeatureStoreでのプロジェクトの設定」をご参照ください。
Alibaba CloudアカウントのAccessKeyペアが取得されます。 詳細については、「AccessKey の作成」をご参照ください。
AccessKey IDとAccessKeyシークレットを環境変数に格納することを推奨します。 詳細については、「Alibaba Cloud Darabonba SDK For Python」トピックの手順2: 環境変数の設定セクションをご参照ください。
FeatureStore SDK for Javaのインストール
FeatureStore SDK for Javaをダウンロードしてインストールします。
FeatureStoreクライアントの初期化
API
Configurationクラスを初期化します。
Configuration configuration = new Configuration(regionId,accessKeyId,accessKeySecret,projectName);
Parameters
パラメーター | 例 | 説明 |
regionId | cn-hangzhou | FeatureStoreクライアントが存在するリージョンのID。 |
accessKeyId | System.getenv("ACCESS_KEY_ID") | 環境変数から取得されるAccessKey ID。 |
accessKeySecret | System.getenv("ACCESS_KEY_SECRET") | 環境変数から取得されるAccessKeyシークレット。 |
projectName | holo_pro | FeatureStoreプロジェクトの名前。 |
FeatureStoreクライアントを仮想プライベートクラウド (VPC) で実行して、FeatureStore SDK for Javaがオンラインデータストアに直接接続できるようにする必要があります。 たとえば、FeatureStore SDK For Javaは、特定のVPC経由でのみHologresインスタンスまたはGraphComputeインスタンスにアクセスできます。
例
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");// The System.getenv("") method is used to obtain the value of an environment variable.
accessKey = System.getenv("ACCESS_KEY_SECRET");
}
}
// Initialize the Configuration class.
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);
フィーチャビューからフィーチャデータを取得する
API
public FeatureResult getOnlineFeatures(String[] joinIds);// Query the full table without specifying aliases for specific fields.
public FeatureResult getOnlineFeatures(String[] joinIds, String[] features, Map<String, String> aliasFields);
Parameters
パラメーター | 例 | 説明 |
joinIds | {"100001167","100001168"} | 主キーフィールドの値の配列。 主キーフィールドの指定された値に基づいてデータが照会されます。 |
features | {"user_id","city"} 注: 新しいString[]{"*"} を使用して、テーブル内のすべてのフィールドを照会できます。 | テーブルで照会されるフィールド。 |
aliasFields | {"user_id":"uId"} | テーブルのフィールドに指定されているエイリアス。 エイリアスは、返されるデータに表示されます。 |
例
例1: オフラインフィーチャビューからフィーチャデータを取得する
オフラインフィーチャビューを取得し、フィーチャビューからフィーチャデータを取得する
// get FeatureView By name //mo1(Offline FeatureView) FeatureView mo1 = project.getFeatureViewMap().get("mo1"); if(mo1==null){ throw new RuntimeException("This featureView is not exist"); } HashMap<String, String> ss = new HashMap<>(); FeatureResult features = mo1.getOnlineFeatures(new String[]{"100001167", "100004088","100006646"}, new String[]{"*"}, ss);
レスポンスの例
[ { "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", } ]
例2: リアルタイムフィーチャビューからフィーチャデータを取得する
リアルタイムフィーチャビューを取得し、フィーチャビューからフィーチャデータを取得する
// get FeatureView By name //tfv1(Online FeatureView) FeatureView tfv1 = project.getFeatureViewMap().get("tfv1"); if(tfv1==null){ throw new RuntimeException("This featureView is not exist"); } //Get data FeatureResult rf = tfv1.getOnlineFeatures(new String[]{"35d3d5a52a7515c2ca6bb4d8e965149b", "0ab7e3efacd56983f16503572d2b9915","84dfd3f91dd85ea105bc74a4f0d7a067"}, new String[]{"*"}, ss);
レスポンスの例
[ { "USER_MD5":"35d3d5a52a7515c2ca6bb4d8e965149b", "USER_NICKNAME":"Tom" } { "USER_MD5":"0ab7e3efacd56983f16503572d2b9915", "USER_NICKNAME":"Jack" } { "USER_MD5":"84dfd3f91dd85ea105bc74a4f0d7a067", "USER_NICKNAME":"Jerry" } ]
例3: シーケンスフィーチャビューからフィーチャデータを取得する
シーケンスフィーチャビューを取得し、フィーチャビューからフィーチャデータを取得する
// get FeatureView By name //ots_seq2(Sequence FeatureView) SequenceFeatureView ots_seq2 = project.getSeqFeatureView("ots_seq2"); if(ots_seq2==null){ throw new RuntimeException("This featureView is not exist"); } //get data FeatureResult features2 = ots_seq2.getOnlineFeatures(new String[]{"157843277", "157843278"});
レスポンスの例
[ { "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" } ]
モデルフィーチャからフィーチャデータを取得する
API
public FeatureResult getOnlineFeatures(Map<String, List<String>> joinIds);
public FeatureResult getOnlineFeaturesWithEntity(Map<String, List<String>> joinIds, String featureEntityName);
Parameters
パラメーター | 例 | 説明 |
joinIds | [ "user_id": {"101598051" 、 "101598471" 、 「101601287」 } ] | 結合ID値のマップ。 各map要素は、特定の結合IDのキーと値のペアです。 キーは結合IDの名前ですが、値は結合IDの値です。 |
featureEntityName | "user" | フィーチャデータをクエリするフィーチャエンティティの名前。 |
例
例1: モデルフィーチャからフィーチャデータを取得し、シーケンスフィーチャデータを除く
各モデル特徴は、複数の特徴エンティティに関連付けることができる。 複数の結合IDを指定して、対応するフィーチャを一度に取得できます。
この例では、
user_id
およびitem_id
のjoin id
が指定されています。 各結合IDに対して、同じ数の値を指定する必要があります。//Obtain model features 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"));
モデルフィーチャに関連付けられているすべてのフィーチャエンティティからフィーチャデータを取得
モデルフィーチャに関連付けられているすべてのフィーチャエンティティからフィーチャデータを取得する
//Get the data that all associated entities contain FeatureResult fr1 = mf1.getOnlineFeatures(mm);
レスポンスの例
[ { "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" } ]
モデルフィーチャに関連付けられている特定のフィーチャエンティティのフィーチャデータの取得
モデルフィーチャに関連付けられている特定のフィーチャエンティティのフィーチャデータを取得する
// Retrieve only the feature data of the server feature entity. FeatureResult fr2 = mf1.getOnlineFeaturesWithEntity(mm, "server");
レスポンスの例
[ { "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" } ]
例2: モデルフィーチャからフィーチャデータ (シーケンスフィーチャデータを含む) を取得
各モデル特徴は、複数の特徴エンティティに関連付けることができる。 複数の結合IDを指定して、対応するフィーチャを一度に取得できます。
この例では、
user_id
という結合IDが使用されています。// Retrieve feature data from a model feature, including sequence feature data. Model mdt1 =project.getModelFeature("mdt1"); if(mdt1==null){ throw new RuntimeException("This modelFeature is not exist"); } HashMap<String, List<String>> fsmap = new HashMap<>(); fsmap.put("user_id",Arrays.asList("100001167","100024146")); fsmap.put("item_id",Arrays.asList("200138790","200385417"));
モデルフィーチャに関連付けられているすべてのフィーチャエンティティからフィーチャデータを取得
モデルフィーチャに関連付けられているすべてのフィーチャエンティティからフィーチャデータを取得する
FeatureResult fr3 = mdt2.getOnlineFeatures(fsmap);
レスポンスの例
[ { "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, } ]
モデルフィーチャに関連付けられている特定のフィーチャエンティティのフィーチャデータの取得
モデルフィーチャに関連付けられている特定のフィーチャエンティティのフィーチャデータを取得する
FeatureResult fr4 = mdt1.getOnlineFeaturesWithEntity(fsmap, "client");
レスポンスの例
[ { "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 } ]