在程序员的世界里有两个东西是常青树,那就是Git和SQL(其实还有一个正则表达式),一个是代码存储和版本管理,一个是对关系数据库进行查询。在一切皆XX的世界中,一切皆Git,一切皆Sql也是最热门的两个方向,那么将Git和Sql结合起来用来呢,也有很多这样项目,本文虫虫就给大家介绍一些。

概述

Git是一个开源的分布式版本控制系统,已成为时下软件版本控制的标准。克隆、分支和合并等基本操作;Fork-PR分布式协作流程,Git+Github(Gitlab)让全球数百万软件开发人员能够进行真正的分布式在线协作。

SQL或结构化查询语言是数据描述和查询的全球标准。诞生于上个世纪70年,至今已经流行了半个世纪,还在广泛使用,是每个开发者最熟悉最成熟的工具。

Git和SQL结合的方法,常见的想法有:

  1. 使用SQL来探索Git存储库。

  2. SQL数据库文件使用Git仓库存储。

  3. 对SQL查询进行版本控制和共享。

  4. 更改SQL数据库引擎提供Git功能。

这些项目在本文提到项目都已经实现,其他可能想法也值得大家一起探索。

Dolt

开发语言:Golang

星级:16K

最新版本:v1.29.0(2023年12月1日)

仓库地址: github /dolthub/dolt

Dolt从字面上理解Git+SQL的概念。Dolt完全模仿了Git命令行。对架构和数据执行差异和合并,冲突按单元格检测的。

Dolt本质上是一个SQL数据库,同时支持像Git仓库一样进行Fork、克隆、分支、合并、推送、拉取等Git操作。

Dolt支持像任何MySQL 数据库一样连接到 Dolt来读取或修改架构和数据。版本控制功能通过系统在SQL公开表、函数和过程。

和一般的Git仓库可以把仓库推送到GitHub一样,Dolt也提供了一个DoltHub,可以在线免费托管Dolt数据库。当然也可以通过自建DoltHub服务器。

在SQL中,git读取操作作为系统表公开,git写入操作作为SQL函数公开。此外,Dolt允许存储和版本查询,就像VersionSQL一样。

如果希望将Git概念应用到整个SQL数据库,Dolt适合。一个基本例子:

call dolt_checkout('-b','modifications');

update employees SET first_name='Timothy' where first_name='Tim';

insert INTO employees (id, first_name, last_name) values (4,'Daylon', 'Wilkins');

insert into employees_teams(team_id, employee_id) values (0,4);

delete from employees_teams where employee_id=0 and team_id=1;

call dolt_commit('-am', 'Modifications on a branch');

其结果:

MergeStat

开发语言:TypeScript,Golang

星级:385

最新版本:v2.3.2-beta (2023年11月14日)

仓库地址: github /mergestat/mergestat

mergestat是一个开源项目,旨在为软件工程团队提供分析。MergeStat提供命令行运行的mergestat-lite和具有有完全的用户界面MergeStat 通过将数据同步到PostgreSQL数据库,支持对构建和交付软件所涉及的数据源进行 SQL 查询。

其中命令行版本的mergestat-lite和Gitbase(使用Mysql语法的Sql),MergeStat使用SQLite SQL语法来实现任务。主要基于SQLite的虚拟表机制。

MergeStat实现了许多表,包括commits、commit_stats,blame,repo,pull-*等表该项目很酷且活跃,值得学习研究或者去贡献代码。

MergeStat提供具有有完全的用户界面,是为工程团队提供完全完整的运营分析,实现项目的活动分析,同时实现部分AppSec和DevSecOps实践的安全合规运营,比如CVE管理和报告、密码检测等。

MergeStat提供基于容器的便携式安装部署,可以基于docker-compose一键在本地部署并且使用:

GQL

开发语言:Rust

星级:1.5K

最新版本:v0.9.0(2023年12月3日)

仓库地址: github /AmrDeveloper/GQL

GQL是一种查询语言,其语法与SQL非常相似,具有一个微型引擎,可以对数据库文件的.git文件实例执行查询,该引擎动态执行查询,无需创建数据库文件或将.git文件转换为任何其他格式,请注意,GQL中的所有关键字与SQL类似并不区分大小写。

GQL可执行的Sql实例如下:

SELECT 1

SELECT 1 + 2

SELECT LEN("Git Query Language")

SELECT "One" IN ("One", "Two", "Three")

SELECT "Git Query Language" LIKE "%Query%"

SELECT DISTINCT title AS tt FROM commits

SELECT name, COUNT(name) AS commit_num FROM commits GROUP BY name ORDER BY commit_num DESC LIMIT 10

SELECT commit_count FROM branches WHERE commit_count BETWEEN 0 .. 10

SELECT * FROM refs WHERE type = "branch"

SELECT * FROM refs ORDER BY type

SELECT * FROM commits

SELECT name, email FROM commits

SELECT name, email FROM commits ORDER BY name DESC, email ASC

SELECT name, email FROM commits WHERE name LIKE "%gmail%" ORDER BY name

SELECT * FROM commits WHERE LOWER(name) = "amrdeveloper"

SELECT name FROM commits GROUP By name

SELECT name FROM commits GROUP By name having name = "AmrDeveloper"

SELECT * FROM branches

SELECT * FROM branches WHERE is_head = true

SELECT name, LEN(name) FROM branches

SELECT * FROM tags

SELECT * FROM tags OFFSET 1 LIMIT 1

DBT-core

开发语言:Python

星级:7.9K

最新版本:v1.7.3(2023年11月29日)

仓库地址: github /dbt-labs/dbt-core

DBT是一种非常流行的工具,用于将数据转换编写为SQL并对其进行版本控制。 DBT的重点是分析(在线分析处理-OLAP)工作负载。它允许分析工程师为由项目和模型组成的分析工作流程采用可重用、可组合的格式。

可以对DBT原语进行排序以构建大型数据管道。此外,单个格式化查询可以进行版本控制(例如在Git中),并在许多其他分析作业中重用。例如,有人将每日活跃用户查询编写为DBT模型,并且该模型在组织中的许多管道中使用。

DBT已经变得非常流行并且风靡一时。如果希望构建自己的Git+SQL风格的一栈式分析开发项目分析流,那么DBT是最适合工具。

Gitbase

开发语言:Golang

星级:2K

最新版本:v0.23.1(2019年7月5日)

仓库地址: github / src-d/gitbase

该项目由go-mysql-server的创建src-d创建,其目的是为Git存储库的数据库提供SQL接口。

例如,可以在Git存储库之上设置Gitbase并运行查询(注意使用标准MySQL客户端),一些实例如下:

SELECT

repo,

JSON_EXTRACT(stats, '$.Code.Additions') AS code_lines_added,

JSON_EXTRACT(stats, '$.Code.Deletions') AS code_lines_removed

FROM (

SELECT

repository_id AS repo,

COMMIT_STATS(repository_id, commit_hash) AS stats

FROM refs

WHERE ref_name = 'HEAD'

) t;

SELECT

repo,

JSON_UNQUOTE(JSON_EXTRACT(stats, '$.Path')) AS file_path,

JSON_UNQUOTE(JSON_EXTRACT(stats, '$.Language')) AS file_language,

JSON_EXTRACT(stats, '$.Code.Additions') AS code_lines_added,

JSON_EXTRACT(stats, '$.Code.Deletions') AS code_lines_removed

FROM (

SELECT

repository_id AS repo,

EXPLODE(COMMIT_FILE_STATS(repository_id, commit_hash)) AS stats

FROM refs

WHERE ref_name = 'HEAD'

) t

WHERE file_language <> '';

如果对Golang编写的开源SQL接口感兴趣,可以参考Gitbase学习,不幸的是,src-d已于2018 年停止运营。

总结

本文我们介绍了Git和Sql两个伟大思想结合而产生一些开源项目,其中很多项目都是很有,可以直接拿来帮我们解决一些实际问题。当然他们都是一些很好的学习材料可以帮我们学习语言,如何将实际问题代码化,也可以作为贡献开源项目的目标,选择一个喜欢的项目贡献自己的代码或者其他任务。

举报/反馈

虫虫搜奇

5890获赞 1.2万粉丝
世界真奇妙,虫虫带你去搜奇
科技领域创作者
关注
0
0
收藏
分享