14 个版本 (8 个破坏性版本)
0.9.0 | 2024年6月11日 |
---|---|
0.7.0 | 2024年2月22日 |
0.4.0 | 2023年11月14日 |
#312 in 数据库接口
每月25,384次下载
用于 autoschematic
68KB
1.5K SLoC
snowflake-rs
雪花库用于未记录的公共API。如果您想查询记录的公共 SQL REST API,请使用 snowflake-jwt 与您喜欢的请求库一起使用,有关如何使用请参阅 ./jwt/examples。
功能
由于该库执行大量I/O,因此它仅支持异步,并且由于使用 reqwest,当前对 tokio 作为运行时的依赖是硬依赖。
- 单条语句 示例
- 多条语句
- 异步请求(如果整个库都是异步的,则需要它吗?)
- 查询结果在 Arrow
- 分块查询结果
- 密码、证书、环境认证
- 浏览器认证
- 关闭会话
- 令牌续订
- PUT支持 示例
- GET支持
- AWS集成
- GCloud集成
- Azure集成
- 小文件并行上传
- PUT的Glob支持(例如
*.csv
) - Polars支持 示例
- 跟踪/自定义reqwest middlware 示例
原因
雪花有两个公共API,一个是 SQL REST API,它在 PUT 和 GET 语句的支持上有限,另一个是未记录的API,官方 驱动程序 使用它,支持这两种语句。
本实现模拟了gosnowflake库,因为每个官方驱动程序都附带一组不同的内部标志和默认值(由CLIENT_APP_ID
选择),Go实现是唯一一个目前默认输出Arrow的。
我们选择不为C/C++的libsnowflakeclient库(支撑ODBC驱动程序)生成绑定,因为它正在积极开发中,而在macOS M1上构建它比编写我们自己的API包装器需要更多的努力。
使用方法
在您的Cargo.toml中
[dependencies]
snowflake-api = "0.7.0"
查看示例,了解使用此库的工作程序。
use anyhow::Result;
use snowflake_api::{QueryResult, SnowflakeApi};
async fn run_query(sql: &str) -> Result<QueryResult> {
let mut api = SnowflakeApi::with_password_auth(
"ACCOUNT_IDENTIFIER",
Some("WAREHOUSE"),
Some("DATABASE"),
Some("SCHEMA"),
"USERNAME",
Some("ROLE"),
"PASSWORD",
)?;
let res = api.exec(sql).await?;
Ok(res)
}
或者使用环境变量
use anyhow::Result;
use snowflake_api::{QueryResult, SnowflakeApi};
async fn run_query(sql: &str) -> Result<QueryResult> {
let mut api = SnowflakeApi::from_env()?;
let res = api.exec(sql).await?;
Ok(res)
}
PUT / GET
PUT/GET语句允许您在执行COPY INTO时访问Snowflake拥有的存储,而不是提供自己的存储。存储提供者取决于您的Snowflake账户是在哪个云中配置的,因此需要支持多个云后端。
依赖关系
~20–38MB
~631K SLoC