如何有效地使用HiveQL并将HiveQL用于极端。
今天,当大数据如此受欢迎时,它不仅仅是专业数据人员。它需要经常处理SQL。即使是非技术合作伙伴(例如产品和运营)也将或多或少地使用SQL。然后播放数据的能力尤为重要。
Hiveql今天已经变得非常成熟。作为SQL方言,它支持大多数查询语法,并且具有丰富的构建功能。同时,它还支持许多高级功能,例如窗口函数,用户定义的功能和反射机制。具有复杂的数据方案,有些人可能会熟练,并选择使用HiveQL的高级功能来解决,例如写作用户定义的功能的数据处理能力扩展了SQL;也许有些人选择远离并转向其他非SQL类型解决方案。本文没有讨论不同方法的优点和缺点,而是试图做出不同的方法,而不是强调远程语法特征或复杂的UDF实现,而是但通过灵活和不同的数据处理思维强调了最简单的语法。解决复杂的数据方案。
无论是初学者还是高级人员,本文都可能会有所帮助,但更适合中级和高级读者阅读。
本文着重于数据处理思维,这不涉及太高的语法。同时,为了避免主题差异,本文涉及的功能和语法特征将不会进行特别的介绍。读者可以自己遵循自己的处境。
本文将围绕数字生成,间隔转换,安排和持续判断的主题介绍,并解释案例的实际使用。每个主题之间存在略有依赖的关系,最好依次阅读。
本文涉及的SQL语句仅使用HiveQL的基本语法特征。从理论上讲,它可以在当前主流版本中进行操作。同时,指定操作环境和兼容性问题不在本文的范围之内。
生成用户访问日志visit_log,每个数据行都表示用户访问日志。该表将用作下面各种方案的测试数据。
这些列是最常见的数据表格之一。实际的数据开发方案基本上是有限的列,也是将重点关注本节的内容。本节将从最简单的增量列开始,找出一般方法并将其推广到更概括的场景。
首先,引入了一个简单的增量整数场景:
实际上,有很多方法可以生成该系列。在这里,引入了简单的通用解决方案之一。
0123通过上述SQL片段,据悉,仅需三个步骤即可生成增加序列:
如果第一项为$ a_1 = a $,并且公差为$ d $,则相等数字列的一般公式为$ a_n = a_1 +(n -1)d $ .sql实现:
如果第一项为$ a_1 = a $,公共比率为$ r $,则相等数字列的一般公式为$ a_n = ar^{n-1} $ .sql实现:
在多维分析方案中,可以使用高级别的聚合函数,例如立方体,汇总,分组集等,可以是不同维度下数据的汇总统计信息。
场景描述了对visit_log的现有用户访问,该访问定义了快速制造测试数据。不同维度的组合。
可以通过Hive提供的groupidid来实施解决想法。核心方法是扭转clastingId。详细的步骤如下:
首先,准备所有Group__ID。
注意:不同版本的蜂箱之间存在差异,而group__ID则不同。上述处理逻辑适用于2.3.0和后续版本。2.3.0可以根据上述步骤稍微修改上一个版本,并且它将不再在此处花费特殊说明。
SQL实现
省河内nullnull3省nunan nullnull2省2省Nullnull2省,Nullnull1省,城市Hubei Wuhan Null2省,城市Hunan Changsha Null1省,城市,湖南Shaoyang Null1省,Shaoyang Null1省,北部,城市,城市,城市,城市,城市,城市。类型Hunan Changsha IOS1省,城市,设备类型Hunan Shaoyang Android1省,城市,设备类型Sichuan Chengdu Windows1省,城市,设备类型Hubei Wuhan Android1省,城市,设备类型Hubei Wuhan IOS1在许多列中使用许多专栏对于数字。表达离散数据,间隔通常用于描述连续数据。尽管这两个具有不同的数据特征,但在实际应用中,序列和间隔的处理具有更多的通用性。本节将介绍一些常见的间隔场景和抽象的通用解决方案。
众所周知,数值间隔$ [a,b] = {x |leq x leq b} $,如何将间隔分为$ n $段落间隔?
这个问题可以简化为许多问题。配额公式为$ a_n = a_1 +(n -1)d $,其中$ a_1 = a $,$ d =(b -a) / n $:
SQL实施:
众所周知,两个日期正在跨越['2022-01-01','2022-01-03'],['2022-01-02','2022-01-04']
有很多方法可以解决上述问题。在这里,引入了简单的通用解决方案之一。核心思想是结合列的数量和间隔分割方法。首先,将日期间隔分解为最小处理单元,即由多个日期组成的数字列,然后基于日期粒度。特定步骤如下:
SQL实施:
2022-01-012022-01-04 [“ 2022-01-02:2”,“ 2022-01-03:2”]?
如果有多个日期间隔,并且间隔之间的跨状态未知,则如何解决上述问题。
SQL实施:
2022-01-012022-01-04 [“ 2022-01-02:2”,“ 2022-01-03:2”] 2022-01-062022-01-10 [“ 20222-01-07:2”,, ,,,,,, to“ 2022-01-08:3”]场景描述了现有用户还款计划的User_repayment表,这意味着表中的用户表示用户已偿还用户每天在指定日期间隔中的还款元素。
如何在一定时间内每天计算所有用户的总还款?
解决这个想法的核心思想是将日期间隔转换为日期序列,然后根据日期序列汇出总统计划。
SQL实现
2022-01-156020222-01-1650布置组合是一种常用的数据组织方法,用于离散数据。实际应用方案在组合中更为常见。本节将介绍安排和组合的实现方法,并结合示例的示例。
已知的字符序列['a','b','c'],可以从此序列中重复选择2个字符,如何获得所有安排?
AAABACBBBBBBBCCACBCC总体上相对简单。
已知的字符序列['a','b','c'],可以从该序列中重复选择2个字符,如何获得所有组合?
AAABACBBBBCCC的实现相对简单。
场景描述了对visit_log的现有用户访问,该访问定义了快速制造测试数据。如何根据该省建立比较组并根据比较组显示该省的用户访问?
Hubei-Hunan Hubei XXX Hubei-Hunan Hunan XXX解决方案核心思想是从所有省份列表中删除2个省份,生成所有组合结果,然后将visit_log表的统计结果关联。
SQL实现
四川 - 霍米四川1平四月 - 河北3平四川 - 洪南四川1四川 - 洪南湖2 Hubei-hunan Hubei 3 Hubei Hubei Hubei Hunan Hunan 2主要引入连续的问题,专注于持续的活跃场景。解释了类型,不同的实施计划。本节的内容直接接近特定应用程序,大部分长度是SQL内容。
现有用户访问visit_log的日志,该日志定义了快速制造测试数据。如何使超过或等于2天的用户?
分析上述连续性时,获得连续性的结果基于超过固定阈值。可以将其归类为静态连续的活动统计量,比N天更活跃。
基于相邻的日期实施不良(滞后 /铅版本)
101102总体实现相对简单。
基于相邻日期的差异(排序版本)
101102总体实现相对简单。
基于连续活跃的日子实现
101102可以根据相邻的日期差异(排序版本)视为衍生版本。要获得更多信息,例如连续活跃的日子。
基于连续的活动范围实现
101102可以根据相邻的日期差异(排序版本)视为衍生版本。应该获得更多信息,例如连续的主动间隔。
现有用户访问visit_log的日志,该日志定义了快速制造测试数据。如何获得最长的两个连续活动,输出用户,最长的连续活动日期和最长的连续活动日期范围?
当上述问题分析连续性时,连续性的结果不会与固定阈值进行比较。取而代之的是,他们将最长的连续活动作为动态阈值,可以将其归类为动态连续活动场景统计。
可以扩展静态连续主动场景统计的概念。这是最终的SQL:
1013202-01-01-01-01-01-01-0310222222222-01-01-01-01202-01-02通过灵活和分布式的数据处理思维,它可以使用最简单的语法来求解复杂的数据情景,这是本文的观念。作为数字列,间隔转换,布置组合,持续判断等,给出了相对通用的解决方案,以及对实际用途的实际解释与示例结合在一起。
在本文中,尝试采用不同的方法来强调灵活的数据处理思维。我希望读者能感觉到光明,并希望它能真正帮助读者。在同一时间,个人能力是有限的,思维不一定是最好的,甚至可能会有错误。欢迎提出意见或建议。为了促进交流和讨论,文章中的每个SQL都标有数字,可以直接在评论区域@SQL号码中传达。