All Products
Search
Document Center

Platform For AI:FeatureStore SDK untuk Go

Last Updated:Aug 21, 2026

FeatureStore SDK untuk Go memungkinkan Anda mengambil data fitur dari penyimpanan data online selama inferensi model—termasuk fitur offline, fitur real-time, dan fitur sekuens.

Prasyarat

Sebelum memulai, pastikan Anda telah:

  • Membuat Proyek FeatureStore, entitas fitur, tampilan fitur, dan fitur model, dengan data yang telah disinkronkan antara offline store dan online store. Lihat Konfigurasikan proyek FeatureStore.

  • Memiliki ID AccessKey dan Rahasia AccessKey. Lihat Buat Pasangan Kunci Akses.

  • Aplikasi Anda berjalan di dalam virtual private cloud (VPC). Klien FeatureStore terhubung ke penyimpanan data online melalui VPC—misalnya, Hologres hanya dapat diakses melalui VPC tertentu.

Simpan ID AccessKey dan Rahasia AccessKey Anda sebagai variabel lingkungan, bukan melakukan hardcoding di dalam kode Anda. Lihat Konfigurasikan variabel lingkungan.

Instal SDK

go get github.com/aliyun/aliyun-pai-featurestore-go-sdk/v2

Mulai

Langkah 1: Inisialisasi klien FeatureStore

API

func NewFeatureStoreClient(regionId, accessKeyId, accessKeySecret, projectName string, opts ...ClientOption) (*FeatureStoreClient, error)
Parameter Deskripsi
regionId Wilayah tempat instans berada
accessKeyId ID AccessKey yang digunakan untuk mengakses layanan penyimpanan
accessKeySecret Rahasia AccessKey yang digunakan untuk mengakses layanan penyimpanan
projectName Nama Proyek FeatureStore yang dibuat di Konsol Platform for AI (PAI)

Contoh

accessId := os.Getenv("AccessId")
accessKey := os.Getenv("AccessKey")

client, err := featurestore.NewFeatureStoreClient("cn-beijing", accessId, accessKey, "project_name")

Langkah 2: Ambil data fitur dari tampilan fitur

Gunakan GetOnlineFeatures untuk mengambil fitur dari tampilan fitur berdasarkan join ID (primary key).

API

GetOnlineFeatures(joinIds []interface{}, features []string, alias map[string]string) ([]map[string]interface{}, error)
Parameter Deskripsi
joinIds Join ID (primary key) dari fitur yang akan diambil
features Nama fitur yang akan diambil. Gunakan []string{"*"} untuk mengambil semua fitur dalam tampilan fitur
alias Alias untuk fitur yang diambil. Tidak berlaku untuk tampilan fitur sekuens

Contoh

// Dapatkan proyek berdasarkan nama
project, err := client.GetProject("project_name")
if err != nil {
    // t.Fatal(err)
}

// Dapatkan tampilan fitur berdasarkan nama
user_feature_view := project.GetFeatureView("feature_view_name")
if user_feature_view == nil {
    // t.Fatal("tampilan fitur tidak ada")
}

// Ambil fitur untuk dua kunci
features, err := user_feature_view.GetOnlineFeatures([]interface{}{"key1", "key2"}, []string{"*"}, nil)

Tanggapan: tampilan fitur offline atau real-time

Setiap elemen dalam tanggapan berkorespondensi dengan satu join ID. Bidang yang tidak memiliki data di penyimpanan data online akan mengembalikan string kosong.

[
    {
        "city": "Hefei",
        "follow_cnt": 1,
        "gender": "male",
        "user_id": "100043186"
    },
    {
        "city": "",
        "follow_cnt": 5,
        "gender": "male",
        "user_id": "100060369"
    }
]

Tanggapan: tampilan fitur sekuens

Fitur sekuens dikembalikan sebagai string yang dipisahkan titik koma. Setiap bidang sufiks (__event, __event_time, __item_id, __playtime, __ts) menyimpan nilai atribut yang sesuai dalam urutan yang sama dengan sekuens fitur.

Contoh berikut menggunakan konfigurasi fitur sekuens ini:

Bidang fitur sekuens offline Nama Peristiwa Panjang sekuens Nama fitur sekuens online
click_seq_50_seq click 50 click_seq_50_seq
expr_seq_100_seq expr 100 expr_seq_100
[
  {
    "click_seq_50_seq": "216751275;228787053;220852269;242884721",
    "click_seq_50_seq__event": "click;click;click;click",
    "click_seq_50_seq__event_time": "1699128398;1699128398;1699118623;1699118623",
    "click_seq_50_seq__item_id": "216751275;228787053;220852269;242884721",
    "click_seq_50_seq__playtime": "65.40;72.06;104.69;62.74",
    "click_seq_50_seq__ts": "389018;389018;398793;398793",
    "expr_seq_100": "207474427;216751275;228787053;247136848;270584471;299485479;220852269;242884721;245999124;265863707",
    "expr_seq_100__event": "expr;expr;expr;expr;expr;expr;expr;expr;expr;expr",
    "expr_seq_100__event_time": "1699128398;1699128398;1699128398;1699128398;1699128398;1699128398;1699118623;1699118623;1699118623;1699118623",
    "expr_seq_100__item_id": "207474427;216751275;228787053;247136848;270584471;299485479;220852269;242884721;245999124;265863707",
    "expr_seq_100__playtime": "0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00",
    "expr_seq_100__ts": "389018;389018;389018;389018;389018;389018;398793;398793;398793;398793",
    "user_id": "186569075"
  },
  {
    "click_seq_50_seq": "201741544;236327912;293320498",
    "click_seq_50_seq__event": "click;click;click",
    "click_seq_50_seq__event_time": "1699178245;1699178245;1699178245",
    "click_seq_50_seq__item_id": "201741544;236327912;293320498",
    "click_seq_50_seq__playtime": "97.41;70.32;135.21",
    "click_seq_50_seq__ts": "339171;339171;339171",
    "expr_seq_100": "201741544;224940066;236327912;240253906;247562151;293320498",
    "expr_seq_100__event": "expr;expr;expr;expr;expr;expr",
    "expr_seq_100__event_time": "1699178245;1699178245;1699178245;1699178245;1699178245;1699178245",
    "expr_seq_100__item_id": "201741544;224940066;236327912;240253906;247562151;293320498",
    "expr_seq_100__playtime": "0.00;0.00;0.00;0.00;0.00;0.00",
    "expr_seq_100__ts": "339171;339171;339171;339171;339171;339171",
    "user_id": "186569870"
  }
]

Langkah 3: Ambil data fitur dari fitur model

Setiap fitur model dapat dikaitkan dengan beberapa entitas fitur. Gunakan GetOnlineFeatures untuk mengambil semua fitur entitas sekaligus, atau GetOnlineFeaturesWithEntity untuk mengambil fitur untuk entitas tertentu.

API

// Ambil fitur untuk semua entitas
GetOnlineFeatures(joinIds map[string][]interface{}) ([]map[string]interface{}, error)

// Ambil fitur untuk entitas tertentu
GetOnlineFeaturesWithEntity(joinIds map[string][]interface{}, featureEntityName string) ([]map[string]interface{}, error)
Parameter Deskripsi
joinIds Peta nama join ID ke nilai-nilainya. Tentukan semua join ID yang dikonfigurasi untuk fitur model
featureEntityName Nama entitas fitur yang fiturnya akan diambil

Contoh

Fitur model dapat dikaitkan dengan beberapa entitas fitur. Contoh berikut menentukan dua join ID—user_id dan item_id—sesuai dengan konfigurasi fitur model.

// Dapatkan proyek berdasarkan nama
project, err := client.GetProject("fs_test_ots")
if err != nil {
    // t.Fatal(err)
}

// Dapatkan fitur model berdasarkan nama
model_feature := project.GetModelFeature("rank")
if model_feature == nil {
    // t.Fatal("fitur model tidak ada")
}

// Ambil fitur untuk semua join ID yang dikonfigurasi
features, err := model_feature.GetOnlineFeatures(map[string][]interface{}{"user_id": {"100000676", "100004208"}, "item_id": {"238038872", "264025480"}})

Untuk mengambil fitur hanya untuk entitas tertentu:

features, err := model_feature.GetOnlineFeaturesWithEntity(map[string][]interface{}{"user_id": {"100000676", "100004208"}}, "user")

Tanggapan: fitur model tanpa fitur sekuens

[
    {
        "age": 26,
        "city": "Shenyang",
        "gender": "male",
        "user_id": "100000676"
    },
    {
        "age": 23,
        "city": "Xi'an",
        "gender": "male",
        "user_id": "100004208"
    }
]

Tanggapan: fitur model dengan fitur sekuens

Saat mendaftarkan fitur model, Anda dapat menyertakan fitur sekuens offline untuk pelatihan model. Fitur sekuens tersebut disinkronkan ke penyimpanan data online dan dikembalikan bersama fitur biasa.

Entitas sekuens biasanya adalah pengguna. Contoh berikut menggunakan konfigurasi fitur sekuens ini:

Bidang fitur sekuens offline Nama event Panjang sekuens Nama fitur sekuens online
click_seq_50_seq click 50 click_seq_50_seq
[
  {
    "age": 51,
    "author": 147848300,
    "category": "7",
    "city": "",
    "click_count": 0,
    "click_seq_50_seq": "216751275;228787053;220852269;242884721",
    "click_seq_50_seq__event": "click;click;click;click",
    "click_seq_50_seq__event_time": "1699128398;1699128398;1699118623;1699118623",
    "click_seq_50_seq__item_id": "216751275;228787053;220852269;242884721",
    "click_seq_50_seq__playtime": "65.40;72.06;104.69;62.74",
    "click_seq_50_seq__ts": "391447;391447;401222;401222",
    "duration": 48,
    "follow_cnt": 2,
    "follower_cnt": 0,
    "gender": "female",
    "item_cnt": 0,
    "item_id": 299485479,
    "praise_count": 2,
    "pub_time": 1697885713,
    "register_time": 1696582012,
    "tags": "0",
    "title": "#Workout tracking",
    "user_id": "186569075"
  },
  {
    "age": 28,
    "author": 119734983,
    "category": "18",
    "city": "",
    "click_count": 0,
    "click_seq_50_seq": "201741544;236327912;293320498",
    "click_seq_50_seq__event": "click;click;click",
    "click_seq_50_seq__event_time": "1699178245;1699178245;1699178245",
    "click_seq_50_seq__item_id": "201741544;236327912;293320498",
    "click_seq_50_seq__playtime": "97.41;70.32;135.21",
    "click_seq_50_seq__ts": "341600;341600;341600",
    "duration": 15,
    "follow_cnt": 0,
    "follower_cnt": 2,
    "gender": "male",
    "item_cnt": 0,
    "item_id": 207474427,
    "praise_count": 79,
    "pub_time": 1697731285,
    "register_time": 1699135393,
    "tags": "1",
    "title": "#Idiom story",
    "user_id": "186569870"
  }
]