perf: parquet based data export

This commit is contained in:
mokurin000
2025-08-04 01:49:43 +08:00
parent 89d8177180
commit 73e1046be9
10 changed files with 642 additions and 17 deletions

View File

@@ -45,3 +45,5 @@ aes = "0.8.4"
cipher = { version = "0.4.4", features = ["block-padding"] }
bincode = { version = "2.0.1", optional = true }
parquet = { workspace = true }
parquet_derive = { version = "56.0.0" }

View File

@@ -1,6 +1,7 @@
use std::fmt::Display;
use bincode::{Decode, Encode};
use parquet_derive::ParquetRecordWriter;
use serde::{Deserialize, Serialize};
#[derive(Serialize)]
@@ -15,7 +16,7 @@ impl From<u32> for GetUserPreviewApi {
}
}
#[derive(Debug, Clone, Serialize, Deserialize, Encode, Decode)]
#[derive(Debug, Clone, Serialize, Deserialize, Encode, Decode, ParquetRecordWriter)]
#[serde(rename_all = "camelCase")]
pub struct GetUserPreviewApiResp {
pub user_id: u32,

View File

@@ -1,4 +1,5 @@
use bincode::{Decode, Encode};
use parquet_derive::ParquetRecordWriter;
use serde::{Deserialize, Serialize};
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
@@ -13,6 +14,42 @@ impl From<u32> for GetUserRegionApi {
}
}
impl From<GetUserRegionApiResp> for Vec<UserRegionFlatten> {
fn from(
GetUserRegionApiResp {
user_id,
user_region_list,
..
}: GetUserRegionApiResp,
) -> Self {
user_region_list
.into_iter()
.map(
|UserRegion {
region_id,
play_count,
created,
}| {
UserRegionFlatten {
user_id,
region_id,
play_count,
created,
}
},
)
.collect()
}
}
#[derive(Default, Debug, Clone, PartialEq, ParquetRecordWriter)]
pub struct UserRegionFlatten {
pub user_id: u32,
pub region_id: u32,
pub play_count: i64,
pub created: String,
}
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize, Encode, Decode)]
#[serde(rename_all = "camelCase")]
pub struct GetUserRegionApiResp {

View File

@@ -26,7 +26,9 @@ mod get_user_music_api;
pub use get_user_music_api::{GetUserMusicApi, GetUserMusicApiResp, UserMusic, UserMusicDetail};
mod get_user_region_api;
pub use get_user_region_api::{GetUserRegionApi, GetUserRegionApiResp, UserRegion};
pub use get_user_region_api::{
GetUserRegionApi, GetUserRegionApiResp, UserRegion, UserRegionFlatten,
};
mod dxrating;
pub use dxrating::{