hive中自增序列,连续登陆及拉链表

Hive中生成自增序列的常用方法 在日常业务开发过程中,通常遇到需要hive数据表中生成一列唯一ID,当然连续递增的更好。最近在结算业务中,需要在hive表中生成一列连续且唯一的账单ID,于是就了解生成唯一ID的方法 阅读详情

1,实现hive中的自增列

           

with tmp as(
select
coalesce(max(orders),0) as rk
from increase_csv ic 
),
source_table as(
SELECT
  idfa
, sequence
, constant
,load_date
FROM csv )
select
csv.idfa,
csv.sequence,
csv.constant,
csv.load_date as update_date,
tmp.rk+row_number() over() as orders
from source_table as csv
     cross join tmp
     
向 increase_csv 表中新增数据并生成自增序列,csv 表为源数据表。

先查 increase_csv 表中已有记录最大的序列,如果 increase_csv 表中还没有记录,

利用coalesce函数返回0。然后使用cross join连接生成 source_table 表和 最大的序列值 的笛卡尔集,

最后使用row_number()函数生成行号,并将行号与 最大的序列值 相加的值,作为新装载记录的 序列值。

2,判断连续登陆

          1,先把数据按照用户id分组,根据登录日期排序。

2,用登录日期减去排序数字rn,得到的差值日期如果是相等的,则说明这两天肯定是连续的。

3,根据user_id和日期差date_diff 分组,最小登录日期即为此次连续登录的开始日期start_date,最大登录日期即为结束日期end_date,登录次数即为分组后的count(1)

select

t2.user_id         as user_id

,count(1)           as times

,min(t2.login_date) as start_date

,max(t2.login_date) as end_date

from

(

    select

     t1.user_id

    ,t1.login_date

    ,date_sub(t1.login_date,rn) as date_diff

    from

    (

        select

         user_id

        ,login_date

        ,row_number() over(partition by user_id order by login_date asc) as rn

        from

        wedw_dw.t_login_info

    ) t1

) t2

group by

t2.user_id

,t2.date_diff

having count(1) >= 3;

3,拉链表大致实现逻辑

         拉链表:记录一个事物从开始,一直到当前状态的所有变化的信息

适用情况:

1.数据量比较大

2.表中的部分字段会被更新

3.需要查看某一个时间点或者时间段的历史快照信息

4.更新的比例和频率不是很大

优点

1、满足反应数据的历史状态

2、最大程度节省存储

ods层数据源表:

create table order_info(

order_id     string    COMMENT '订单id'

,order_status string    COMMENT '订单状态'

,create_time  timestamp COMMENT '创建时间'

,update_time  timestamp COMMENT '更新时间'

) COMMENT '订单表'

partitioned by (date_id string)

dwd层拉链表:

create table  order_info_df(

order_id     string    COMMENT '订单id'

,order_status string    COMMENT '订单状态'

,create_time  timestamp COMMENT '创建时间'

,update_time  timestamp COMMENT '更新时间'

,start_dt     date      COMMENT '开始生效日期'

,end_dt       date      COMMENT '结束生效日期'

) COMMENT '订单表'

partitioned by (date_id string)

insert into table order_info_df partition(date_id = '2020-09-11')

--更新当前周期变更的上周期数据

select

t1.order_id    

,t1.order_status

,t1.create_time

,t1.update_time

,t1.start_dt as start_dt

--对比上一周期数据和最新周期数据中是否存在同一订单信息,如果存在将上一周期数据结束时间更新,否则不变化

,case when t1.end_dt='9999-12-31' and t2.order_id is not null  then cast(t1.date_id  as date) else t1.end_dt  end as  end_dt

from (select * from order_info_df where date_id = '2020-09-10') t1

left join (select * from order_info where date_id = '2020-09-11') t2

on t1.order_id=t2.order_id

--最新周期的全量数据

union all

SELECT

t1.order_id    

,t1.order_status

,t1.create_time

,t1.update_time

,cast(to_date(t1.update_time) as date) as start_dt

,cast('9999-12-31' as date) as end_dt

FROM (select * from order_info where date_id = '2020-09-11') t1

数仓工具—Hive实战之生成连续序列(23) 其实我们看到生成序列的本质是要借助一串数字序列,然后在这个基础上通过一些运算来生成日期序列或者字母序列等生成数字序列我们借助posexplode 函数+space 函数。 阅读详情

相关推荐

SQL进阶技巧:如何不借助其他任何外表,产生连续数值

0 需求描述 输出结果如下所示: 1 2 3 4 5 ... 100 1 问题分析 方法一:起始值(start)+步长(diff)=结束值(end) select split(space(5), ' ') +----------------------+ | _c0 | +----------------------+ | ["","","","","",""] | +----------------------+ select posexplode(spl

石榴姐yyds 1929

使用hive sql 为hive增加或者创建自增列,自增id的五种方式

使用hive sql 为hive增加或者创建自增列,自增id的五种方式

北凉徐凤年的博客 1万+

数据仓库实战教程

以hadoop 作为基础生态,从0到进行数仓建设,主要分为基础篇和实战篇两部分,基础篇主要是各种组件的学习和案例,实战篇主要是三家企业的数仓设计案例,最后是扩展篇主要是实时数仓。

22万+

【Hive】space、split、posexplode函数:生成连续数、连续日期等等

1. space函数与split函数结合,得到空字符串数组; 2. 如何产生1-10的连续的数字? 3. 如何产生开始日期到结束日期的连续的日期?

渐渐的忘记,赶不上明天(读研ing,2024年毕业) 2601

数据仓库理论与实战

以hadoop 作为基础生态,从0到进行数仓建设,主要分为基础篇和实战篇两部分,基础篇主要是各种组件的学习和案例,实战篇主要是三家企业的数仓设计案例,最后是扩展篇主要是实时数仓。

2401_84052244的博客 5992

Vivado2022.2下载安装

链接:https://pan.baidu.com/s/1lyfE2d-VmaWC-_aR8ratCQ提取码:mt09。

weixin_61081689的博客 2万+

hive导数据到mysql 自增主键出错_Hive如何实现自增序列

Hive实现自增序列及元数据问题​mp.weixin.qq.com在利用数据仓库进行数据处理时,通常有这样一个业务场景,为一个Hive表新增一列自增字段(比如事实表和维度表之间的"代理主键")。虽然Hive不像RDBMS如mysql一样本身提供自增主键的功能,但它本身可以通过函数来实现自增序列功能:利用row_number()窗口函数或者使用UDFRowSequence。示例:table_src是...

weixin_39747383的博客 605

别再手动折腾了!PICO Unity SDK 一键配置开发环境保姆级教程(含PDC串流调试)

本文详细介绍了PICO Unity SDK的一键配置功能,帮助开发者快速搭建VR开发环境。通过自动化配置流程,大幅减少手动设置时间,提升开发效率。文章还涵盖了PDC串流调试技巧和常见问题解决方案,是PICO VR开发的实用指南。

weixin_30335575的博客 447

Hive实现自增序列及元数据问题

Hive实现自增序列 在利用数据仓库进行数据处理时,通常有这样一个业务场景,为一个Hive表新增一列自增字段(比如事实表和维度表之间的"代理主键")。虽然Hive不像RDBMS如mysql一样本身提供自增主键的功能,但它本身可以通过函数来实现自增序列功能:利用row_number()窗口函数或者使用UDFRowSequence。 示例:table_src是我们经过业务需求处理得到的中间表数据,现在我们需要为table_src新增一列自增序列字段auto_increment_id,并将最终数据保存到tab

m0_58371965的博客 986

DMA+Timer 生成 PWM 波形错位问题分析与解决

本文深入分析了DMA与Timer协同生成PWM波形时出现的错位问题,揭示了DMA传输启动时机与定时器溢出中断的微妙关系。通过占空比强制清零法和预装载值调校技巧,提供了有效的解决方案,并总结了PWM+DMA配置的最佳实践,帮助开发者避免类似问题。

weixin_29191081的博客 347

voc与txt互转

voc2txt # coding:utf-8 from __future__ import print_function import os import random import glob import xml.etree.ElementTree as ET def xml_reader(filename): """ Parse a PASCAL VOC xml file """ tree = ET.parse(filename) size = tree.find('siz

weixin_44898889的博客 825

hive序列生成_Hive实现自增列的两种方法

多维数据仓库中的维度表和事实表一般都需要有一个代理键,作为这些表的主键,代理键一般由单列的自增数字序列构成。Hive没有关系数据库中的自增列,但它也有一些对自增序列的支持,通常有两种方法生成代理键:使用row_number()窗口函数或者使用一个名为UDFRowSequence的用户自定义函数(UDF)。用row_number()函数生成代理键INSERT OVERWRITE TABLEmy_hi...

weixin_39559804的博客 4183

三维Copula建模进阶:从对称、嵌套到Pair-Copula(C-Vine/D-Vine)到底怎么选?

本文深入探讨三维Copula建模的进阶策略,包括对称Archimedean、嵌套结构和Vine Copula(C-Vine/D-Vine)的选择方法。通过对比数学特性、计算复杂度和实际应用案例,提供了一套针对金融风险分析等场景的决策框架,帮助分析师根据数据特征选择最优模型。

weixin_27038701的博客 436

hive表自增列实现方法(完全实现表中数据自增列唯一)之优化一(加快文件处理速度,已经非常非常快了)

Hive表自增列的实现

第一片心意的博客 9959

Greenplum基础

CREATE DATABASE 是 SQL 命令,用于创建一个新的数据库。name 是你要创建的数据库的名称。这个名称是必须的,并且在同一个数据库服务器上必须是唯一的。可选项,OWNER 指定了新数据库的所有者,如果未指定,新数据库的所有者默认是执行该命令的用户。dbowner 是数据库所有者的用户名。可选项,TEMPLATE 指定了用于创建新数据库的模板。在 PostgreSQL 和 GreenPlum 中,通常有一个名为 template1 的默认模板。如果不指定,就会使用这个默认模板。

m0_57697768的博客 1206

GEE聚类分析:基于sentinel-2 影像进行 K-Means 聚类分析

这篇博客介绍了如何使用 Google Earth Engine (GEE) 进行 K-Means 聚类分析,以识别感兴趣区域(ROI)内的不同地表覆盖类型。文章详细说明了从定义用户参数、准备参考区域、加载和预处理 Sentinel-2 图像,到训练 K-Means 聚类器并对图像进行聚类的完整流程。代码示例展示了如何设置参数、采样像素数据、训练聚类器,并将结果可视化。最后,还提供了将聚类结果导出到 Google Drive 的选项。通过该教程,用户可以掌握在 GEE 平台上进行地理数据聚类分析的基本方法。

此星光明博客 262

Hive-SQL获取1~N连续数字序列列表(不用循环,用笛卡尔积)

Hive-SQL获取1~N连续数字序列列表(不用循环,用笛卡尔积)

H_X_P_的博客 3812

基于HetConv与Dual策略的YOLOv8轻量化设计-CSPHet结构的优化与实现

在计算机视觉中,YOLOv8作为目标检测领域的最新版本,通过引入多种改进来提升检测精度和速度。然而,提升精度和保持实时性能往往需要更多参数与计算量。本文提出一种结合Dual思想与HetConv的新型轻量化结构,称为CSPHet。CSPHet能够在保持YOLOv8检测精度的基础上有效减少约70万参数量,实现模型的轻量化和速度的提升。HetConv(Heterogeneous Convolution)是一种混合卷积技术,通过同时使用1x1、3x3等不同大小的卷积核,来捕捉不同尺度的特征。

博客 1323

hive生成连续日期或数字

with subquery as ( select split(space(datediff('2020-11-30','2020-11-01')), ' ') as x ) select date_add('2020-11-01', idx) as new_date from subquery t lateral view posexplode(x) pe as idx, ele

很吵请安静 4580

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Hive 实现自增列的两种方法

Hive 实现自增列的两种方法:row_number() 与 UDFRowSequence

wzy0623的专栏 5万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

hive实现自增id的多种方式

这个UDF会为新的行分配唯一的ID。例如,你可能需要使用一个数据库级别的锁或者使用某种分布式锁机制来确保并发安全。请注意,这种方法可能会在大数据量或高并发的情况下导致性能问题。如果你需要自动分配ID,可以创建一个UDF(用户定义的函数)来为每个新的行分配一个唯一的ID。但是,这种方法可能会导致并发问题,因为多个并行查询可能同时尝试分配ID。注意:使用自增列时需要保证表的数据不会被删除或更新,否则会破坏自增列的递增顺序。在Hive中,可以使用Hive表的自增列实现自增ID。

weixin_42497376的博客 2144

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

hive sql自动生成id的两种方法随机id和自增id

文章目录1.生成自增id:row number() over(order by)2.随机不重复id: regexp_replace(reflect('java.util.UUID','randomUUID'),'-','') 1.生成自增id:row number() over(order by) 使用窗口函数来生成自增id是比较常见的手法 select * from yc_test1 grade_id subject_name max_score 1 语文 98 2 数学 95 2 政治 87 5

mantoli的博客 1万+

hive创建唯一标识列(自增id)

hive创建唯一标识列(自增id)

chimchim66的博客 4684

Hive如何实现自增序列

在利用数据仓库进行数据处理时,通常有这样一个业务场景,为一个Hive表新增一列自增字段(比如事实表和维度表之间的"代理主键")。虽然Hive不像RDBMS如mysql一样本身提供自增主键的功能,但它本身可以通过函数来实现自增序列功能:利用row_number()窗口函数或者使用UDFRowSequence。 示例:table_src是我们经过业务需求处理的到的中间表数据,现在我们需要为table_src新增一列自增序列字段auto_increment_id,并将最终数据保存到table_dest中。 1.

智海观潮的博客 4321

Hive实现自增列的两种方法

多维数据仓库中的维度表和事实表一般都需要有一个代理键,作为这些表的主键,代理键一般由单列的自增数字序列构成。Hive没有关系数据库中的自增列,但它也有一些对自增序列的支持,通常有两种方法生成代理键:使用row_number()窗口函数或者使用一个名为UDFRowSequence的用户自定义函数(UDF)。 假设有维度表tbl_dim和过渡表tbl_stg,现在要将tbl_stg的数据装载到tbl_dim,装载的同时生成维度表的代理键。 用row_number()函数生成代理键 insert...

u011250186的博客 1149
上一篇: Hivesql 行转列,列转行详解
下一篇: spark 自定义输出文件名,文件格式,csv文件添加列头
HDP_CDH
博客等级 码龄9年 3粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值