13 个版本

0.3.1 2020年7月25日
0.3.0 2020年7月20日
0.2.1 2020年7月20日
0.1.8 2020年7月12日

数据库接口 中排名 1479

每月下载量 39

MIT 许可协议

44KB
1K SLoC

PowerSQL

PowerSQL,数据工程师、科学家、分析师的数据转换工具。

PowerSQL 自动查找 SQL 语句之间的关系,并在您的数据库/数据仓库/数据引擎上作为作业运行转换。

功能

  • 支持多种 SQL 方言(目前支持 BigQuery 和 PostgreSQL 执行查询)。
  • 支持纯 SQL,使其易于与您喜欢的数据库工具、格式化和检查器集成:简单添加 CREATE [MATERIALIZED] VIEWCREATE TABLE AS 语句。
  • 语法和类型检查可避免早期错误
  • 自动创建和执行依赖图
  • 使用简单的 SQL 查询执行自动数据测试

入门指南

使用 cargo 安装最新版本(curl https://sh.rustup.rs -sSf | sh)。

# For PostgreSQL
cargo install powersql --features postgres
# For BigQuery
cargo install powersql --features bigquery

PostgreSQL

要开始使用 PostgreSQL,只需在名为 powersql.toml 的文件中创建一个新项目。

[project]
name = "my_project"
models = ["models"]
tests = ["tests]

现在在 models 目录中创建一个或多个模型

CREATE VIEW my_model AS SELECT id, category from my_source;
CREATE TABLE category_stats AS SELECT COUNT(*) category_count FROM my_model GROUP BY category;

PowerSQL 将根据您数据库中的关系自动创建 DAG。

要针对数据库运行,请提供以下环境变量

  • PG_HOSTNAME
  • PG_USERNAME
  • PG_PORT
  • PG_DATABASE
  • PG_PASSWORD

BigQuery

要针对数据库运行,请提供以下环境变量

  • GOOGLE_APPLICATION_CREDENTIALS
  • PROJECT_ID
  • DATASET_ID
  • LOCATION

GOOGLE_APPLICATION_CREDENTIALS 应指向服务账户密钥文件(这可以通过应用程序而不是本地设置)。

PROJECT_ID 是项目的 ID(不是数字),而 DATASET_ID 是默认使用的数据集的名称。

位置 是一个可选的数据中心位置 ID,其中查询正在执行。

命令

  • powersql check:这将加载您在 models 中列出的目录中的所有 .sql 文件。它将检查 SQL 语句的语法。之后,它将检查 DAG 并报告是否存在循环依赖。最后,它将运行类型检查器并报告任何类型错误。
  • powersql run:加载并运行整个 SQL 语句 DAG。
  • powersql test:加载并运行数据测试。通过运行 powersql test --fail-fast,powersql 将在第一个失败时停止。

数据测试

数据测试是可以在您的数据库表和视图中运行的 断言 语句,可以对数据质量、新鲜度等进行检查。断言语句检查条件的结果 - 一个布尔表达式。基于断言的测试在每个后端都启用,它们被 PowerSQL 转换为返回布尔值的查询。

一些示例

-- Column should be NOT NULL
ASSERT NOT EXISTS(
  SELECT X
  FROM t
  WHERE column IS NULL
) AS 'column should be non null';
ASSERT NOT EXISTS (
    SELECT quantity
    FROM rev_per_product
    WHERE quantity <= 0
) AS 'quantity should be positive';
ASSERT NOT EXISTS (
    SELECT product_id
    FROM rev_per_product
    WHERE product_id IS NULL
) AS 'product_id should be not null';
ASSERT (
    SELECT COUNT (*)
    FROM rev_per_product
    WHERE quantity < 10
) >= 0.7 * (    
    SELECT COUNT(*)
    FROM rev_per_product
) AS 'At least 70% should have a quantity lower than 10'

依赖关系

~7–20MB
~296K SLoC