快捷搜索: 王者荣耀 脱发

Kettle读取按行分割的文件

Kettle是一个开源的ETL工具,支持来自众多的数据源间的数据迁移,笔者也是N年前有所使用,最近在迁移一批来自HDFS的文本数据时,又想到了这个工具的使用,来HDFS的文本常会以行进行分割存储,笔者这次遇到的就是6千余万行的json数据,总体量在20G,在网上找了一圈也没找到读取多行文本的操作,于是就自己摆弄了一下,特此作为记录:

数据格式如下:

{"type": "Feature", "properties": {},"geometry": {"type": "Polygon","coordinates": [[[-19.441364292429924, 65.52333266640196], [-19.441369748908993, 65.52335128397081], [-19.441456975615232, 65.52334689547278], [-19.441451519136184, 65.5233282779008], [-19.441364292429924, 65.52333266640196]]]}}
{"type": "Feature", "properties": {},"geometry": {"type": "Polygon","coordinates": [[[-22.023537553224426, 64.34071231744036], [-22.023766291888357, 64.34079685621145], [-22.023896688463573, 64.34073070136526], [-22.02366796389063, 64.340646160667], [-22.023537553224426, 64.34071231744036]]]}}
{"type": "Feature", "properties": {},"geometry": {"type": "Polygon","coordinates": [[[-20.53351958043648, 64.21502080919846], [-20.533556158627654, 64.21504083748084], [-20.533638377500047, 64.21501242439349], [-20.53360179930887, 64.21499239609055], [-20.53351958043648, 64.21502080919846]]]}}

按行进行分割的JSON,需要将其导入到postgresql中:

在kettle中新建“转换”,在输入中选择文本文件输入,添加需要进行抽取的问题吧:

在“内容”管理卡将格式改为Unix,在“字段”管理卡点击获取字段即可对定义字段名称:

然后就可以预览记录:

为了读取JSON中的某个Key下的值,我们在之后可以加入一个“JSON输入”,在“文件”管理卡选择“源定义在一个字段里”,“从字段获取源”中选择上一步输出的字段:

在“字段”管理卡用JSONPath配置字段:

接下来就可以通过预览转换来预览过程:

之后就可以按照入库的方式配置输出了。

打完收工,测试下来,6千5百万条文本数据到postgresql 用时37分钟,执行效率上应该算非常快了。

经验分享 程序员 微信小程序 职场和发展