欢迎访问欧博亚洲(Allbet Game)!

首页科技正文

欧博亚洲app下载:整取零存_字段级迁徙工具

admin2020-07-0751

6月份的大部分时间在完成一个特殊的数据迁徙工具,将文件中的标签整合到关系型数据库的表字段中。从近几年的手艺趋势和介入的项目看,基本都是从关系型数据库往大数据组件迁徙。在这个项目中,主要是客户和相关应用的供应商依赖于PostgreSQL的GIS插件。因此我也有幸使用了一次PostgreSQL数据库。本文简要讲解了工具开发的靠山和难点,并给出了程序逻辑和源代码链接。

01 需求和靠山

a). 为什么说这是一个字段级别的迁徙?

作为数据源的标签文件数目异常多,凭据标签的分类和加工的便利水平,有大量含有列位数据标签列的文件。而同时在PG库表中,为了削减join,提升数据库查询速率,大量标签字段又合在一张表中。效果就是存在,一个文件的差别列可能映射到差别的表中,一张表的差别字段来自于差别的文件。文件和表存在的是多对多的关系。这就造成不能简朴地做出某个文件到某张表的映射关系,然后使用导入工具导入即可。

同时,对于客户和使用者而言,他们希望看到的是就是标签值(即对应数据库中的字段)。通过展示标签级别的映射关系,最终用户可以知晓每个标签的营业寄义和数据泉源;通过展示每个标签的加工状态,管理员可以快速获取整体标签的可用性。

最后,数据源结构上是半结构化的csv文件,列的数目和存放顺序可能发生改变。文件和表的将是动态的,维护起来的工作量也过于伟大。

b). 开发中依赖的一些营业说明

首先,对于标签类数据的存放表,认为是有营业主键的,这些主键也是其他应用查询数据时的条件。程序中使用这些主键来完成新标签数据的插入和旧标签数据的更新。

对于明细类数据,数据源的界说认为是没有主键的日志类数据,只有插入的操作无更新的操作。

同时,标签的更新方式还分为增量和全量。增量即通例的merge操作,而全量方式需要将表中的指定标签字段置空后再举行merge操作。

02 遇到的问题和解决方式

a). 文件的导入和并发控制

虽然每一个义务都是字段级别操作的,然则对于数据源文件的导入存在多个标签对应统一源文件的情形,所以在文件导入操作上有一个专门的状态表纪录文件导入的状态。若是有其它标签义务在执行相同的文件导入了,状态就会酿成processing。作为一个厥后的义务,必须守候状态为success或者fail时才气举行文件的再次导入。

同时为了制止文件的再次导入,每次导入还会对照HDFS中文件的时间戳和状态表中的时间戳,若是时间戳一致,则直接使用已导入的文件即可。

b). 文件的动态入库

csv文件的首行列名作为字段名,文件名作为解释在暂且库建立一张暂且表,然后使用copy_expert函数制止双引号分界符内容中存在逗号的问题。

c). 明细和标签的整合

为了让两者使用统一套字段级别的merge方式,对于明细的数据在传到内陆文件系统后,挪用shell下令凭据每一行的内容加行号md5 hash之后作为一行明细的主键。从而每一行数据都是唯一的,保证了数据在挪用merge操作时只有insert行为。

d). 派生字段的处置

这里的派生字段是指,在原文件的列名中包含了一层数据,比如说统一个文件存在一列名「甲品牌_销售额」和「乙品牌_销售额」,而最终的标签需求为「销售额」,「品牌」。即一列将酿成两列,同时数据行数将酿成原有行数的(品牌枚举值个数)倍。

这个扩展的操作,是在源文件入暂且库之后,通过遍历「品牌」枚举值,将其它列数据举行union all操作实现。

e). 字段类型转换
由于原始文件导入都是以文本形式入库,现实标签值可能有数字、布尔、地理坐标等类型,需要有一个专门的函数对标签值举行类型转换操作。

f). PostgreSQL中的merge操作
在PostgreSQL中,merge操作通过insert into on conflict () do update set = excluded.实现。

工具的处置逻辑

代码和遗留问题

代码github链接github

遗留问题:

  1. 对于主键的要求的强制的,然则程序没有自动去目的表中增添主键;
  2. 对于派生字段只能提供增添一个字段,不支持多个;
  3. 在几千条数据源情形下,单个标签导入的时间为2秒左右,未对万万级数据源做性能测试;
  4. 未提供多标签同时导入的接口
  5. 执行信息用了print()打印在屏幕,需要使用log模块优化输出和分类。

总结

本文分享近期开发的一个标签/字段级别数据迁徙的工具,通过Python实现。先容了工具的一些靠山和实现的一些难点。同时分享了工具的焦点代码,抛砖引玉,希望跟有兴趣的同砚配合探讨更高效的实现方式。

迎接扫描二维码关注民众号

,

欧博allbet网址

欢迎进入欧博开户网址(Allbet Gaming):www.aLLbetgame.us,欧博allbet网址开放欧博allbet网址、会员注册、代理开户、电脑客户端下载、苹果安卓下载等业务。

转载声明:本站发布文章及版权归原作者所有,转载本站文章请注明文章来源:欧博亚洲(Allbet Game)!

本文链接:https://www.mingjiumingcha.com/post/973.html

网友评论

最新评论

  • 环球UG注册 10/24 说:

    Allbet官网欢迎进入Allbet官网(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。看得很心潮澎湃

  • 欧博官网手机版 10/23 说:

    Allbet官网欢迎进入Allbet官网(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。宇宙无敌一级棒

  • 欧博官网手机版 10/23 说:

    Allbet官网欢迎进入Allbet官网(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。宇宙无敌一级棒

  • 欧博官网手机版 10/22 说:

    Allbet Gmaing欢迎进入欧博Allbet官网(www.aLLbetgame.us):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。没有华丽辞藻,就一个好!

  • 欧博官网手机版 10/22 说:

    Allbet Gmaing欢迎进入欧博Allbet官网(www.aLLbetgame.us):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。没有华丽辞藻,就一个好!

  • 皇冠APP下载 10/22 说:

    Allbet手机版下载欢迎进入Allbet手机版下载(www.aLLbetgame.us):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。我就看看不说话

  • ALLBET官网官方注册 10/22 说:

    欧博亚洲欢迎进入欧博亚洲(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。再多点这种文

  • 环球UG注册 10/22 说:

    apple developer enterprise account for rentproviding apple enterprise developer accounts for rent, rent your own enterprise account for app signing. with high quality, stable performance and affordable price.挺优秀的一个作者