Python处理sql建表语句格式化表结构 *背景:**在做数据资产盘点时,对于已经落地的系统,但是没有做数据资产目录注册,需要盘点生产库中在跑的所有表,个别情况开发无法直接导出元数据信息,需要对建表语句进行处理,将所有表的字段及注释信息以二维表格形式展示。
Hive某字段空值用同组该字段非空值填充 工作中遇到这样一个业务场景:系统中记录订单提报和订单审核通过两个时间点某业务状态,开发做标记时一个订单产生了两条记录,即提报时记录状态1字段,状态2字段为空;审核通过时产生新纪录记录状态2字段,状态1字段为空。分析其实想要的是一个订单对应一条记录:订单对应的状态1字段和状态2字段。计算出的结果,否则使用字段本身值。最后使用分组方法保留每组一条记录。窗口函数可以实现获取某字段当前行的同组中非空值的最后一个;函数判断字段是否为空,为空则使用。
Hive实现查询左表有右表没有的记录 工作中遇到这样一个场景,业务逻辑是:如果一个主体发生了某一问题,就不再统计该主体的其他问题。思路:首先想到的方法就是not in方法,但是Hive并不不支持。那么使用left join对两个表进行连接,右表主键为空的说明是右表不存在坐标存在。
Hive分组剔除每组某些记录 中介绍了分组取满足条件的第一条记录的方法,现在业务上面临如此需求:在做公司流程监控时,要求监控每个流程每个节点的用时情况。其中有个字段isend可以判断流程是否结束,但是流程结束后可能还会有操作(例如转发、会签等),分析时需要将结束后的节点删除掉。思路:根据流程ID分组,按照操作时间从小到大排序,得到字段rk,根据流程ID和isend分组,按照操作时间从小到大排序,得到字段rk_。rk_=1说明是流程开始节点或者第一个结束节点,如果rk
Hive删除符合条件的记录 思路:使用select+where选出想要保留的数据,使用insert overwrite向原表覆盖插入数据.操作,那么如果想删除部分条件的记录需要怎么操作?本文记录下解决方法。Hive在使用中不支持。
Hive效率优化记录 Hive是工作中常用的数据仓库工具,提供存储在HDFS文件系统,将结构化数据映射为一张张表以及提供查询和分析功能。Hive可以存储大规模数据,但是在运行效率上不如传统数据库,这时需要懂得常见场景下提升存储或查询效率的方法,本文记录工作中常见的情形。
SQL对数据进行去重 工作中使用SQL对数据进行处理计算时可能会遇到这样的问题;读取的表数据会有重复,或者我们关注的几个字段的数据会有重复,直接使用原表数据会引起计算结果不准或者做表连接时产生笛卡尔积。本文记录使用SQL进行数据去重的几种算法。
Hive建表语法和参数记录 Hive是一个基于Hadoop的数据仓库工具,可以将结构化数据映射到HDFS存储(建表对应在HDFS建了一个文件夹),并提供类SQL查询语言-HiveQL,Hive可以将HQL语句转换为MR任务执行。本文记录Hive建表的常用语法和参数。
Hive计算时间差剔除一天中某时间段 业务中,遇到这样一个需求:需要判断在前一个节点业务操作后(取前一节点的操作时间),判断后一节点操作是否在3个小时内完成,其中晚上17:00到第二天早上8:00不纳入计算范围。
sql server建表时给表和字段添加注释 在数据开发过程中,我们建的每张表最好添加表和字段的注释,这样有助于其他人理解表的用处和字段的含义。在sql server建表时不可以直接使用comment关键字指定注释,记录可以添加注释的方法。
SQL两列转多行_根据状态的开始时间和结束时间生成每月的状态表 工作中,遇到这样一个需求:有一张产品状态表,记录每个产品的停用或启用状态以及状态发生变化的时间,需要统计每个月有多少在启用产品。首先,根据状态变化的时间生成每个产品每个状态对应的开始时间和结束时间。再根据产品启用和停用的时间间隔生成每月状态信息。
Hive中explode和lateral view函数使用 UDF:用户自定义标量函数(User Defined Function),使用场景是一进一出(一个数据项一个输出项)。UDAF:用户自定义聚合函数(User Defined Aggregation Function),使用场景是多进一出(多个数据项返回一个结果),常见的是聚合函数UDTF:用户自定义表格函数(User Defined Table Function),使用场景是一进多出(一个输入项转换为多个输出项),lateral和view explode可以实现类似效果。
Anaconda创建并管理Python虚拟环境 在使用Python进行一些开发或分析工作时,需要安装并使用大神们写的一些程序包。有的程序包只支持32位Python环境,有的支持64位Python环境;有的包支持最新版本,有的可能只支持以前版本(3.6或2.x),而且不同包之间还有版本依赖性。使用Anaconda可以创建多个不同版本的Python虚拟环境,在不同环境下可以下载不同的包进行管理,安装时就不易产生混乱了。