解决办法

http://www.jwsblog.com/archives/54.html


  • 第一种方式: 妥协。一般group by后还要查非分组字段,如果业务上这个字段也是相同的,将这个字段也加入到group by中
select id,value from test2 group by id,value;
  • 第二种方式:collect_set()
hive> select id,collect_set(value) from test2 group by id;

1    ["b","a"]
2    ["c"]
3    ["d"]

更神奇的来了:

hive> select id, collect_set(value)[0] from test2 group by id;

1    a
2    c
3    d

炸裂,有没有,惊呼: 这样也可以....

2⃣️group by 可以不指定列名,可以使用数字

数出你select的列中的不是聚合函数的列,然后把列号分别加入到group by

3⃣️表增加两列

alter table music_iplay.dim_music_livestream_anchor_d add columns(operator_name string comment '运营邮箱', last_operate_time string comment '最后修改时间') cascade

这里一定要用cascade去更新全部的表

mapreduce内存分配:

https://blog.csdn.net/u014665013/article/details/80923044

注意写SQL的时候要注意逻left join(

select
    manager_name,
    update_time,
    resource_id
-------------------------------
from ( select manager_name, update_time, resource_id, row_number() over( partition by resource_id order by update_time desc ) as rn from music_iplay.dwd_music_livestream_manager_log_d where resource_type in (10,1011) and operation_type = 2 and dt='2020-06-03' ) t where rn=1
-------------------------------创建子表
) t11 on t6.union_id=t11.resource_id

不能直接

where resource_type in (10,1011) and operation_type = 2 and dt='2020-06-03' and rn=1,因为在SQL是先执行where的,所以要先选出这些列,注意row_number()是选出行号,然后通过行号筛选,然后再去选。
然后lead、lag并不会选出来,只能选出当前这一行(每一行)的上一行的数据,也就是说只能取出来,不能进行修改筛选。

最近接触的业务:
埋点经验:实际上就是只要有相应

模型里面有很多张表,表之间的关联构成了表的结构,大写的表格都是存在oracle里面,数据量过大关系型数据库平均两天会挂一次,impala(纯内存计算,能计算的计算量小,只用其查结果,计算引擎,类似hive,但是比hive快)连hdfs速度比直接查oracle要慢,但也可以替代有S的,猛犸里面找到相应的表(ADS是应用层结果表,ODS最原始的数据),猛犸和impala的区别,猛犸去查元数据管理,类似mysql库,找到相应的库和MR任务,两个任务在产出之后,其他都是SQL任务其他的都是传输任务,逻辑节点(把任务进行聚拢,有的任务要上面所有任务都结束之后才能进行),MR任务上传jar包执行某个类,数据传输任务把数据导到oracle中去,先把当天的数据删掉,如果是新产出的oracle中无数据,先删除先清空再MR用于产生当天的数据,为什么要清空,如果当天的数据想要冲跑的话就要先删再倒,现在不想用oracle就不会更新,如果要重新新建模型就要重新定义模型,新建模型->直链->加表->加依赖->找到之前的报表->替换当前数据模型->替换检测(字段检测)->oracle没有分区字段,dw_date取值用dt替代,分区字段筛选会快很多
数据传输任务有问题只能传string,所以oracle里面存的都是string

自定义度量??


猛犸什么时候建立MR任务?之前的MR任务是检查dump的表是否成功的节点,因为我们是让SH将DDB数据通过潘多拉dump到我们的HDFS上面,这样我们的猛犸就可以查到,虚拟节点可以用于保存一个任务的名字,MR任务可以考虑直接复制节点。要检测的表是DDB表,也就是事实表,可能在前一天的12点还没有完全更新完毕。一般MR任务以dep开头,di结尾为增量表,dd结尾为全量表,任务节点即为表名


但是这里我们也只是把数据存到hive里面,但是我们的数据链接是impala,怎么将数据更新到impala上面呢?
Invalidate metadata xxx;
alter table  xxx.xx set TBLPROPERTIES (
'SYNC_METASTORE'='on' );