4 个版本
0.2.0 | 2022 年 12 月 15 日 |
---|---|
0.1.2 | 2022 年 11 月 27 日 |
0.1.1 | 2022 年 11 月 24 日 |
0.1.0 | 2022 年 11 月 24 日 |
#1451 在 数据库接口 中
26KB
490 行
雪崩连接器
正在积极开发中。 目前最好直接指向 git,而不是 crates.io。
用法
将以下行添加到 Cargo.toml
snowflake-connector = { version = "0.2", features = ["derive"] }
目前,仅支持 密钥对身份验证。
您必须在应用程序执行目录下有文本文件 environment_variables/snowflake_private_key_path.txt
和 environment_variables/snowflake_public_key_path.txt
,这些文件必须存储密钥的路径。
开发设置
将您的公钥和私钥添加到 environment_variables/local
文件夹下(您需要创建 local
文件夹)。确保您的私钥命名为 rsa_key.p8
,您的公钥为 rsa_key.pub
。
通过更改其内容为 ./environment_variables/local/rsa_key.p8
,将 environment_variables/snowflake_private_key_path.txt
指向您的私钥
将 environment_variables/snowflake_public_key_path.txt
指向您的公钥: ./environment_variables/local/rsa_key.pub
确保忽略 environment_variables
目录。您不希望将密钥提交到仓库。
工作原理
以下示例未经过测试,但您可以得到基本思路
use snowflake_connector::{*, errors::SnowflakeError};
fn get_from_snowflake() -> Result<SnowflakeSQLResult<Test>, SnowflakeError> {
let connector = SnowflakeConnector::try_new("COMPANY.ACCOUNT", "ACCOUNT", "[email protected]")?;
connector
.execute("DB", "WH")
.sql("SELECT * FROM TEST_TABLE WHERE id = ? LIMIT 69")?
.add_binding(420)
.select::<Test>().await
}
fn main() {
if let Ok(data) = get_from_snowflake() {
println!("{:#?}", data)
} else {
panic!("Failed to retrieve data from snowflake!");
}
}
// Fields must be in order of columns!
#[derive(SnowflakeDeserialize, Debug)]
pub struct Test {
pub id: u32,
pub value1: bool,
pub value2: String,
pub value3: SomeEnumValue,
}
// Enum must implement DeserializeFromStr!
#[derive(Debug)]
pub enum SomeEnumValue {
Value1,
Value2,
}
// Snowflake sends each cell as a string,
// convert the string to the appropriate type!
impl DeserializeFromStr for SomeEnumValue {
type Err = anyhow::Error;
fn deserialize_from_str(s: &str) -> Result<Self, Self::Err> {
match s {
"VALUE1" => Ok(SomeEnumValue::Value1),
"VALUE2" => Ok(SomeEnumValue::Value2),
_ => Err(anyhow::anyhow!("Failed to convert string to SomeEnumValue")),
}
}
}
Snowflake 返回每个值作为字符串。为可以从字符串解析的类型实现 DeserializeFromStr
。将 SnowflakeDeserialize
derive 属性添加到 struct
以允许 SnowflakeConnector
将数据转换为该类型。目前,字段的顺序必须与列的顺序相对应。假设字段从上到下排列,因此最上面的字段必须是第一列,最下面的字段必须是最后一列,否则反序列化将失败。
依赖关系
~12–24MB
~387K SLoC