全部产品
Search
文档中心

Platform For AI:FeatureStore SDK untuk Java

更新时间:Jul 06, 2025

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.

Catatan

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 gabungan berikut ditentukan: user_id dan item_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
          }
        ]