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。

安装

要安装快速加载程序:

  1. 激活您的CKAN虚拟环境,例如:

    . /usr/lib/ckan/default/bin/activate
    
  2. 将ckanext xloader python包安装到您的虚拟环境中:

    pip install ckanext-xloader
    
  3. 安装依赖项:

    pip install -r requirements.txt
    pip install -U requests[security]
    
  4. 如果您使用的是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 在运行之前。

  5. xloader 添加到ckan中的 ckan.plugins 设置中 配置文件(默认情况下,配置文件位于 /etc/ckan/default/production.ini )。

    如果datapusher在列表中,您还应该删除它,以避免它们 都试图将资源加载到数据存储中。

    确保也列出了数据存储以启用CKAN数据存储。

  6. 如果它是生产服务器,则需要在 比默认的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
    

    (开发或测试时可以跳过此步骤。)

  7. 重启ckan。例如,如果您在ubuntu上使用apache部署了ckan:

    sudo service apache2 reload
    
  8. 运行工人。首先在命令行上进行测试:

    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.

  9. < > >

配置设置

配置:

. /usr/lib/ckan/default/bin/activate
2

开发人员安装

要安装快速加载程序进行开发,请激活ckan virtualenv并 在从本地ckan repo向上目录:

. /usr/lib/ckan/default/bin/activate
3

从datapusher升级

要从datapusher升级到express loader,请执行以下操作:

  1. 如上所述安装快速加载程序,包括运行XLoader Worker。

  2. 如果还没有,请在配置中更改启用的插件- ckan.plugins line用 xloader 替换datapusher

  3. 停止数据推送器工作进程:

    . /usr/lib/ckan/default/bin/activate
    
    4
  4. 重新启动ckan:

    . /usr/lib/ckan/default/bin/activate
    
    5
  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/activate
6

要运行测试,请执行:

. /usr/lib/ckan/default/bin/activate
7

要运行测试并生成覆盖率报告,首先确保 在您的virtualenv中安装了coverage( pip install coverage ),然后运行:

. /usr/lib/ckan/default/bin/activate
8

发布新版本的快速加载程序

快速加载程序在PYPI上可用,如https://pypi.org/project/ckanext-xloader" rel="nofollow">https://pypi.org/project/ckanext-xloader

要将新版本发布到pypi,请执行以下步骤:

  1. 更新 setup.py 文件中的版本号。 参见 pep 440 如何选择版本号。

  2. 更新变更日志。

  3. 确保您有最新版本的必要软件包:

    . /usr/lib/ckan/default/bin/activate
    
    9
  4. 创建新版本的源和二进制发行版:

    pip install ckanext-xloader
    
    0

    修正任何错误。

  5. 将源分发上载到pypi:

    pip install ckanext-xloader
    
    1
  6. 提交任何未完成的更改:

    pip install ckanext-xloader
    
    2
  7. 在github上标记项目的新版本,版本号为 setup.py 文件。例如, setup.py 中的版本号是 0.0.1然后执行:

    pip install ckanext-xloader
    
    3
  8. < > >

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java Square类   java Android RecyclerView内部视图寻呼机   java类变量:公共访问只读,但私有访问r/w   java不兼容ClassChangeError java8   安卓java on on参数,如参数iNIT.C++C++   java如何在下面的代码中根据我的喜好设置JTextArea和JTextField的大小?   java使用CustomAdapter更改ListView的显示方式   jakarta ee什么是Java Servlet?   传递给Javasocket程序的参数   java为什么我的计划任务在这两者之间有很长的延迟   Java“迭代器”关键字   java获取数据库SQLite Android中插入行的行ID   网络如何在Java应用程序中设置H2嵌入式数据库,以便在小型网络中使用?   数组Java:写出所有包含K1的Nbit序列   java返回随机字符串键的整数值   在java中解析到日期的字符串时保留时区   java如何修复“运行配置错误:[在SDK中找不到Rails]”?   Java包装器OutofMemory