
Sql
BabyFish13
不要急,慢慢来;控制好节奏,奋斗到底!
展开
-
hive 之 Cube, Rollup等上钻函数
cube和rollup的区别是CUBE会根据指定列进行所有组合,rollup会根据顺序从左到右进行组合可以使用grouping进行空值判断可以使用grouping__id进行粒度区分。原创 2025-02-24 20:03:04 · 1009 阅读 · 0 评论 -
一个二维表查询的实现
【代码】一个二维表查询的实现。原创 2023-09-01 11:21:09 · 314 阅读 · 0 评论 -
分析函数应用一例(查找状态全为1的ID)
ID中可能会有重复的值,现在要求找出ZT全为1的所有ID值。在表TAB_FXHS中,ID是关键字段,ZT是状态。原创 2023-08-30 16:09:53 · 166 阅读 · 0 评论 -
oracle sql语言模糊查询
零或者多个字符_ 单一任何字符(下划线)/ 特殊字符[] 在某一范围内的字符,如[0-9]或者[aeth][^] 不在某范围内的字符,如[^0-9]或者[^aeth]原创 2023-08-30 16:06:24 · 1806 阅读 · 0 评论 -
Orace及SqlServer的多表关联更新
一条Update更新语句是不能更新多张表的,除非使用触发器隐含更新;而表的更新操作中,在很多情况下需要在表达式中引用要更新的表以外的数据。原创 2023-08-16 13:39:02 · 2033 阅读 · 0 评论 -
利用临时表、REF游标、动态SQL实现分页查询
1. 变量如果未输入,则将其初始值设为:字符型设为’!’,数字型设为0,便于下面拼动态SQL;2. 本例只是一个最简单的示例,根据需要,以此为例扩展;3. 对以前的东西多看看,多想想,会有很多收获,对目前的工作也很有帮助。原创 2023-08-04 13:51:08 · 201 阅读 · 0 评论 -
数据倾斜的原因及解决方案
一、什么是数据倾斜及数据倾斜是如何产生的数据倾斜的根本原因是数据的key分布不均,个别key数据很多,超出了计算节点的计算能力的结果;过程:数据经过 map后,由于不同key 的数据量分布不均,在shuffle 阶段中通过 partition 将相同的 key 的数据打上发往同一个 reducer 的标记,然后开始 spill (溢写)写入磁盘,最后merge成最终map阶段输出文件。如此一来 数据量很大的key 将发往同一个 reducer,超出了节点的计算能力,等待时间超出了可接受范围。原创 2022-05-08 09:09:08 · 25392 阅读 · 0 评论 -
Oracle建表空间及用户
1、创建自动扩展表空间create tablespace GBICCdatafile 'C:\APP\NISJ\ORADATA\ORCL\GBICC01.DBF' size 100Mautoextend on next 10M maxsize unlimitedEXTENT MANAGEMENT local autoallocatesegment space management auto;2、创建数据库用户及赋权-- Create the usercreate user G...原创 2022-03-28 11:00:27 · 652 阅读 · 0 评论 -
hive中[增量/全量比对]算法
参考:https://blog.youkuaiyun.com/weixin_40444678/article/details/810836141、原始表CREATE EXTERNAL TABLE ods.user ( user_num STRING COMMENT '用户编号', mobile STRING COMMENT '手机号码', reg_date STRING COMMENT '注册日期')COMMENT '用户资料表'PARTITIONED BY (dt string)ROW ...原创 2021-03-30 14:26:36 · 2411 阅读 · 0 评论 -
mysql逗号分隔List字段转多行
具体的逻辑我还没整明白,先记上再说,亲测可用。1、原表数据select a1.id,a1.job_dependsfrom job_version_history a1where a1.id in (1655,1656);id job_depends1655 353,3,5321656 484,5,5672、一行转多列select a1.id,a1.job_depends,substring_index(substring_index(a1.job_d...原创 2021-01-19 18:59:35 · 2338 阅读 · 0 评论 -
由LEFT SEMI JOIN所联想到的
一、LEFT SEMI JOIN 与 INNER JOIN的区别1. LEFT SEMI JOINLEFT SEMI JOIN 是 IN/EXISTS 子查询的一种更高效的实现。Hive 当前没有实现 IN/EXISTS 子查询,所以你可以用LEFT SEMI JOIN 重写子查询语句。LEFT SEMI JOIN 的限制是, JOIN 子句中右边的表只能在 ON 子句中设置过滤条件,在 WHERE 子句、SELECT 子句或其他地方过滤都不行。SELECT a.key, a.valu...原创 2020-06-16 20:41:22 · 365 阅读 · 0 评论 -
mysql一次性修改多个列
1、本来语句ALTER TABLE api.api_ad_flow_classification_user_full_1d MODIFY COLUMN user_voilate_rate decimal(10,4) NOT NULL DEFAULT '0' COMMENT '违约比例';ALTER TABLE api.api_ad_flow_classification_user_full...原创 2020-04-23 14:09:07 · 6506 阅读 · 0 评论 -
需用历史全量数据计算的替代方案
比如,计算第一次、总量等,正常情况下需要用到所有历史数据进行计算。但有些表数据特别大,用全景历史数据计算比较费力,可能就算不出来。这时,可以考虑用这种方式。其优点是,数据涉及到的数据量偏小;其缺点也很明显,需要从历史数据起始之日,一天天刷到当前,中间少一天不可。如果中间有一天出现问题,则后面的数据也全部出错。可以在实践中,权衡利裨,根据实际情况,选择合适的方案。1、样例表结构CREA...原创 2021-01-19 19:02:58 · 424 阅读 · 0 评论 -
hive根据日期获取星期几的方法
hive原生未提供获取一个日期是星期几的方法,所以我们只有自己编写udf函数提供;除UDF之外,也可以使用hive原生函数经组合获取星期几。1、格式pmod(datediff(#date#, '1920-01-01') - 3, 7)#date#表示给的日期。select pmod(datediff('2020-03-03', '1920-01-01') - 3, 7)输出的...原创 2020-03-03 14:41:03 · 8931 阅读 · 0 评论 -
mysql中实现取分组排序第一个或最后一个的方法
在hive或oracle中有row_number()over()函数,mysql中不支持。想了好久,网上搜了好久,发现原先刚毕业不了解分析函数的时候,就通先分组取其最大最小值再查询出其记录的方法做出过。这些年分析函数用惯了,原始的方法就想不起来了。这种方法在查询效率上,数据量大的时候可能会比较低,但解决一般问题,还是可以的。例:select left(job_name,3) layer,a...原创 2020-02-09 11:41:53 · 528 阅读 · 2 评论 -
left join与inner join结果之和与总体不等的思考
测试环境是mysql,但实际上跟数据库环境没有关系,是逻辑上的问题。1、建表及测试数据构造drop tables if exists xxxxx_iqy0708;create table xxxxx_iqy0708(ip varchar(100));drop table if exists xxxxx_chusou0708;create table xxxxx_chusou0708(原创 2017-07-28 13:58:44 · 1023 阅读 · 0 评论 -
连续N天不登录的数据获取(hive)
此处利用临时表方便操作,也使思路更加清晰。--1、获取基础数据drop table if exists xxyl1110_uid_basic;create table xxyl1110_uid_basic asselect uid,min(type) type,min(pt_day) reg_dayfrom oss_bi_type_of_all_userwhere pt_day b...原创 2018-11-09 14:21:23 · 1734 阅读 · 0 评论 -
连续N天登录的数据获取(hive)
1、获取用户连续登录天数--整合源表,保证一个用户每天一条记录drop table if exists xxnisj1112_uid_basic;create table xxnisj1112_uid_basic asselect uid,pt_dayfrom oss_bi_all_user_login_logwhere pt_day between '2018-10-01' an...原创 2018-11-13 16:56:21 · 4872 阅读 · 1 评论 -
hive中取上月份及迪卡尔积交叉连接
1、hive中上个月份的获取select SUBSTR(DATE_SUB(FROM_UNIXTIME(UNIX_TIMESTAMP()),30),1,7) ;select SUBSTR(DATE_SUB(concat('2018-02','-01'),28),1,7);select SUBSTR(DATE_SUB(concat('2018-01','-01'),28),1,7);其中...原创 2018-11-30 14:33:34 · 1397 阅读 · 0 评论 -
hive中string类型的json数据转化为map数据类型
1、原始hive表结构及样例数据原始的hive表json字符串是字符类型的。hive> desc honeycomb_all_user_point_record;OKuid bigint point int ...原创 2018-12-06 16:01:29 · 21736 阅读 · 0 评论 -
Hive中array嵌套map数据分离和处理
1、准备要处理数据的临时表drop table if exists xxlvc0103_json;create table xxlvc0103_json asselect pt_day,uid,parms['value'] json_valuefrom oss_bi_all_api_play_feedback_activewhere pt_day between '2019-01-0...原创 2019-01-04 11:06:27 · 4996 阅读 · 1 评论 -
Hive中用参数变量在HQL中执行
Hive配置属性存储于 hiveconf 命名空间中,该命名空间中的属性是可读写的。在查询语句中插入 '${hiveconf:变量名}',就可以通过 hive -hiveconf来替换变量。例如,查询语句和执行方式如下:[root]$cat test.sql #查看该文件SELECT * FROM ${hiveconf:tablename}limit ${hiveconf:var_...原创 2019-02-14 16:51:08 · 7230 阅读 · 1 评论 -
hive之条件判断函数(IF,COALESCE,CASE)
1.If函数:if和case差不多,都是处理单个列的查询结果语法: if(boolean testCondition, T valueTrue, T valueFalseOrNull)返回值: T说明: 当条件testCondition为TRUE时,返回valueTrue;否则返回valueFalseOrNull举例: if(条件表达式,结果1,结果2)相当于java中的三目运算符,只...原创 2019-02-14 15:51:16 · 8070 阅读 · 0 评论 -
Hive中计算两时间字段间隔小时数的方法
在hive中计算两时间字段的方法,不像Oracle中那么方便,需要经过如下示例所示的转换:select room_id,switch_time,updated_time,(hour(updated_time)-hour(switch_time)+(datediff(updated_time,switch_time))*24) as hourIntervalsfrom oss_bi_all_...原创 2019-02-25 15:29:52 · 7255 阅读 · 1 评论 -
MySQL中判断字符型字段是否是数字的两个方法
1、通过正则表达式select * from user_profile_0 where (nickname REGEXP '[^0-9.]') =1 limit 100;//查询nickname列不是数字的数据select * from user_profile_0 where (nickname REGEXP '[^0-9.]') =0 limit 100;//查询nickname列是数...原创 2019-03-15 10:56:14 · 7551 阅读 · 0 评论 -
Mysql几个字符串截取函数的用法
1、从左开始截取字符串left(str, length)说明:left(被截取字段,截取长度)例:select left(nickname,20) from user_profile_0 limit 100;2、从右开始截取字符串right(str, length)说明:right(被截取字段,截取长度)例:select right(nickname,20) fro...原创 2019-03-15 11:28:12 · 354 阅读 · 0 评论 -
基于Mysql源数据的数仓表结构整理
1、简单的表结构信息查看SELECT a1.table_name 表名, a1.TABLE_ROWS 记录条数, a1.TABLE_COMMENT 表注释, a2.COLUMN_NAME 列名, a2.COLUMN_TYPE 数据类型, a2.IS_NULLABLE 是否为空, a2.COLUMN_DEFAULT 默认值, a2...原创 2019-03-21 15:16:14 · 1243 阅读 · 0 评论 -
日期所在周、月等第一天最后一天的计算
1、hive中的情形select '2019-07-29' as day -- 时间 ,date_add('2019-07-29',1 - dayofweek...原创 2019-07-30 12:53:57 · 503 阅读 · 0 评论 -
HiveQL数据抽样Sample查询
当数据量很大时,需要查找一个数据的子集用于加快数据的分析,这种技术就是抽样技术。Hive中,数据抽样分为以下三种:随机抽样;桶表抽样;块抽样;1 随机抽样语法结构使用Rand()和LIMIT关键字得到抽样数据,Distribute和Sort关键字确保数据在mappers和reducers之间高效的随机分布,也可以使用order by rand()实现,但是性能不好。语法: SEL...原创 2019-08-19 16:06:01 · 907 阅读 · 0 评论 -
根据uid计算用户活跃日期及进行用户日活分类
1、建表drop table if exists oss_bi_all_type_of_dau101;CREATE EXTERNAL TABLE `oss_bi_all_type_of_dau101`( `uid` bigint, `newer_day` string, `remain_day_num` int, `parms` map<string,strin...原创 2018-11-30 14:36:47 · 295 阅读 · 0 评论 -
利用排名函数进行Hive数据由竖到横计算示例
1、源数据表结构、样例数据及说明CREATE TABLE `karaoke_room_actor_snapshot_0` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', `actor_id` bigint(20) NOT NULL COMMENT '演员 ID', `room_id` int(11) NOT NULL...原创 2018-07-27 17:46:23 · 909 阅读 · 0 评论 -
Hive窗口函数之累积值、平均值、首尾值的计算学习
Hive窗口函数可以计算一定范围内、一定值域内、或者一段时间内的累积和以及移动平均值等;可以结合聚集函数SUM() 、AVG()等使用;可以结合FIRST_VALUE() 和LAST_VALUE(),返回窗口的第一个和最后一个值。- 如果只使用partition by子句,未指定order by的话,我们的聚合是分组内的聚合. - 使用了order by子句,未使用window子句的情况下原创 2017-11-16 10:33:32 · 29726 阅读 · 1 评论 -
Hive分析函数之grouping sets、cube、rollup学习
源数据建表语句:hive> show create table bi_all_access_log;OKCREATE TABLE `bi_all_access_log`( `appsource` string, `appkey` string, `identifier` string, `uid` string)PARTITIONED BY ( `pt_mon原创 2017-11-15 19:31:03 · 2141 阅读 · 0 评论 -
有关case when的两个sql案例
1、深层嵌套测试环境:Mysqlselect a1.`datetime`,a1.uid,a1.mic_game_id,a2.`name` gamename,case when a2.`name` in("创造与魔法","创造与魔法") then(case when a1.rank=1 then 100 when a1.rank between 2 and 3 then 60原创 2017-11-29 16:27:35 · 874 阅读 · 0 评论 -
用Hive分析函数lead计算用户页面的停留时长
Hive的分析函数又叫窗口函数,在oracle中就有这样的分析函数,主要用来做数据统计分析的。Lag和Lead分析函数可以在同一次查询中取出同一字段的前N行的数据(Lag)和后N行的数据(Lead)作为独立的列。这种操作可以代替表的自联接,并且LAG和LEAD有更高的效率,其中over()表示当前查询的结果集对象,括号里面的语句则表示对这个结果集进行处理。场景描述:用户Peter在浏览原创 2017-11-13 17:36:40 · 3892 阅读 · 1 评论 -
Hive分析函数之LAG、LEAD、FIRST_VALUE、LAST_VALUE学习
数据准备:创建表:drop table if exists xxx_src_table;create table xxx_src_table(polno string,eff_date string,userno string)ROW FORMAT DELIMITEDFIELDS TERMINATED BY ','stored as textfile;数据准备:[had原创 2017-11-13 11:10:25 · 2051 阅读 · 0 评论 -
Python中两List的Sql左连接实现
内联接比较容易,之前做过,用两List的关键字进行if过滤即可;左(右)连接稍微麻烦一些,但稍思考一下,还是可以满足条件的。/Users/nisj/PycharmProjects/BiDataProc/Demand/hadoopStat/SqlLeftJoin.py# -*- coding=utf-8 -*-import sysreload(sys)sys.setdefaultenc原创 2017-10-20 15:42:31 · 2210 阅读 · 0 评论 -
mysql关联更新update
样式1:update xcs_user_credit_score a1,xcs_user_credit_score a2 set a1.user_currday_score=a1.user_currday_increment_score+a2.user_currday_score where a1.pt_day='2017-09-20' and a2.pt_day='2017-09-1原创 2017-09-25 10:47:44 · 42128 阅读 · 2 评论 -
Oracle、Mysql、Hive多行转一列函数实现及异同
1、oracle用wmsys.wm_concatselect u_id, wmsys.wm_concat(goods || '(' || num || '斤)' ) goods_sum from shopping group by u_id ;2、mysql用group_concatSELECT uid,group_concat(concat('name:',name,'-p原创 2017-07-06 17:16:04 · 1843 阅读 · 0 评论 -
Hive行列转换-lateral view的使用
lateral view用于和split、explode等UDTF一起使用的,能将一行数据拆分成多行数据;在此基础上可以对拆分的数据进行聚合。lateral view首先为原始表的每行调用UDTF,UDTF会把一行拆分成一行或者多行,lateral view在把结果组合,产生一个支持别名表的虚拟表。1、Lateral View语法lateralView: LATERAL VIEW udtf原创 2017-05-19 14:22:08 · 1821 阅读 · 0 评论