首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

git+SQL:一切皆Git和SQL

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

概述

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

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

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

使用SQL来探索Git存储库。

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

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

更改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 1SELECT 1 + 2SELECT LEN("Git Query Language")SELECT "One" IN ("One", "Two", "Three")SELECT "Git Query Language" LIKE "%Query%"SELECT DISTINCT title AS tt FROM commitsSELECT name, COUNT(name) AS commit_num FROM commits GROUP BY name ORDER BY commit_num DESC LIMIT 10SELECT commit_count FROM branches WHERE commit_count BETWEEN 0 .. 10SELECT * FROM refs WHERE type = "branch"SELECT * FROM refs ORDER BY typeSELECT * FROM commitsSELECT name, email FROM commitsSELECT name, email FROM commits ORDER BY name DESC, email ASCSELECT name, email FROM commits WHERE name LIKE "%gmail%" ORDER BY nameSELECT * FROM commits WHERE LOWER(name) = "amrdeveloper"SELECT name FROM commits GROUP By nameSELECT name FROM commits GROUP By name having name = "AmrDeveloper"SELECT * FROM branchesSELECT * FROM branches WHERE is_head = trueSELECT name, LEN(name) FROM branchesSELECT * FROM tagsSELECT * 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客户端),一些实例如下:

SELECTrepo,JSON_EXTRACT(stats, '$.Code.Additions') AS code_lines_added,JSON_EXTRACT(stats, '$.Code.Deletions') AS code_lines_removedFROM (SELECTrepository_id AS repo,COMMIT_STATS(repository_id, commit_hash) AS statsFROM refsWHERE ref_name = 'HEAD') t;

SELECTrepo,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_removedFROM (SELECTrepository_id AS repo,EXPLODE(COMMIT_FILE_STATS(repository_id, commit_hash)) AS statsFROM refsWHERE ref_name = 'HEAD') tWHERE file_language '';

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

总结

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

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OSuVYkDMQK5690JDputZ8IPg0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券
http://www.vxiaotou.com