- 博客(289)
- 资源 (2)
- 收藏
- 关注

原创 常用ES查询DSL语句
1. 针对hive表中jsonObject类型的String数据mapping中定义如下:"esf_room": { "type": "text", "fields": { "keyword": { "type": "keyword" } }, "norms": false},DSL查询语句如下:GET /hdp_teu_dia_f...
2019-11-12 16:08:23
5087
1

原创 Hive分区表总结
Hive中的分区其实就是分目录,根据某些维度(例如时间等)将数据表分成多份,一个分区表对应HDFS文件系统上一个独立的文件夹,该文件夹下是该分区所有的数据文件;查询时,通过where表达式选择查询所指定的分区即可,不用再查询整张表的所有数据,提高海量数据查询的效率。(1)创建分区表hive (hive_db1)> create table stu_par(id int , na...
2019-04-28 17:14:23
2945
1

原创 HiveQL常用查询函数——nvl、case when、concat、collect_set、collect_list、explode & lateral view、窗口函数、rank
目录1. nvl(value,default_value)2. case wheneg1:对表emp_sex,求每个部门男女人数eg2:统计每个国家隶属洲的人口数(已知字段数据按照另一种条件分组)eg3:统计不同国家男女个数(完成不同条件的分组)3. concat、concat_ws、collect_set(列转行)4. explode & lateral vi...
2019-03-01 21:40:28
4429

转载 hadoop、hbase、hive、spark分布式系统架构原理
机器学习、数据挖掘等各种大数据处理都离不开各种开源分布式系统,hadoop用户分布式存储和map-reduce计算,spark用于分布式机器学习,hive是分布式数据库,hbase是分布式kv系统,看似互不相关的他们却都是基于相同的hdfs存储和yarn资源管理,hadoop、spark、Hbase、Hive、hdfs简介Hbase:是一个nosql数据库,和mongodb类似hdfs:h...
2019-02-19 08:50:36
1992

原创 Hadoop和Spark的前世今生 & MR、Yarn、Spark架构原理
目录架构原理总图一、Hadoop的历史-> 1.0版本 -> 缺点-> 2.0版本-> MapReduce架构组成:-> Yarn架构组成和运行原理:二、Spark的历史-> Spark架构组成-> Driver和Executor架构原理总图一、Hadoop的历史...
2019-01-23 21:44:16
1267
原创 mysql实现日期的分组功能
对每个日期先找到其归属的周四,例如20230703周一,weekday的取值是0,需要往前减4天才是上周四,(0+4)%7 = 4。再找到其归属的周三,例如20230703周一,weekday的取值是0,需要往后加2天才是周三,(6-(0-3))%7 = 2。date_sub(日期, interval (x day))是mysql里日期加减的语法,其中sourcetime是2023-07-01 07:02:14这种格式,业务需要把每天的日期进行分组,分组原则是上周四 - 本周三,
2023-07-03 16:04:18
949
原创 python查找及安装本地数据包
最后在Anaconda的Environments的pythonWorkSpace中,刷新一下已安装的包,发现已经有了。现在我需要安装elasticsearch包,用于python查询es数据,首先在Anaconda里打开终端。对应Anaconda里的pythonWorkSpace,以及包的安装目录。然后用pip search elasticsearch发现不行,报错。然后在终端查询包pip_search elasticsearch。安装pip_search,
2022-12-27 17:08:58
740
原创 pySpark,执行算子show(1)导致并行度不对的问题
也就是说,因为有action算子show(1)的存在,df的repartition和withColumn这两个数据转换算子会得以生效,但是show(1)比较特殊,因为其只需要返回1条数据,所以内部做了优化,只会计算一个分区的数据,然后返回一条到driver端,这也就是为什么在spark的ui中看到这一步骤只有一个task在执行;那剩下7个分区的数据什么时候执行呢?2. spark代码的预加载机制,会在生成dag图时,把代码里的print执行出来,所以并不是print1,udf执行,再print2;
2022-10-26 16:12:31
1021
原创 Pycharm Runtime Error R6034解决方法
step4:在DLL列表里找到 “msvcr....dll”,注意看后面的路径,只要不是在“C:\Windows\WinSxS”这个路径下的,都要将其删除或重命名后缀。比如在上面这个图里面,有一个 msvcr90.dll 是在 C:\Users\wangxuan24\Anaconda3\envs\pythonWorkSpace\Library\bin这个目录下的,找到它并将其重命名为 “msvcr90.dll-bak”。,所以需要对每一个错误窗口分别处理,直到Pycharm不报错误。多个错误窗口弹跳出来。
2022-10-17 15:52:19
2998
原创 pySpark中udf的使用
传入的col_collect_list是一个数组,由dataframe的sql函数collect_list(col)得到,传入的num是分位数的档,比如95分位就传入95;pyspark中dataframe可以使用很多sql型的函数,比如group by、agg等,函数中经常需要调用自定义的udf函数。定义好函数后,需要注册成udf函数,F.udf()前面是函数名,后面是返回的数据类型。以下面的udf为例,首先定义函数,函数的功能是计算分位数,95不能直接传值,因为udf里的参数必须是一列,所以这里。
2022-10-14 20:52:24
2569
原创 hive和mysql中where/group by/order by后跟别名的区分
由于where和group by的执行顺序都在select之前,所以select的别名不可以跟在其之后,order by的执行顺序在select之后,所以order by后可以跟select的别名。两者的区别在于:hivesql中group by后不可跟别名,而mysql中group by后可以跟别名;2. group by和partition by后不可跟别名。1. order by后可以跟别名。1. order by后可以跟别名。2. group by后可以跟别名。3. where后不可跟别名。
2022-10-08 17:19:35
1820
原创 Mysql5.X实现row_number( ) over( )分组排序
mysql8.0里支持row_number() over (partition by XX order XX) AS rank这种窗口函数,但是mysql早期版本不支持,所以要实现分组排序只能自己写逻辑来实现。这套sql主要利用了mysql两个技术点1. @XX 设置变量2. := 给变量赋值例如这里需要对dt进行分组,然后在每个组内对age进行降序排序,然后计算出排序号-- 1. 窗口函数处理select dt, age, row_number() over(partition
2022-05-09 22:08:09
4564
原创 pyspark中schema设定为integerType时不接受空值
pyspark里首先构建schematable_schema = StructType([ StructField("card_sequence", StringType(), True), StructField("card_id", IntegerType(), True)])StringType类型可以接受null,后面的True表示传入值是否允许为空但是IntegerType类型不能接受null和非int类型值,例如传入空值、"汉字"这种,会判断为异常值,这样通过构建
2022-04-20 20:15:24
838
原创 hive的max()、min()等内置计算函数会自动忽略null
select max(id) from table时,如果字段id中存在空值null,或者字段中全部为空值null,sql语法不会报错,前者会忽略null取个最大值,后者直接max出来的结果就是null
2022-03-25 16:29:59
7801
原创 hive不区分大小写
select 1 AS a, 2 as B, 3 As C from table limit 1;得出结果:a b c1 2 3可以发现,无论是关键词as/AS/As,还是字段B,最后一律都处理成小写了,hive底层不区分大小写,除非用lower uper这种函数强制变大小写...
2022-03-03 16:10:04
4364
原创 hive中left join一对多时,关联顺序不固定
A left join B on A.a = B.b当a与b是一对多时,也就是一条A=a关联多条B=b,关联时候顺序是随机的, a=1 B=1 xxx1 a=1 B=1 xxxx2 a=1 B=1 xxxxx3也可能变成 a=1 B=1 xxxx2 a=1 B=1 xxx1 a=1 B=1 xxxxx3每次重跑其顺序不固定,可见left join的时候出现一对多时,关联顺序是随机的。...
2022-03-02 20:22:22
2500
原创 公司udw平台的坑记录
1. udw上的数据托管,删除元数据同时会删除表数据,如果表数据是关联的hdfs路径,那会直接把hdfs路径删了。所以ods层关联hdfs,ods层表不能勾选数据托管。2.udw上的表修改元数据,如果表的字段顺序变化(中间插入或者删除字段),select的字段映射的字段列也会出错,所以如果udw表字段的发生顺序变化,需要重跑数据,除非在表最后添加字段,这样不影响历史数据。...
2022-03-02 20:16:24
271
原创 hive对字段去除空格trim()函数
hive对字段去空格的函数一共3个:1. ltrim(string):去掉字段的前置空格2. rtrim(string):去掉字段的后置空格3. trim(string):去掉字段首尾空格ps:以上三个函数不会去除字段中间的空格!对null也可以使用,trim(空字段)最终返回还是nullps:nvl(trim(A), 1)可以共用,当字段A为空时,最终输出还是1...
2022-03-02 20:13:44
16553
原创 pyspark给hive表增加自增列
一般增加自增列可以考虑row_number() over(partition by XX order by XX) as rank但是需要给hive表全局加上自增列,并且没有字段可供排序时,partition by和order by后无表字段可用。这种情况只能考虑用row_number() over(order by 1),即每一行记录多出个1,然后对1进行排序,取排序号作为自增id列,但是这样结果会出现一个问题:记录结果会被打乱,因为无论spark还是mr本质是分布式进行的,运行多个task,
2022-02-24 22:31:58
1203
原创 hive关联外部表的注意事项
一、hive关联外部表ALTER TABLE XXX DROP IF EXISTS PARTITION (event_day='{YESTERDAY}');ALTER TABLE XXX ADD IF NOT EXISTS PARTITION(event_day='{YESTERDAY}') LOCATION 'XXX';1. hdfs文件和hive表的存储类型、分隔符必须一致,不然报错。2. hdfs上按照分隔符分割后,比如有20个字段,hive表有16个字段,那么映射会成功,但是只映射前面
2022-02-23 15:27:53
827
1
原创 insert overwrite之前先删除分区
采用spark引擎跑sql,insert overwrite select方式覆盖写数据表时,spark某些版本覆盖写不会重置表的schema;所以建议如果数据表中间有插入新字段,schema改变的话,覆盖写数据之前先删除分区ALTER TABLE udw_ns.default.XXX DROP IF EXISTS PARTITION (event_day='{YESTERDAY}');insert overwrite XXX select ......
2022-02-18 11:14:25
2039
原创 hive中聚合函数的参数需要是数值类型
对于hive中的聚合函数,以及大小比较,例如max、min、count、sum、>、<、=等与java一致,如果max(字符串),会按照字典序进行比较,所以如果要对字段进行数值比较,该字段必须设置为int、float、bigint、double等数值类型,不要设置成string或者cast(XX as int)转一下也可以...
2022-02-17 14:53:44
1612
原创 hive里比较数值大小
数值大小的比较,字段类型必须是int或者bigint,不能是stringstring可以比较 =,是否为某个值string比较大小时是按照字典序排的,例如select 9 < 15trueselect '9' < '15'false因为字典序比较大小时,9大于1,所以'9' > '15'...
2022-02-15 17:45:54
4525
原创 hive支持in (select from ....)子查询的用法
hive支持in的查询用法有两种:1. in (1,2,3 ...)2. in(select from ...)
2022-02-14 20:23:42
3111
原创 HiveSql里group by和order by连用的注意事项
hive的语句执行顺序是group by ... select ... order byorder by是对前面查询到的结果进行排序,两者连用的语法顺序即 select ... group by ... order by注意事项有两点:1. order by的字段必须是在group by中,或者是聚合函数1. select file1,file2 from tableName group by file1,file2 order by file1;2. select file1, cou
2022-02-11 16:29:33
4653
原创 hive的随机函数rand()
语法: rand(),rand(int seed)函数返回值: double随机数说明:返回一个0到1范围内的随机数。若是指定种子seed,则会等到一个稳定的随机数序列。> select rand(); 0.9629742951434543> select rand(0); 0.8446490682263027> select rand(null); 0.8446490682263027ps:如果想要取的0-9或者1-10之间的随机数,x10后向下向上取整即可
2022-02-07 15:25:33
18219
原创 HDFS文件映射成Hive外部表的注意事项
hdfs文件映射生成hive外部表时,本质是文件的序列化和反序列化ALTER TABLE XXX ADD IF NOT EXISTS PARTITION(event_day='{YESTERDAY}') LOCATION 'HDFS路径';需要注意两点:1. hdfs文件和hive表的存储格式必须一致,如果hdfs是text格式,hive表是orc格式,数据关联不上,映射不过来2. hdfs文件和hive表的分隔符必须一致,否则解析错误,hive的分隔符需要注意\t和\001(对应代码
2022-01-30 15:41:58
2051
原创 HDFS数据存储,文件块与spark的分区概念
HDFS中数据以文件块的形式存储在DataNode上,比如一个1GB的数据文件,会切分成多个128M的文件块,数据写入存储的时候,每个128M文件块会存放在一个DataNode上,同时通过机架感知,在最近的两个DataNode节点上分别存放2个副本文件。ps:极限情况,如果128M文件块的个数超过DataNode的个数,会随机选出DataNode存放多余的文件块,但是一个128M文件块只存储在一个DataNode中,机架感知出最近的两个DataNode存放其副本。这样spark在读取HD
2022-01-05 12:21:06
1432
原创 Mysql联合索引的生效方式,最左前缀匹配
1. 我们先创建表create table test( a int , b int, c int, d int, key index_abc(a,b,c) )engine=InnoDB default charset=utf8;2. 插入一些数据DROP PROCEDURE IF EXISTS proc_initData;DELIMITER $CREATE PROCEDURE proc_initData()BEGINDECLARE i INT DEFAULT 1;WHILE i&
2021-12-28 10:31:22
1641
2
原创 group by多个字段的顺序和分块问题/hive spark合并输出文件
group by A,B,CABC的先后,对查询的最终结果值没有影响;但是分组排序的逻辑是:先按照A进行字典排序,默认升序,然后当A相同时,对B进行字典排序,默认升序,最后当B相同时,对C进行字典排序,默认升序。所以ABC的分组字段先后顺序,对排序结果有影响,但是对最终查询的结果数值没有影响...
2021-11-28 15:17:02
7323
原创 orderby多个字段的排序问题
Hql语句:SELECT *FROM Topic t WHERE t.id >2 ORDER BY t.type,t.number DESC依据sql的执行顺序,from---where---select---order by假设where t.id>2之后的结果如下则通过对t.type进行降序排序后结果为:再通过对t.number进行降序排序后结果为:很明显,order by type, number在保持满足对type排序的前提下,即当type字段...
2021-11-28 15:08:23
2655
原创 Hive中主流文件存储和压缩格式测试
Hive支持的数据表的存储数据格式,主要有四种:行式存储:textFile、SequenceFile列式存储:orc、parquet一、测试4种存储格式的压缩比测试数据log.data,查看属性为18.1MB1. textFile格式textfile格式是hive表存储的默认格式,数据不做压缩,磁盘开销大,数据解析开销大。(1)创建表,存储格式为textfilecr...
2021-11-28 14:59:14
989
1
原创 HBase的Shell操作,修改版本值
HBase中通过rowkey和列族CF确定的一个数据存储单元称成CellRowKey Time Stamp CF1 CF2 CF3 t6 CF2:q2=v2 CF3:q3=v311248112 t3 t1 CF1:q1=v1首先,版本是针对列族CF而言的,每个Cell都会保存同一份数据的多个版本,也就是
2021-11-13 16:23:38
4760
原创 hivesql是如何转化为MR任务的?以join、group by、distinct来说明原理
(1)hive并不是所有的查询都需要走MRhive的优化中fetch抓取,就是修改配置文件参数hive.fetch.task.conversion为more这样全局查找、字段查找、过滤查询、limit查询,都不会走MR,直接fetch抓取,提高查询效率(其余的还是走MR)ps:该参数设置为none时,所有任务转化为MR,一般默认是more(2)hive中需要走MR的sql,通常涉及key的shuffle,比如join、group by、distinct等以下参照链接:HiveSQL转化
2021-10-10 18:50:52
2962
原创 使用bulk方式将json文件数据导入ES
使用json文件可以给es中导入数据,10万条左右的数据可以一次导入,数量太大时导入就会报错。大数量的到导入还是需要用bulk方式。accounts.json文件格式如下: {"index":{"_id":"1"}} {"title":"learn es","content":"work hard"} {"index":{"_id":"2"}} {"title":"learn hadoop","content":"work hard"}...如果...
2020-06-04 11:09:53
1392
1ARCGIS工具条-启动窗口及主界面的构成
2020-11-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人