懒人改善生活之 - 数据入库实时转换 生活postgresql全文检索搜索引擎数据结构
程序员文章站
2024-02-09 11:07:16
...
阅读原文请点击:http://click.aliyun.com/m/23939/
摘要: 标签 PostgreSQL , ETL , 数据转换 , 实时转换 , 规则 , 触发器 背景 PostgreSQL是一个功能很强大的数据库,仅仅在数据类型、索引接口的支持方面,就远超各种开源和商业数据库。
标签
PostgreSQL , ETL , 数据转换 , 实时转换 , 规则 , 触发器
背景
PostgreSQL是一个功能很强大的数据库,仅仅在数据类型、索引接口的支持方面,就远超各种开源和商业数据库。
有些用户从其他数据源迁移到PostgreSQL,或者有其他数据源来的数据,大多数是字符串、数字,到了PostgreSQL可以转换为更精准的描述(数据类型),提升性能或功能。
例如
1、经纬度,在其他数据库中可能存成两个字段,分别表示经度和纬度。
PostgreSQL支持geometry类型,支持点、线、面、栅格、TOP等GIS类型。
2、数据范围,在其他数据库中可能存成两个字段,分别表示下限和上限。
PostgreSQL通过range支持数值、时间、IP地址等数据类型的范围。
3、IP地址,在其他数据库中可能存为字符串。
PostgreSQL支持network类型。
4、JSON,在其他数据库中可能存成字符串。
PostgreSQL支持JSON类型。
5、图像特征值、线段、多边形、圆形、UUID、XML、数组等,在其他数据库中可能存成字符串。
PostgreSQL支持以上类型。
6、全文检索,在其他数据库中可能需要借助搜索引擎支持。
PostgreSQL支持全文检索类型。
7、枚举类型,在其他数据库中可能存成字符串。
PostgreSQL支持枚举类型。
那么如何将数据从字符串平滑、实时的在入库阶段转换为PostgreSQL支持的类型呢?
PostgreSQL支持trigger和rule,使用任意方法,都可以做到数据的平滑转换。
rule 转换 例子
数据来源是2个字段表示的经纬度,要求实时转换为geometry类型。
创建来源表结构
postgres=# create table nt(id int, c1 numeric, c2 numeric);
CREATE TABLE
创建目标表结构
postgres=# create table nt_geo (id int, geo geometry);
CREATE TABLE
对来源表创建规则或触发器,例如
postgres=# create rule r1 as on insert to nt do instead insert into nt_geo values (NEW.id, ST_MakePoint(NEW.c1,NEW.c2));
CREATE RULE
使用来源数据结构,将数据插入来源数据表
postgres=# insert into nt values (1,1,1);
INSERT 0 1
数据会自动写入目标表,来源表只是个转换入口,不会落数据
postgres=# select * from nt;
id | c1 | c2
----+----+----
(0 rows)
postgres=# select * from nt_geo ;
id | geo
----+--------------------------------------------
1 | 0101000000000000000000F03F000000000000F03F
(1 row)
阅读原文请点击:http://click.aliyun.com/m/23939/
摘要: 标签 PostgreSQL , ETL , 数据转换 , 实时转换 , 规则 , 触发器 背景 PostgreSQL是一个功能很强大的数据库,仅仅在数据类型、索引接口的支持方面,就远超各种开源和商业数据库。
标签
PostgreSQL , ETL , 数据转换 , 实时转换 , 规则 , 触发器
背景
PostgreSQL是一个功能很强大的数据库,仅仅在数据类型、索引接口的支持方面,就远超各种开源和商业数据库。
有些用户从其他数据源迁移到PostgreSQL,或者有其他数据源来的数据,大多数是字符串、数字,到了PostgreSQL可以转换为更精准的描述(数据类型),提升性能或功能。
例如
1、经纬度,在其他数据库中可能存成两个字段,分别表示经度和纬度。
PostgreSQL支持geometry类型,支持点、线、面、栅格、TOP等GIS类型。
2、数据范围,在其他数据库中可能存成两个字段,分别表示下限和上限。
PostgreSQL通过range支持数值、时间、IP地址等数据类型的范围。
3、IP地址,在其他数据库中可能存为字符串。
PostgreSQL支持network类型。
4、JSON,在其他数据库中可能存成字符串。
PostgreSQL支持JSON类型。
5、图像特征值、线段、多边形、圆形、UUID、XML、数组等,在其他数据库中可能存成字符串。
PostgreSQL支持以上类型。
6、全文检索,在其他数据库中可能需要借助搜索引擎支持。
PostgreSQL支持全文检索类型。
7、枚举类型,在其他数据库中可能存成字符串。
PostgreSQL支持枚举类型。
那么如何将数据从字符串平滑、实时的在入库阶段转换为PostgreSQL支持的类型呢?
PostgreSQL支持trigger和rule,使用任意方法,都可以做到数据的平滑转换。
rule 转换 例子
数据来源是2个字段表示的经纬度,要求实时转换为geometry类型。
创建来源表结构
postgres=# create table nt(id int, c1 numeric, c2 numeric);
CREATE TABLE
创建目标表结构
postgres=# create table nt_geo (id int, geo geometry);
CREATE TABLE
对来源表创建规则或触发器,例如
postgres=# create rule r1 as on insert to nt do instead insert into nt_geo values (NEW.id, ST_MakePoint(NEW.c1,NEW.c2));
CREATE RULE
使用来源数据结构,将数据插入来源数据表
postgres=# insert into nt values (1,1,1);
INSERT 0 1
数据会自动写入目标表,来源表只是个转换入口,不会落数据
postgres=# select * from nt;
id | c1 | c2
----+----+----
(0 rows)
postgres=# select * from nt_geo ;
id | geo
----+--------------------------------------------
1 | 0101000000000000000000F03F000000000000F03F
(1 row)
阅读原文请点击:http://click.aliyun.com/m/23939/