信息时代数据才是最重要的,数据的表现形式也越来越丰富。Git已经占领了VCS的天下,在其他方面的用途也在不断的拓展,比如Git管理网站,Git写书,本文我们介绍一个在数据领域的项目GitDolt。GitDolt以关系数据库和Git的启发,把SQL语句和Git的分发协作有机地结合,集众长于一身的解决方案。
GitDolt本质上是一个关系数据库,即它具有表、视图等,也可以对表执行SQL查询。在表单元级别支持Git控制语句。GitDolt是一个支持细粒度的按值版本控制的数据库,其数据和架构的所有更改都存储在提交日志中。
为了管理方便,对标GitHub之于Git,GitDolt也提供了远程托管平台网站DoltHub,用于托管Dolt数据库的基于云的存储解决方案,可简化数据库的协作管理。
Dolt提供了类似于Git的所有控制语句见上面帮助信息。
init:创建一个空的Dolt数据仓库。
status:显示工作树状态。
add:添加表更改到暂存更改列表。
reset:从暂存更改列表中删除表更改。
commit:记录对存储库的更改。
sql:对存储库中的表运行SQL查询。
sql-server:启动与MySQL兼容的服务器。
log:显示提交日志。
diff:区分表格。
blame:显示表的每一行的修订、修改者以及最后修改的内容。
merge:合并分支。
brance:创建,列出,编辑,删除分支。
checkout:检出分支或从HEAD覆盖表。
remote:管理一组跟踪的存储库。
push:同步远程仓。
pull:从远程的远程数据存储库中获取并合并。
fetch:从远程数据存储库更新数据库。
clone:从远程数据存储库克隆。
creds:管理账号凭据。
login:登录到Dolt远程主机。
version:显示当前的Dolt cli版本。
config:Dolt配置。
ls:列出工作集中的表。
schema:用于显示和导入表模式的命令。
table:用于复制,重命名,删除和导出表的命令。
conflicts:用于查看和解决合并冲突的命令。
Dolt是Golang开发的项目,需要依赖Golang运行时,安装Dolt之前先确保安装了Golang环境。
要在基于Linux或Mac的系统上安装,请运行:
sudo bash -c 'curl -L https://github.com/liquidata-inc/dolt/releases/latest/download/install.sh | bash'
该命令会下载最新版本dolt发布包,并将其安装到/usr/local/bin/,为了可以直接使用需要将其添加的系统路径中,此处我们用ln给/bin添加一个软连接:
ln -s /usr/local/bin/dolt /bin/dolt
Windows版本安装,需要下载仓库下载软件发布的Microsoft Installer(.msi文件)并运行安装即可。
clone dolt源码仓库然后一次运行
cd ~/dolt/go
go install ./cmd/dolt
go install ./cmd/git-dolt
go install ./cmd/git-dolt-smudge
上面命令将会安装必需组件到$GOROOT/bin路径,默认为路径为~/go下,应该可以看到类似信息:
ls -ltr $HOME/go/bin/
dolt git-dolt git-dolt-smudge
不管使用哪种方法,为了确认安装成功,在命令行下运行dolt会出帮助信息
dolt
Valid commands for dolt are
…
确保安装成功。
仿照Git管理,第一步先设置全局信息:姓名和电子邮件:
dolt config --global --add user.email chongchong@ijz.me
dolt config --global --add user.name "Chongchong"
假设我们要在Dolt中创建一个数据库,显示各国新冠肺炎确诊数。
mkdir 2019-nCoV
cd 2019-nCoV
初始化目录,并加载一些数据:
dolt init
Successfully initialized dolt data repository.
创建表
dolt sql -q "create table COVID19( country varchar(14), population int,death int, primary key (country) )"
dolt sql -q "desc COVID19"
+------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| country | VARCHAR(14) | NO | PRI | | |
| population | INT | YES | | | |
| death | INT | YES | | | |
+------------+-------------+------+-----+---------+-------+
现在给这个表插入一些数据:
insert into COVID19 (country, population,death) values
("USA", 398785,12893),
("Spain", 141942,14045),
("Italy",135586,17127),
("France",110070,10343),
("Germany",107663,2016),
("China",82751,3337),
("Iran",62589,3872),
("United",Kingdom 55949,6171)
查询刚才插入的数据:
dolt sql -q 'select * from COVID19'
加上where条件
dolt sql -q 'select * from COVID19 where country="USA"'
+---------+------------+-------+
| country | population | death |
+---------+------------+-------+
| USA | 398785 | 12893 |
+---------+------------+-------+
假设满意,请按以下方式创建提交:
dolt add .
dolt commit -m "Add new top10 countryinfo of COVID-19"
dolt status
On branch master
nothing to commit, working tree clean
Ok,这样仓库数据数据提交完成。
dolt也支持通过CSV和PSV文件导入数据:
dolt table import -pk=state COVID19 data.csv
如果需要更新表,可以直接通过ipmort文件信息方式:
dolt table import --update-table