use crate::config::HudiConfigs;
use crate::config::table::HudiTableConfig;
use crate::metadata::table::records::FilesPartitionRecord;
use std::collections::HashMap;
use std::sync::Arc;
pub(crate) type FileEntry = (String, i64, bool);
pub(crate) type ComparableRecord = (String, i32, Vec<FileEntry>);
pub(crate) fn metadata_table_configs(base_uri: &str) -> Arc<HudiConfigs> {
Arc::new(HudiConfigs::new([
(HudiTableConfig::BasePath.as_ref(), base_uri.to_string()),
(
HudiTableConfig::BaseFileFormat.as_ref(),
"hfile".to_string(),
),
(HudiTableConfig::RecordKeyFields.as_ref(), "key".to_string()),
(
HudiTableConfig::PopulatesMetaFields.as_ref(),
"false".to_string(),
),
("hoodie.record.merge.mode", "CUSTOM".to_string()),
(
"hoodie.record.merge.strategy.id",
"00000000-0000-0000-0000-000000000000".to_string(),
),
(
"hoodie.compaction.payload.class",
"org.apache.hudi.metadata.HoodieMetadataPayload".to_string(),
),
(
crate::config::read::HudiReadConfig::EndTimestamp.as_ref(),
crate::file_group::reader_v2::MAX_INSTANT_TIME.to_string(),
),
]))
}
pub(crate) fn comparable(records: &HashMap<String, FilesPartitionRecord>) -> Vec<ComparableRecord> {
let mut out: Vec<_> = records
.values()
.map(|r| {
let mut files: Vec<FileEntry> = r
.files
.values()
.map(|f| (f.name.clone(), f.size, f.is_deleted))
.collect();
files.sort();
(r.key.clone(), r.record_type as i32, files)
})
.collect();
out.sort();
out
}