全部产品
Search
文档中心

Platform For AI:FeatureStore SDK for Java

更新时间:Mar 06, 2026

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.

Catatan

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, dan item_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_id untuk mengembalikan fitur-fitur tersebut bersamaan.

    Pada contoh ini, join_id berkorespondensi dengan user_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
          }
        ]