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 次
44KB
1K SLoC
PowerSQL
PowerSQL,数据工程师、科学家、分析师的数据转换工具。
PowerSQL 自动查找 SQL 语句之间的关系,并在您的数据库/数据仓库/数据引擎上作为作业运行转换。
功能
- 支持多种 SQL 方言(目前支持 BigQuery 和 PostgreSQL 执行查询)。
- 支持纯 SQL,使其易于与您喜欢的数据库工具、格式化和检查器集成:简单添加
CREATE [MATERIALIZED] VIEW
,CREATE 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