perf: parquet based data export
This commit is contained in:
@@ -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" }
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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::{
|
||||
|
||||
Reference in New Issue
Block a user