IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> Kettle【付诸实践 03】水经微图kml类型文件分类解析入库难点细节说明(完整流程实例云资源分享:包含sql+kjb+ktr+测试文件) -> 正文阅读

[人工智能]Kettle【付诸实践 03】水经微图kml类型文件分类解析入库难点细节说明(完整流程实例云资源分享:包含sql+kjb+ktr+测试文件)

资源连接:

链接:https://pan.baidu.com/s/18mbpnQBtwGiYISOwfkHwPw 
提取码:xv0w

包含文件:
在这里插入图片描述

1.需求说明

一个与行政区划边界数据相关的应用,行政区划数据从水经微图下载而来格式为kml,需要把这些数据导入到数据库 GreenPlum,并规范数据格式。源数据包含两类:

  • _xx名称.txt(区域名称和中心点坐标)
  • _xx边界.txt(区域名称和区域边界点坐标)

数据要转换成两类:

  • POINT(longitude,latitude)
  • 多边形 POLYGON( POINT, POINT, POINT, ... )

2.流程实例

kml后缀批量修改为xml的脚本:

# 在文件所在文件夹下创建 .txt 文件写入以下内容后修改文件后缀为 .bat
ren    *.kml   *.xml

2.1 获取数据并处理

中心点数据是很规范比较容易解析的,但是边界数据的存在多边界和单边界情况,此时的xml标签不一致,所以需要分开进行解析:

在这里插入图片描述
难点 1?? 标签路径不统一【必须分开进行解析】:

在这里插入图片描述
处理方法【将多边界数据以节点类型传递给下一个 xml文件输入组件】:

在这里插入图片描述
xml文件输入组件是可以接收流数据的,但是在提取成节点时会给节点添加标识 <MultiGeometry xmlns="http://www.opengis.net/kml/2.2"> 需要处理掉xmlns="http://www.opengis.net/kml/2.2"否则无法识别:

在这里插入图片描述
难点 2?? 数据格式不好,需要转换:

在这里插入图片描述
每行的数据是longitude,latitude,altitude 经度,纬度,海拔而最终需要的点格式为POINT(longitude,latitude)边界格式为POLYGON( POINT, POINT, POINT, ... ),思路是去掉换行然后对海拔数据,0进行替换,去掉换行用正则表达式:

在这里插入图片描述
替换海拔,0用SQL,以下SQL实现了边界数据字符串到多边形数据的格式转换:

POLYGON( '(' || TRIM ( TRAILING ',(' FROM REPLACE ( coordinates, ',0', '),(' ) ) )

2.2 数据入库中间表并转换数据格式

使用JOB可以控制SQL的执行顺序,由于用到了数据库的关联查询及数据结构转换所以创建了临时表:

在这里插入图片描述
所有使用到的SQL:

-- 存放边界数据
DROP TABLE IF EXISTS "public"."data_address_area";
CREATE TABLE "public"."data_address_area" (
  "name" varchar(255) COLLATE "pg_catalog"."default",
  "zone_name" varchar(255) COLLATE "pg_catalog"."default",
  "coordinates" varchar(102400) COLLATE "pg_catalog"."default"
);

-- 存放区域名称
DROP TABLE IF EXISTS "public"."data_address_point";
CREATE TABLE "public"."data_address_point" (
  "name" varchar(255) COLLATE "pg_catalog"."default",
  "zone_name" varchar(255) COLLATE "pg_catalog"."default",
  "coordinates" varchar(102400) COLLATE "pg_catalog"."default"
);

-- 存放格式化后的数据
DROP TABLE IF EXISTS "public"."data_address_geo";
CREATE TABLE "public"."data_address_geo" (
  "id" varchar(16) COLLATE "pg_catalog"."default",
  "pid" varchar(16) COLLATE "pg_catalog"."default",
  "deep" varchar(1) COLLATE "pg_catalog"."default",
  "name" varchar(64) COLLATE "pg_catalog"."default",
  "ext_path" varchar(32) COLLATE "pg_catalog"."default",
  "geo" point,
  "polygon" polygon
);

-- 执行数据合并
INSERT INTO data_address_geo SELECT
pid.pid || ROW_NUMBER ( ) OVER ( ORDER BY point.NAME DESC ) AS "id",
pid.pid AS "pid",
'3' AS "deep",
point.NAME AS "name",
pid.ext_path || ' ' || point.NAME AS "ext_path",
point.point,
polygon.polygon 
FROM
	( SELECT NAME, zone_name, POINT( REPLACE ( coordinates, ',0', '' ) ) FROM data_address_point ) point,
	( SELECT NAME, POLYGON( '(' || TRIM ( TRAILING ',(' FROM REPLACE ( coordinates, ',0', '),(' ) ) ) FROM data_address_area ) polygon,
	( SELECT ID AS "pid", NAME, ext_path FROM data_administrative_divisions_geo ) pid 
WHERE
	point.NAME = polygon.NAME 
	AND point.zone_name = pid.NAME
	

-- 删除临时表
DROP TABLE "public"."data_address_area";
DROP TABLE "public"."data_address_point";

3.结果数据

表字段pid、deep、ext_path是为了和之前的表进行合并形成树形结构,不需要的可以忽略:

在这里插入图片描述

4.技术总结

ETL 工具 Kettle 的功能是很强大的,读取数据、格式化数据、入库等等操作都是一般操作,有些复杂流程也可以拆分成多个简单流程,从而实现需求。这个实例就可以发现字符串替换操作用了很多次。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-03-04 15:33:38  更:2022-03-04 15:36:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 17:31:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码