2次发布
0.1.1 | 2024年6月14日 |
---|---|
0.1.0 | 2024年5月26日 |
#325 in 数据库接口
1.5MB
19K SLoC
GaiaAccess
一个简单、类型安全的crate,用于访问包含数百万颗恒星数据的Gaia ESA档案中的数据。
用法
为了保持需要编译的代码量在一个可控范围内,每个数据表都隐藏在功能标志后面。它们遵循命名约定 <schema>_<table>
。查看文档中的功能标志选项卡以获取所有功能的列表。
在你的Cargo.toml
中,你需要启用你想要访问的表格,例如:
[dependencies]
gaia_access = { version = "0.1.0", features = ["gaiadr3_gaia_source"] }
有累积功能标志可用于模式。如果你想使用所有或大多数的gaiadr3表格,例如,你可以通过以下方式依赖这个crate:
[dependencies]
gaia_access = { version = "0.1.0", features = ["gaiadr3"] }
你的代码中的数据查询是通过构建器模式创建的。返回的对象包含一个数据Vec,它对于所有表格行都包含一个从列到值的HashMap。该值的类型是字符串、浮点数和null的联合。知道期望列的类型,它可以被提取。
use gaia_access::{
condition::GaiaCondition,
data::gaiadr3::{
gaia_source::{gaia_source, Col},
gaiadr3,
},
query::GaiaQueryBuilder,
result::{get_float, get_string, GaiaCellData, GaiaResult},
};
// Get the designation and temperature of the first three stars that have a visible magnitude brighter than 5.
let magnitude_threshold = 5.0;
let query_result = GaiaQueryBuilder::new(gaiadr3, gaia_source)
.top(3)
.select(vec![
Col::designation,
Col::teff_gspphot,
])
.where_clause(GaiaCondition::LessThan(
Col::phot_g_mean_mag,
magnitude_threshold,
))
.do_query()
.unwrap();
// From the first entry of the returned data, get the temperature value.
let temperature: &GaiaCellData = query_result
.data[0]
.get(&Col::teff_gspphot)
.unwrap();
// Convert the data to a type that can be used by the rest of rust. There is no guarantee that the data exists, hence the Option return type.
let temperature: Option<f64> = get_float(temperature);
贡献
贡献非常受欢迎。我考虑到我特定的使用场景编写了这个crate,所以它远未完善,除非我发现除了我自己之外还有人在使用它,否则我可能只会扩展它。因此,以问题形式提出的功能请求同样受欢迎。
对新Gaia表格的支持可能不需要任何请求,因为实现是完全自动化的,我创建了一个每周计划的GitHub Workflow来检查更新。
开发
处理大量模式、表格和列的类型是自动的。这个过程的核心是generate_code.py
及其包装脚本generate_code.sh
。此脚本从Gaia档案加载所有可用表格的XML,并将其转换为Rust代码。
这意味着手动修改src/data
中的任何代码都是徒劳的。如果你认为那里应该改进什么,请修改Python脚本。
同样,这也适用于Cargo.toml
中的功能列表。
因为这个crate没有提供默认功能,所以仅仅执行cargo test
将会失败。您需要运行cargo test --all-features
,这正是test.sh
脚本所执行的操作。
许可证
本软件在MIT许可证下分发。简单来说,这意味着所有代码都是公开的,您可以免费使用它而无需支付任何费用。
有关数据的许可证,请参阅Gaia数据许可证。
依赖关系
~4–18MB
~215K SLoC