用Embulk从PostgreSQL提取数据并生成CSV的方法
如果使用git clone命令,您不必安装embulk或golang。
我已经在以下的代码仓库中准备了实践教程。我已经准备好了Docker和make命令,以便可以跳过环境设置。请务必克隆并尝试进行实践教程。
进行实践操作的步骤
如果按照下面列举的步骤执行,可以在postgres中创建表并将数据注册,然后使用Embulk将数据转换为csv格式。如果有任何问题或遗漏之处,请留下评论。
-
- 克隆git项目https://github.com/tkanata/embulk-hands-on-postgresql2csv.git
-
- 构建docker容器
-
- 启动docker容器
执行初始化命令
a. 这个命令用于在postgres中生成表。
创建config.yml文件
a. 虽然在本次操作中config.yml文件已经创建好了,但是如果你想重新创建自己的文件的话也是可以的。
进入embulk容器:
a. 这个命令用于进入docker容器中。
运行embulk命令config.yml
a. 在容器内执行embulk命令,应该可以生成csv文件。
数据库建设
通过运行docker-compose up或docker-compose up -d命令,可以构建postgres环境。
我们将使用Golang库ent来生成表格。
在Ent中生成表格。
当使用make init或者make init-arm64命令时,会在posrgres中生成表格。
创建用于生成PostgreSQL到CSV文件的config.yml文件。
in:
type: postgresql
host: postgres
port: 5432
user: postgres
password: password
database: embulk-handson
table: teas
select: "*"
out:
type: file
path_prefix: ./output_file/
sequence_format: "teas."
file_ext: csv
formatter:
type: csv
delimiter: ","
newline: CRLF
newline_in_field: LF
charset: UTF-8
quote_policy: MINIMAL
quote: '"'
escape: "\\"
null_string: "\\N"
default_timezone: "Asia/Tokyo"
header_line: true
如果使用docker-compose,当访问主机上的服务时,可以使用服务名称(postgres)来设置输入的主机。如果将其设置为localhost,将在Docker容器内查找localhost,从而导致连接数据库错误的发生。
根据Dockerfile文件,可以看到将主机(即您当前使用的个人PC)上的config.yml文件复制到Docker容器的命令。
请注意,如果Docker容器内没有config.yml文件,则embulk命令将失败。
如果使用git clone下载的config.yml文件,则在首次执行build命令时,config.yml文件已经被复制到Docker容器中,因此不需要再次执行build命令。
运行Embulk
运行 docker exec -it embulk bash 命令,进入 Docker 容器中。
一旦进入 Docker 容器,运行 embulk run config.yml 命令可以执行 embulk。
执行后,应该在指定的目录下生成了 CSV 文件。
如果您想在本地安装Embulk,可以参考以下内容。
如果您使用的是 Intel 版的 Mac,请使用 brew install embulk 命令进行安装。
如果您使用的是 M1 版的 Mac,则无法使用此命令进行安装。
请参考以下文章,在 Intel 环境的终端中进行安装。
使用 M1 Mac 运行基于 Intel 系统环境的 Shell 来执行 Cron 作业。
安装名为embulk-input-postgresql的插件。
要从PostgreSQL中使用Embulk获取数据,您需要安装名为embulk-input-postgresql的插件。
https://github.com/embulk/embulk-input-jdbc/tree/master/embulk-input-postgresql
在安装插件之前,让我们先准备好管理插件。
通过安装不同的插件,Embulk可以从各种数据库中提取数据,并扩展以生成任意的CSV文件。
插件的安装是通过Gem的安装来进行的。
Gem是通过Gemfile进行管理的,而为了使Gem的管理更加容易,有一个名为mkbundle的命令。
执行命令”embulk mkbundle bundle”后,会在执行位置创建一个名为bundle的目录。在bundle目录下,会生成Gemfile等文件,通过编辑Gemfile可以管理Gem。
要在bundle/Gemfile中进行gem管理,可以按照以下方式在bundle目录下安装插件:
bundle add PLUGIN-NAME
最后,在bundle目录下执行以下命令来安装gem软件包。
执行bundle install命令。