express loader-快速将数据加载到ckan数据存储中
ckanext-xloader的Python项目详细描述
快速装载机-ckanext xloader
将csv(和类似的)数据加载到ckan的数据存储中。作为替代品设计 因为它提供十倍的速度和更强的健壮性。
OpenGov Inc. 赞助了这项开发,目的是为了受益 全球开放数据基础设施。
与datapusher的主要区别
加载速度
datapusher-解析csv行,转换为检测到的列类型,转换 将数据转换为json字符串,为每一批行调用datastore\u create,其中 将数据重新格式化为INSERT语句字符串,并将其传递给 PostgreSQL。
express loader-使用copy将csv文件直接导入postgresql。
在测试中,express loader 比数据推送器快10倍以上。
稳健性
数据推送器-失败的一个原因是将单元格转换为猜测类型。这个 列的类型是通过只查看前几个列的值来确定的 排。所以,如果一列主要是数字或日期,而字符串(如"N/A")的话 稍后,这将导致加载出错,离开 它一半加载到数据存储中。
express loader-在允许管理员 将列转换为所需的类型(使用数据字典功能)。在 未来,它可以进行自动检测和转换。
更简单的排队技术
数据推送器-作业队列由定制的CKAN服务提供商完成, 复杂并将作业存储在自己的数据库中(默认情况下为sqlite)。
express loader-作业队列由rq完成,rq更简单,由 redis并允许访问ckan模型。您还可以使用 PDB。作业结果当前仍存储在其自己的数据库中,但是 目的是将这一相对较少的数据转移到ckan的数据库中, 以减少安装的复杂性。
(另一个明显的候选人是芹菜,但我们不需要它的重量级 架构及其作业不能用pdb进行调试。)
单独的Web服务器
datapusher-有一个复杂的问题,队列作业是don由一个单独的 (flask)web应用,除了ckan。这是设计,因为工作需要 将每一行数据转换为json的密集处理。然而它 意味着更复杂的代码,因为信息需要在 http请求,用户设置和管理的更多信息-另一个应用程序配置, 另一个apache配置,单独的日志文件。
express loader-作业在工作进程中运行,与ckan在同一个应用程序中运行,因此 可以直接访问ckan配置、数据库和日志记录,避免了许多http调用。 这种简化是有意义的,因为xloader的工作不需要做太多 处理-主要是将csv文件从磁盘流到postgresql。
注意事项
-
所有列都以"文本"类型加载。但是管理员可以使用
资源的"数据字典"选项卡(CKAN 2.7以后的版本)将其更改为数字
或日期戳并重新加载文件。可以在中自动执行此操作
未来.
要求
适用于CKAN 2.7.x及更高版本。
如果安装ckanext rq,则适用于ckan 2.3.x-2.6.x。
安装
要安装快速加载程序:
激活您的CKAN虚拟环境,例如:
. /usr/lib/ckan/default/bin/activate
将ckanext xloader python包安装到您的虚拟环境中:
pip install ckanext-xloader
安装依赖项:
pip install -r requirements.txt pip install -U requests[security]
如果您使用的是2.8.x之前的ckan版本,则需要定义 在数据库中填充文本触发器
sudo -u postgres psql datastore_default -f full_text_function.sql
如果成功,将打印
CREATE FUNCTION ALTER FUNCTION
注意:这假设您使用数据库名称和用户名的默认值。 如果有疑问,请检查配置的 ckan.datastore.write_url 。如果你没有 database name datastore_default 和username ckan_default 然后调整 p sql选项和 full_text_function.sql 在运行之前。
将 xloader 添加到ckan中的 ckan.plugins 设置中 配置文件(默认情况下,配置文件位于 /etc/ckan/default/production.ini )。
如果datapusher在列表中,您还应该删除它,以避免它们 都试图将资源加载到数据存储中。
确保也列出了数据存储以启用CKAN数据存储。
如果它是生产服务器,则需要在 比默认的sqlite文件更强大的数据库:
sudo -u postgres createdb -O ckan_default xloader_jobs -E utf-8
并将此列表添加到配置:
ckanext.xloader.jobs_db.uri = postgresql://ckan_default:pass@localhost/xloader_jobs
(开发或测试时可以跳过此步骤。)
重启ckan。例如,如果您在ubuntu上使用apache部署了ckan:
sudo service apache2 reload
运行工人。首先在命令行上进行测试:
paster --plugin=ckan jobs -c /etc/ckan/default/ckan.ini worker
或者如果您的ckan版本为2.6.x或更低(因此使用ckanext rq):
. /usr/lib/ckan/default/bin/activate
0通过在web界面中提交csv来测试它是否可以加载csv 或者在另一个外壳中:
. /usr/lib/ckan/default/bin/activate
1显然,在命令行上运行worker只是为了测试 生产服务请参见:
< Buff行情>http://docs.ckan.org/en/ckan-2.7.0/maintaining/background tasks.html"使用主管
如果你有ckan 2.6.x或更低版本,那么你需要下载 supervisor ckan worker.conf 并调整 命令以引用 ckanext rq.
< > >
配置设置
配置:
. /usr/lib/ckan/default/bin/activate2
开发人员安装
要安装快速加载程序进行开发,请激活ckan virtualenv并 在从本地ckan repo向上目录:
. /usr/lib/ckan/default/bin/activate3
从datapusher升级
要从datapusher升级到express loader,请执行以下操作:
如上所述安装快速加载程序,包括运行XLoader Worker。
如果还没有,请在配置中更改启用的插件- ckan.plugins line用 xloader 替换datapusher
停止数据推送器工作进程:
. /usr/lib/ckan/default/bin/activate
4重新启动ckan:
. /usr/lib/ckan/default/bin/activate
5
< > >
故障排除
键错误:"操作"数据存储搜索"未找到"
您需要在ckan配置中启用 数据存储 插件。见 上面的"安装"部分可执行此操作并重新启动工作机。
编程错误:(编程错误)关系"_table_metadata"不 存在
尚未设置您的数据存储权限-请参阅: <;https://docs.ckan.org/en/latest/maintaining/datastore.html设置权限rel="nofollow">https://docs.ckan.org/en/latest/maintaining/datastore.html设置权限>;
运行测试
第一次,您的测试数据存储数据库需要应用触发器:
. /usr/lib/ckan/default/bin/activate6
要运行测试,请执行:
. /usr/lib/ckan/default/bin/activate7
要运行测试并生成覆盖率报告,首先确保 在您的virtualenv中安装了coverage( pip install coverage ),然后运行:
. /usr/lib/ckan/default/bin/activate8
发布新版本的快速加载程序
快速加载程序在PYPI上可用,如https://pypi.org/project/ckanext-xloader" rel="nofollow">https://pypi.org/project/ckanext-xloader
要将新版本发布到pypi,请执行以下步骤:
更新 setup.py 文件中的版本号。 参见 pep 440 如何选择版本号。
更新变更日志。
确保您有最新版本的必要软件包:
. /usr/lib/ckan/default/bin/activate
9创建新版本的源和二进制发行版:
pip install ckanext-xloader
0修正任何错误。
将源分发上载到pypi:
pip install ckanext-xloader
1提交任何未完成的更改:
pip install ckanext-xloader
2在github上标记项目的新版本,版本号为 setup.py 文件。例如, setup.py 中的版本号是 0.0.1然后执行:
pip install ckanext-xloader
3
< > >