帮酷LOGO
  • 显示原文与译文双语对照的内容
文章标签:CSV  pos  IMP  导入  POST  postgres  Postgresql  
Import CSV and JSON into PostgreSQL the easy way

  • 源代码名称:pgfutter
  • 源代码网址:http://www.github.com/lukasmartinelli/pgfutter
  • pgfutter源代码文档
  • pgfutter源代码下载
  • Git URL:
    git://www.github.com/lukasmartinelli/pgfutter.git
  • Git Clone代码到本地:
    git clone http://www.github.com/lukasmartinelli/pgfutter
  • Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/lukasmartinelli/pgfutter
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
  • pgfutter Build StatusGo Report CardLicense

    elephant

    将CSV和JSON导入 PostgreSQL 。 这个小工具在你只需要将一些数据转储到数据库中时,就会抽象出你所需要处理的问题。

    功能:

    • 生成的导入表( pgfutter csv <file> 和你所做的)
    • 使用 COPY 流媒体协议的性能良好
    • 简便的部署
    • 处理导入错误
    • 通过网络导入

    查看 pgclimb 以将数据从PostgreSQL导出为不同的数据格式。

    安装

    你可以为 Linux 。OSX或者 Windows 下载单个二进制文件。

    英镑

    wget -O pgfutter https://github.com/lukasmartinelli/pgfutter/releases/download/v1.1/pgfutter_darwin_amd64
    chmod +x pgfutter
    ./pgfutter --help

    Linux

    wget -O pgfutter https://github.com/lukasmartinelli/pgfutter/releases/download/v1.1/pgfutter_linux_amd64
    chmod +x pgfutter
    ./pgfutter --help

    从源安装

    go get github.com/lukasmartinelli/pgfutter

    如果你使用的是 Windows 或者 32位 架构,你需要自己下载相应的二进制文件。

    导入 CSV

    pgfutter 将处理符合 RFC 4180的CSV文件。

    创建 friends.csv

    name,age,friends
    Jacob,26,"Anthony"
    Anthony,25,""
    Emma,28,"Jacob,Anthony"

    导入CSV文件。

    pgfutter csv friends.csv

    因为标题行已经提供 pgfutter 将创建适当的表并复制行。

    姓名年龄朋友
    雅各布26Anthony
    Anthony25
    艾玛28雅各布,Anthony

    pgfutter 将只帮助你将数据获取到数据库中。 之后,SQL是一种伟大的语言,可以根据需要的数据库模式对数据进行净化和规范化。

    CREATETABLEpublic.person (
     name VARCHAR(200) PRIMARY KEY,
     age INTEGER)CREATETABLEpublic.friendship (
     person VARCHAR(200) REFERENCESpublic.person(name),
     friend VARCHAR(200) REFERENCESpublic.person(name)
    )INSERT INTOpublic.personSELECT name, age::intFROMimport.friendsWITH friends AS (SELECT name as person, regexp_split_to_table(friends, E',') AS friend
     FROMimport.friends)INSERT INTOpublic.friendshipSELECT*FROMfriends WHERE friend <>''

    导入 JSON

    现在有很多事件日志包含JSON对象( 比如 。 GitHub归档pgfutter 期望每一行都有一个有效的JSON对象。 仅支持 Postgres 9.3和 Postgres 9.4,因为 JSON 类型支持导入 JSON 。

    创建 friends.json

    {"name": "Jacob", "age": 26, "friends": ["Anthony"]}
    {"name": "Anthony", "age": 25, "friends": []}
    {"name": "Emma", "age": 28, "friends": ["Jacob", "Anthony"]}

    导入JSON文件。

    pgfutter json friends.json

    JSON对象将被存储在一个名为的单一 JSON列中。

    数据
    {"name":"Jacob","age": 26,"friends": ["Anthony"]}
    {"name":"Anthony","age": 25,"friends": []}
    {"name":"Emma","age": 28,"friends": ["Jacob","Anthony"]}

    拥有优秀的JSON支持插件,这意味着你可以开始规范化数据。

    CREATETABLEpublic.person (
     name VARCHAR(200) PRIMARY KEY,
     age INTEGER)CREATETABLEpublic.friendship (
     person VARCHAR(200) REFERENCESpublic.person(name),
     friend VARCHAR(200) REFERENCESpublic.person(name)
    )INSERT INTOpublic.personSELECT data->>'name'as name, (data->>'age')::intas ageFROMimport.friendsINSERT INTOpublic.friendshipSELECT data->>'name'as person, json_array_elements_text(data->'friends')FROMimport.friends

    数据库连接

    数据库连接详细信息可以通过 环境变量 提供,也可以作为单独的标志提供。

    名称默认说明
    DB_NAMEpostgres数据库名
    DB_HOSTlocalhost主机名
    DB_PORT5432端口
    DB_SCHEMAimport要为它的创建表的架构
    DB_USERpostgres数据库用户
    DB_PASS密码( 如果无则为空)

    高级用例

    自定义分隔符

    通常,你需要指定自定义分隔符( 默认为: , ) 。

    pgfutter csv -d "t" traffic_violations.csv

    你必须使用 " 作为引号字符,作为转义符。 如果不需要引号,则可以省略引号。

    使用制表符作为分隔符

    如果要使用制表符作为分隔符,需要将 $'t' 作为分隔符传递,以确保 shell 不会吞下正确的分隔符。

    pgfutter csv -d $'t' traffic_violations.csv

    自定义头字段

    如果要显式指定字段名称,可以跳过标题行,并通过逗号分隔的字段名称列表。

    pgfutter csv --skip-header --fields "name,state,year" traffic_violations.csv

    如果文档中没有标题行,则应指定字段名称。

    pgfutter csv --fields "name,state,year" traffic_violations.csv

    编码

    所有CSV文件都需要 utf-8 编码。 不支持其他编码。 编码是一个令人讨厌的话题,你应该在进入数据库之前处理它。

    处理无效输入

    很多CSV文件没有确认正确的CSV标准。 如果要忽略错误,可以以通过 --ignore-errors 标志,即使无法导入某些行,也会提交事务。 失败的行将被写入到 stdout,以便你可以用其他工具清理它们。

    pgfutter --ignore-errors csv traffic_violations.csv 2> traffic_violations_errors.csv

    对于无效的JSON对象,这是。

    自定义表

    pgfutter 将清除文件名作为表名称。 如果要指定自定义表名称或者导入预定义表架构,可以显式指定表。

    pgfutter csv --table violations traffic_violations.csv

    导入单个JSON对象

    你还可以使用将单个JSON对象导入数据库,而不用使用JSON行。 这将首先将JSON文档加载到内存中。

    pgfutter jsonobj document.json

    为了更加复杂的需求,你应该查看一下 pgloader 。

    回归测试

    程序使用来自世界各地的开放式数据集进行测试。

    将所有示例下载到文件夹 samples

    ./download-samples.sh

    针对样本运行导入回归测试。

    ./test.sh

    交叉编译

    我们使用 gox 为 Windows 。OSX和Linux创建可以发布的二进制文件。

    docker run --rm -v "$(pwd)":/usr/src/pgfutter -w/usr/src/pgfutter tcnksm/gox:1.4.2-light


    文章标签:IMP  pos  POST  导入  postgres  Postgresql  CSV  

    Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语