presto
努力成为一个帅气数据风控科学家
不信没有女粉
展开
-
identifiers must not start with a digit; surround the identifier with double quotes
identifiers must not start with a digit; surround the identifier with double quotes或许你尝试了很多遍也没有解决这个问题,甚至没有看懂这句话,没关系,现在你懂了因为你在命名的时候 用的是“7days“这样数字开头 英文结尾的,sql里面可以别名里含有下划线和数字,但一定不能用数字开头取别名哦~改个名字就好啦...原创 2020-11-21 16:26:06 · 6936 阅读 · 4 评论 -
tableau查询出来的数据和presto hive不一致
为什么同一段代码在tableau跑出来的结果跟presto不一样字段的名字 是 date time这样的比较有争议的名字,可以尝试换成 select cast(time as varchar(20)) as date1time最好用一下引号,限制一下长度原创 2020-11-21 16:20:53 · 803 阅读 · 0 评论 -
presto hive like用法总结,使用| 和 or like多个怎么写
–like与regexp_like的用法prestowhere (address like ‘%广州%’ OR address like ‘%北京%’ OR address like ‘%上海%’ OR address like ‘%深圳%’)或者presto:case when (regexp_like (industry,‘土石方|挖机|矿业|装修|建筑|采油|钢构|钢材|油田|煤矿’)) then 1 else 0 end as ZX_B5HIVE LIKEcount(distinct原创 2020-11-21 16:14:08 · 7154 阅读 · 0 评论 -
10位unix时间转化为时分秒的数据
10位的时间转化为时分秒的数据 format_datetime(from_unixtime(cast(substr(‘1566748800000’,1,10) as int)),‘yyyy-MM-dd’)原创 2020-11-21 15:22:06 · 341 阅读 · 0 评论 -
SQL union的用法
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。SQL UNION 语法SELECT column_name(s) FROM table_name1UNIONSELECT column_name(s) FROM table_name2注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。SQL原创 2020-10-25 17:51:14 · 654 阅读 · 0 评论 -
窗口函数之 lead() over(partition by ) 和 lag() over(partition by )
lag() over() 与 lead() over() 函数是跟偏移量相关的两个分析函数,通过这两个函数可以在一次查询中取出同一字段的前 N 行的数据 (lag) 和后 N 行的数据 (lead) 作为独立的列, 从而更方便地进行进行数据过滤。这种操作可以代替表的自联接,并且 LAG 和 LEAD 有更高的效率。 over() 表示 lag() 与 lead() 操作的数据都在 over() 的范围内,他里面可以使用 partition by 语句(原创 2020-10-03 15:36:40 · 13434 阅读 · 0 评论 -
正则表达式regexp_like的用法详解
正则表达式regexp_like的用法详解ORACLE中的支持正则表达式的函数主要有下面四个:1,REGEXP_LIKE :与LIKE的功能相似2,REGEXP_INSTR :与INSTR的功能相似3,REGEXP_SUBSTR :与SUBSTR的功能相似4,REGEXP_REPLACE :与REPLACE的功能相似它们在用法上与Oracle SQL 函数LIKE、INSTR、SUBSTR 和REPLACE 用法相同,但是它们使用POSIX 正则表达式代替了老的百分号(%)和通配符(_)字符。转载 2020-10-03 15:28:25 · 39562 阅读 · 1 评论 -
数据库里两个数写错了怎么通过查询的方式纠正
同事不小心将某一天的两个产品的几百条渠道号,14 15记反了,数据库是不可能改了,怎么样能查到正确的结果呢SELECTID,CASE WHEN DATE='2020-07-01‘ and channel = 14 then 15else channel end as channel原创 2020-09-10 20:43:50 · 139 阅读 · 0 评论 -
SQL row_number函数详解,row_number多个partition怎么写
selectrow_number()over(partition by id order by date asc ) as rn当rn = 1留下的就是最小date下的id了原创 2020-09-10 20:39:31 · 2228 阅读 · 0 评论 -
presto SQL快捷获取每月第一天
SELECTCAST(DATE_ADD(‘day’,1-day(current_date),current_date)as varchar(20))原创 2020-09-10 20:37:41 · 3231 阅读 · 2 评论 -
SQL case when 多个条件怎么写
示例CASE WHEN ID = 101 THEN ‘A1’ WHEN ID = 102 THEN ‘A2’ ESLE NULL END AS ID原创 2020-09-10 20:35:50 · 2034 阅读 · 0 评论 -
灵活使用inner join,on≤,limit计算最近15天的年度累计值
工作中遇到这样一个需求,计算最近15天的 今年20200101来每一天的用信年度总额,年度用信总人数SELECTA2.DATE,SUM(A1.USE_LOAN_CNT) AS USE_LOAN_CNT,SUM(A1.USE_LOAN_AMT) AS USE_LOAN_AMTFROM (SELECT DATE,COUNT(DISTINCT ID) AS USE_LOAN_CNT,SUM(USE_LOAN_AMT) AS USE_LOAN_AMTFROM TABLE1WHERE ETL_原创 2020-08-15 19:58:36 · 367 阅读 · 0 评论 -
left join on多个条件怎么写
有时我们不仅需要用一个字段去关联,还希望两个表的两个字段都是一样的,这时候可以这样写select * from(select id,name,code from table1) aleft join(select id,name,code from table2) bon a.id = b.id and a.code = b.code有时候on出错的话,可以用caston cast(a.id as varchar(40)) = cast(b.id as varchar(40))and原创 2020-08-15 17:49:19 · 8143 阅读 · 1 评论 -
tableau数据可视化心得之一
1.能写一个大一点的sql,就不要用联接,奇慢无比。但tableau查询上限是100,所以往往在hive里建立临时表再查询会提高查询效率2.tableau不能识别汉字的字段,有中文字段要先转换成英文,后续再转化成中文,切忌!3.tableau对于重复出现的字段会报错,一定要换一个名字!4.实时和提取的区别,为什么有时候你使用tableau很卡,可能是因为你的数据没有进行数据提取,页面总在不断地实时刷新。对于想在T+1自动更新在tableau的报表,是必须要将数据提取保存在本地的!5.未完 待后续不断原创 2020-08-09 15:33:06 · 3100 阅读 · 0 评论 -
sql division by zero 分母为0
有时我们想计算两个字段的比例,但有个别字段的数据为0,那么就会存在分母为0而报错。如果,我们想要分母为0 的时候输出比例为0,那么可以写一个case whenselect (case when count(a) = 0 then 0 else count(b)/count(a) end ) as ratio...原创 2020-07-22 12:56:04 · 6018 阅读 · 0 评论 -
sql count(a)/cout(b)得到的小数显示为0
count(a)为180,count(b)为2800,明显count(a)/cout(b)得到的是一个小于1的小数,然而count的结果默认为int那么小于1的小数都会显示为0解决办法之一:select cast(count(a) as double) / cast(count(b) as double) as ratio...原创 2020-07-22 12:53:26 · 820 阅读 · 0 评论 -
SQL、presto将一对多出现重复的字段新添一列表示
SQL、presto将一对多出现重复的字段新添一列表示例如一个用户(id)在多个渠道都有授信金额(amount),我希望展示出来这个用户在所有渠道的授信金额。但 select id,amount from table 可能出现的结果是,一个用户的信息出现多条、多行,因为他在其他渠道可能有多条授信。select id,max(CASE WHEN product = ‘ABC’ then amount else null end) as ABC,max(CASE WHEN product = ‘XYZ’原创 2020-06-08 17:22:44 · 675 阅读 · 0 评论 -
hive不能用in或者 not in 子查询时怎么办
1111111111111111111111原创 2020-06-08 13:10:42 · 3306 阅读 · 0 评论 -
写SQL就必须【收藏】的时间函数汇总!超详细!
例如 a.apply_time 是2020-05-11 13:54:27b.su_time是2020-03-25 11:20:44怎么计算两个‘年月日时分秒’时间戳的时间间隔呢?SELECT to_unixtime(cast(a.apply_time as timestamp)) - to_unixtime(cast(b.su_time as timestamp)) as intervel即可获得两个时间戳的时间间隔,单位为秒,/60或者/(60*24)换算为天即可。...原创 2020-06-05 13:09:33 · 2043 阅读 · 0 评论 -
hive建表、Partition key设置、insert
drop table if exists ccs_table;create table if not exists ccs_table(id string comment '客户号‘,data_date string comment '数据日期’)partitioned by (data_dt string);插入内容到 ccs_tableset hive.exec.dynamic.partition=true;set hive.exec.dynamic.partition.mode=nons原创 2020-06-03 13:42:26 · 1052 阅读 · 0 评论 -
hive presto sql从身份证号提取年龄和性别
hive presto sql如何从身份证号提取年龄和性别select 2020-cast(substr(id,7,4)as int))*1.0 as age平均年龄avg(2020-cast(substr(id,7,4)as int))*1.0 as age) as avg_ageselect distinct case when cast(substr(id,17,1)as int) in (1,3,5,7,9) then male end男性比例:count (select distinc原创 2020-06-01 20:18:05 · 960 阅读 · 0 评论 -
leetcode数据库相关题目和答案部分汇总
176.第二高薪思路:小于最高薪的最高薪即为第二高薪select max(salary) as SecondHighestSalaryfrom employeewhere salary < (select max(salary) from employee)177.第N高薪思路:使用order by desc limit n,选出前n个高薪的,再min选择最小的一个即为第N高薪select if (count<N,null,min)from(select min(salary)原创 2020-05-31 17:40:08 · 310 阅读 · 0 评论 -
presto json_extract_scalar的用法和hive get_json_object的用法
select json_extract_scalar (properties,’$.type’)as type原创 2020-05-29 16:15:03 · 11413 阅读 · 2 评论 -
查ID字段内容中长度为11的比例
SELECT COUNT(DISTINCT CASE WHEN LENGTH(ID)=11 THEN ID END),COUNT(DISTINCT ID),COUNT (DISTINCT CASE WHEN LENGTH(ID)=11 THEN ID END)*1.000/COUNT(DISTINCT ID)FROM tableID字段既含有手机号,也含有乱码字符串查看某一字段长度为11,即字段内容为手机号的占比...原创 2020-05-29 11:17:11 · 627 阅读 · 0 评论 -
inner join或者left join后本来有数据的字段都没有数据了
比如我们用表a left join 表b, on a.id=b.id如果id为空的话,空对空,sql也会默认为能够匹配会自动跑出来数据。联系几个left的话,id字段可能就都为空了。所以在我们连接的时候,往往需要就一句。where id <> ’ ’and id <>’ ’and id is not null之类的。总之牢记一句,空对空也是能够识别出来的,连续inner join或者left join后本来有数据的字段就也为空了...原创 2020-05-29 09:50:18 · 4170 阅读 · 0 评论 -
inner join出现重复值
比如表A inner join Bon A.ID = B.ID假如B存在一个ID对应多条信息,那么即使我们在前面select用了distinct ID,这种连接下还是会出现重复的id1.首先B中含有ID的后续信息如果被我们select了,即使distinct ID也没有用。那么,需要思考和判断那些后续信息是否对我们的工作有用,无用可以直接删掉不要select,这样只留下distinct ID的数据,明显不会有重复ID2.如果一定要去除指定的重复ID并留下想要的后续信息,可以使用row_number原创 2020-05-28 20:11:52 · 10402 阅读 · 0 评论 -
presto hive sql 常用必会语法汇总
时间转时间戳: cast(to_unixtime(timestamp ‘2016-09-01 01:00:00’) as bigint)int 转 varchar :cast(1 as varchar)varchar 转int:cast(‘1’ as bigint)map数据查询:element_at(url_parsed,‘do’)数据包含 contains(x, element)时间戳转格式化时间:select format_datetime(from_unixtime(cast(view原创 2020-05-27 11:12:21 · 1559 阅读 · 0 评论 -
cannot be applied to timestamp,varchar
select count (distinct if(a.t_time>a.s_time and a.t_time <date_add(to_date(a.s_time),7),a.id,null))as a_user这算代码是同事帮忙写的,在presto上并不能查询'>'cannot be applied to timestamp,varchar显然,时间戳是不能比较大小的做出如下修改:select count(distinct if(cast(a.t_time as var原创 2020-05-27 09:32:57 · 8782 阅读 · 0 评论 -
presto、sql用not exists选择表A中的所有id但剔除掉表B中的id
SELECT student_id,numFROMtable_A AS a----别名,注意哦 这里没有括号WHEREchannel = 3AND NOT EXISTS -----别只会做加法,presto、SQL做减法查询,凡是另一个表出现的都不要都剔除( SELECT 1 FROM table_B AS b -----别名,as可以省略WHEREa.student_id = b.student_id)order by student_id desc...原创 2020-05-22 14:54:51 · 2030 阅读 · 0 评论 -
presto、hive、sql工作中犯的一些错误总结
1.日期错误etl_dt = '20200520’写成了‘202005200’,多一个1得出错误结果,不细心。2.用错表格,虽然都有student_id这个标签,但表a left join 表b后,表b的很多字段都是空的。说明两个表格没有交集,一定要用对表格,熟悉业务逻辑和流程。3.刚刚开始工作的时候,没有筛选distinct 的id,导致一个id对应多条信息。4.inner join,left join 不熟悉未完待补充...原创 2020-05-22 13:46:57 · 406 阅读 · 0 评论 -
使用count(1)确认presto、SQL、HIVE查询没有重复数据
例如我们锚定student_idselect count(1),count(distinct student_id) ----注意distinct 的重要使用fromabc.table_student;不一致那么就有重复值,会出现一对多,一个id多条信息或者:select student_id,count(1) from abc.table_studentgroup by student_idhaving count(1)>=2;-----注意having的用法-----为什么用原创 2020-05-20 11:15:17 · 1720 阅读 · 0 评论 -
presto和hive的不同之处总结
1.一般用presto查询数据,因为快,一般用hive开发数据2.presto调取表格的方式是froma.b.chive是from b.c 只需要库.表3.current_date等日期相关的功能,presto可以用,hive不可以---- 逐步继续总结吧原创 2020-05-20 11:05:45 · 2299 阅读 · 0 评论 -
SQL、presto自动获取前一日的数据
select f1.user_name,f1.number,f1.created_newfrom (select a1.user_name,a1.number,a1.created_new from (select a1.user_name,a1.number,a1.created_new from (selectuser_name,number, created_new,created,current_date,substr(created,1,10)as crea原创 2020-05-18 13:39:18 · 5365 阅读 · 0 评论 -
5.1 PRESTO逻辑运算符逻辑运算符运算符
5.1. 逻辑运算符逻辑运算符运算符描述示例ANDTrue if both values are truea AND bORTrue if either value is truea OR bNOTTrue if the value is falseNOT a逻辑运算符中NULL的效果如果AND表达式中有一边或者两边都是null,那么整个AND表达式的结果将会是null。如果AND表达式中至少有一边的值是false,那么整个AND表达式的值都是false。:SELECT CAST(null AS boole转载 2020-05-18 11:33:11 · 994 阅读 · 0 评论