14 个版本 (8 个破坏性版本)

0.9.0 2024年6月11日
0.7.0 2024年2月22日
0.4.0 2023年11月14日

#312 in 数据库接口

Download history 8576/week @ 2024-05-03 9606/week @ 2024-05-10 11802/week @ 2024-05-17 12466/week @ 2024-05-24 9349/week @ 2024-05-31 11573/week @ 2024-06-07 10974/week @ 2024-06-14 12914/week @ 2024-06-21 10216/week @ 2024-06-28 10355/week @ 2024-07-05 8846/week @ 2024-07-12 7472/week @ 2024-07-19 7579/week @ 2024-07-26 5238/week @ 2024-08-02 6001/week @ 2024-08-09 5303/week @ 2024-08-16

每月25,384次下载
用于 autoschematic

Apache-2.0

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,它在 PUTGET 语句的支持上有限,另一个是未记录的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