当前位置: 首页 > wzjs >正文

静态网页是什么整站seo优化

静态网页是什么,整站seo优化,wordpress更新文件放在哪里,顾客评价网站从MySQL快速上手大数据Hive Hive简介 ​ hive是基于Hadoop构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式(DML)来分析存储在Hadoop分布式文件系统中的数据: 可以将结构化的数据文件映射为一张数据库表,并提供完整的SQL查…

从MySQL快速上手大数据Hive

Hive简介

​ hive是基于Hadoop构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式(DML)来分析存储在Hadoop分布式文件系统中的数据: 可以将结构化的数据文件映射为一张数据库表,并提供完整的SQL查询功能;可以将SQL语句转换为MapReduce任务运行,通过自己的SQL查询分析需要的内容,这套SQL简称Hive SQL,使不熟悉mapreduce的用户可以很方便地利用SQL语言查询、汇总和分析数据。
​ hive不适合用于联机(online)事务处理,也不提供实时查询功能。
它最适合应用在基于大量不可变数据的批处理作业。

​ 下图展示了大数据中数据查询的整个过程
在这里插入图片描述

MapReduce原理

Map就是映射,负责数据过滤分割,将原始数据转化为键值对;Reduce是合并,将具有相同key值的value进行处理后再输出新的键值对,最后存储到HDFS。为了让Reduce可以并行处理Map的结果,必须对Map的输出进行一定的排序与分割,然后再交给对应的Reduce,而这个将Map输出进行进一步整理并交给Reduce的过程就是Shuffle。整个MR的大致过程如下:

在这里插入图片描述

Hive使用

Hive表类型

内表:建表时不需要指定location。删除内表时,对应的HDFS文件一并删除。非分区表所有文件放在表location下,非压缩表。

外表:外表用EXTERNAL关键字来创建。外表需要指定location。删除外表时,不删除对应的HDFS文件。数据以ORC文件存储,用SNAPPY算法压缩

在这里插入图片描述

在这里插入图片描述

Hive常见数据类型

与Mysql基本保持一致。
在这里插入图片描述

使用CAST函数进行类型转换。

# sku_id是varchar 
# 但需要转成INT为了方便后面做数值运算 
# 此时就需要使用到CAST函数
SELECT CAST(sku id AS INT) FROM sku sale list

Hive常用函数

主要跟Mysql中常用函数一致
在这里插入图片描述

SYSDATE()函数是自研函数,用法如下

sysdate() 
# 获取当天数据
SELECT sysdate() 
-- 结果:2025-03-02# 获取昨天数据
SELECT sysdate(-1) 
-- 结果:2025-03-01# 获取明天数据
SELECT sysdate(1) 
-- 结果:2025-03-03

其他函数举例如下,都跟Mysql中用法一致

round()
SELECT round(6.28); -- 结果:6
SELECT round(6.58); -- 结果:7
SELECT round(6.58410834,2); -- 结果:6.58
SELECT round(6.58470834,3); -- 结果:6.585
SELECT round(6.5,3); -- 结果:6.500
substr() 字符串截取
SELECT substr('字符串'从哪开始截[,截几个])
SELECT substr('abcdefghijk',3); --结果:cdefghijk
SELECT substr('abcdefghijk',3,2); -- 结果:cd
SELECT substr('abcdefghijk',-3); -- 结果:ijk
SELECT substr('abcdefghijk',-3,2); --结果:ij
split() 字符串切割
SELECTsplit('中国,美国,英国,法国',',') name #以,来切割'中国,美国,英国,法国'字符串
FROM test3;
-- 结果:[中国"'美国’'英国''法国']SELECTsplit('中国,美国,英国,法国'',')[0]name
FROM test3;
-- 结果:中国SELECTsplit('中国,美国,英国,法国…')[1] name
FROM test3;
-- 结果:美国
concat() 字符串拼接
SELECT concat("123","aaa");	-- 结果:123aaa
SELECT concat("123""aaa"'张三'); --结果:123aaa张三
collect set()/collect_... 行转列 列转行
name
tom
marry
peter
tom
tom
marry
SELECT collect_set(name) FROM test2;
-- 结果:["tom","marry","peter"]SELECT collect_list(name) FROM test2;
-- 结果:["tom","marry","peter","tom","tom","marry"]

HiveDML操作

Hive提供了类SQL的数据操作语言DML,用于操作数据表中的数据,例如数据的加载、查询和插入等操作。

插入数据 语法如下:
INSERT INTO table name [PARTITION(partition column = partition value)]
VALUES(value1,value2,...);--示例:直接插入固定数据:
INSERT INTO employees VALUES(1001'John Doe'!5000);--示例:插入查询结果数据:
INSERT INTO table_name [PARTITION(partition_column = partition_value)]
SELECT column_list FROM source_table WHERE condition;
更新数据在默认情况下,Hive不支持使用UPDATE更新操作。可以用以下方式。--示例1:将original_table表中数据更新
CREATE TABLE temp_table AS SELECT * FROM original_table;DROP TABLE original_table;
ALTER TABLE temp_table RENAME To original_table;--示例2:
INSERT OVERWFITE TABLE temp_table SELECT * FROM original_table;
删除数据
Hive不支持使用DELETE语句来删除数据,如果您希望删除整个分区及其所有数据,可以使用 ALTER TABLE 命令
--示例: 删除分区数据
ALTER TABLE employees DROP PARTITION(department='IT');--示例:删除整表数据
DROP TABLE employees;
查询数据 与MySQL中一致
-- 检索所有列
SELECT * FROM employees;-- 检索特定列
SELECT erp,salary,age FROM employees;-- 检索薪资大于5000的员工
SELECT erp,salary,age FROM employees WHERE salary > 5000-- 汇总薪资大于5000的员工的总薪资
SELECT SUM(salary) FROM employees WHERE salary > 5000;
关联查询数据 与MySQL中一致
-- 内连接:返回两表id能匹配上的记录
SELECT t1.name,t2.cityFROM employees t1JOIN city t2ON t1.id = t2.id-- 左连接:返回左表全量数据
SELECT t1.name,t2.cityFROM employees t1LEFT JOIN city t2ON t1.id=t2.id-- 右连接:返回右表全量数据
SELECT t1.name,t2.cityFROM employees t1RIGHT JOIN city t2ON t1.id=t2.id-- 全连接:返回左表和右表全量数据
SELECT t1.namet2.cityFROM employees t1FULL JOIN city t2ON t1.id =t2.id

Hive优化和案例讲解

核心优化思想

  • 尽早过滤不需要的数据,减少每个阶段输出数据量
  • 减少 job 数量
  • 尽量让map阶段均衡读取数据,减少数据倾斜

过滤不需要数据

----列裁剪(尽量避免使用*)
table1:a、b、c、d、e、f
table2:a、g、h、i、k
SELECT t1.a,t1.b,t1.c,t2.gFROM ( SELECT a,b,c FROM table1 WHEREe < 40 ) t1JOIN ( SELECT a,g FROM table2 WHERE k = '北京' ) t2ON t1.a = t2.a----分区裁剪
--在查询的过程中 分区越精确越好
oper_erp		oper_type		dt				ht
zhangsan		create_file		2024-08-01		02
lisi			delete file		2024-08-01		03
wangwu			create file		2024-08-01		04SELECT erp, path, oper_type,oper_timeFROM system_audit_logWHERE dt = '2024-08-01'AND ht = 03----在join前过滤掉不需要的数据
--先关联,后过滤(不推荐)
SELECT a.val,b.valFROM a
LEFT OUTER JOIN bON a.key = b.keyWHERE a.ds = 2024-08-14 AND b.ds = 2024-08-14
--先过滤,后关联(推荐)
SELECT x.val,y.val FROM(SELECT key,val FROM a WHERE a.ds=2024-08-14) x
LEFT OUTER JOIN(SELECT key,val FROM b WHERE b.ds=2024-08-14) y 
ON x.key=y.key

减少job数

-- 多表关联时尽量选择同一个key:无论内关联还是外关联,如果join的key相同的话,不管关联多少个表只生成一个job。下面以a,b,c 三表举例--- 被翻译成 1 个 JOB
SELECT a.val, b.val, c.valFROM aJOIN b ON (a.key = b.key1)JOIN c ON (b.key1 = c.key)--- 被翻译成 2 个 JOB
SELECT a.val, b.val, c.valFROM aJOIN b ON (a.key = b.key1)JOIN c ON (b.key2 = c.key)--- union all 中的 job 优化
-- 2个job
SELECT * FROM
(select c1, c2 from A group by c1, c2) t1
union all
(select c1, c2 from B group by c1, c2) t2-- 1个job
SELECT * FROM
(select c1, c2 from A union all select c1, c2 from B) t
group by c1, c2

查询结果复用

使用 with as 将查询的结果保持下来,供后面的sql使用

-- 查询 a 表两次
INSERT OVERWRITE TABLE tmp1SELECT ... FROM a WHERE 条件1;
INSERT OVERWRITE TABLE tmp2SELECT ... FROM a WHERE 条件1;	-- 查询 a 表一次
WITH AS tmp_a (SELECT ... From a )
INSERT OVERWRITE TABLE tmp1SELECT ... FROM tmp_a WHERE 条件1;
INSERT OVERWRITE TABLE tmp2SELECT ... FROM tmp_a WHERE 条件1;	

行转列

若一行中有一个字段有多个值则给拆除来,单独成几行。

用 explode 关键字来拆分。explode入参是必须是一个列表,故用 split 对all_city关键字进行逗号分割成一个列表

id		user	name	all_citys
id1		user1	name1	北京,天津
id2		user2	name2	上海,河北SELECT id, user, name, city From myTable LATERAL VIEW explode(split(all_city, ',')) adTable AS cityid		user	name	city
id1		user1	name1	北京
id1		user1	name1	天津
id2		user2	name2	上海
id2		user2	name2	河北

去重优化

由于 COUNT DISTINCT 操作需要用一个 Reduce Task 来完成,这一个 Reduce 需要处理的数据量太大,就会导致整个 Job 很难完成。

一般 COUNT DISTINCT 先用 GRUOP BY 再COUNT

对于大数据用GRUOP BY的效率远大于 COUNT DISTINCT

-- 会比较慢 不推荐
SELECT COUNT(DISTINCT id) FROM bigtable;-- 对比大数据集,用GROUP BY的效率明显高于DISTINCT 推荐
SELECT COUNT(id) FROM (SELECT id FROM bigtable GROUP BY id) a;

mapjoin

在查询过程中,将小表放前面,大表放后面

-- mapjoin中小表被作为驱动表直接加载到内存中,每个map都会拿另一个表的数据与内存中的小表数据做匹配,由于每个map处理的数据量大致相同,因此解决了数据倾斜问题-- 启动mapjoin需先设置以下参数
SET hive.auto.convert.join=TRUE
SET hive.mapjoin.smalltable.filesize=25000000; -- 设置小表最大为25MB-- 执行查询语句 /*+ mapjoin(a)*/ 就是将small_table加载进内存
SELECT /*+ mapjoin(a)*/ a.id, b.col FROM small_table aJOIN big_table bON a.id = b.id

减少数据倾斜

数据倾斜指的是 在map-reduce 执行中, 单个map或单个reduce处理的数据量明显大于其他task处理的数据量。比如,空值数据占比大,爆单商品sku数据 就可能会导致数据倾斜。

具体表现:作业经常卡在Reduce=99%处,最后1%要跑很久

#假设有用户表,日志表两张表1 空值数据倾斜处理:赋予空值或其他异常值新的key值
-- 将空值key赋值为一个字符串+随机数,用于把倾斜的数据分布在不同的reducer上
select * from log aleft outer join user bon case when a.user_id is null then concat('hive', rand()) else a.user_id end ) = b.user_id2 key值不均产生的数据倾斜
-- 大量重复key产生的数据倾斜:通过调整参数实现负载均衡
-- 基本思路:先做一次部分聚合,再做最终聚合-- 方法1 map端部分聚合(按大小切片,保证每个map数据量差不多)
set hive.map.aggr = true; -- 默认为true-- 方法2 前面设为true时,生产的查询计划会有两个MR job
set hive.groupby.skewindata = true; -- 默认为false

当然应急的时候,可以对空值,特殊值的过滤来解决数据倾斜。

http://www.dtcms.com/wzjs/328936.html

相关文章:

  • 想学做网站网址域名
  • 铝合金做网站做好的网站怎么优化
  • 网站备案如何取消接入黑马程序员培训机构官网
  • 怎样开发一个管理系统什么是搜索引擎优化seo
  • git怎么做隐私政策网站网推公司干什么的
  • 物业管理系统app宁波seo推广优化怎么做
  • 手机网站建设市场报价网络热词的利弊
  • 网站设计基本流程关键词搜索趋势
  • 网站建设标准流程及外包注意事项打开百度app
  • 做系统网站建设百度开户推广多少钱
  • 湛江做网站seo的公司软文推广
  • 线上设计师网站国内手机怎么上google浏览器
  • 交友网站建设策划方案(2)百度联盟个人怎么接广告
  • 做网站公司-汉狮网络seo外链友情链接
  • 网站开发有什么软件有哪些seo优化网络公司排名
  • 个人个案网站 类型谷歌独立站推广
  • 网站建设冒用身份信息郑州网站运营专业乐云seo
  • 做网站找外包好吗图片优化
  • 东莞网站建设设计公司seo网站关键词优化工具
  • 元典科技网站建设怎么自己做一个网站
  • 衡水制作网站seo专员是指什么意思
  • 在线答题网站怎么做百度推广用户注册
  • 张家港建网站费用网页制作html代码
  • 做网站排名推广效果怎么样百度收录网址提交
  • 无锡专业网站排名推广单词优化和整站优化
  • 如何利用个人nas做网站最新seo视频教程
  • 旅游电商网站有哪些我是站长网
  • 晴天阴天雨天wordpress优化公司治理结构
  • 网站平台建设实训体会品牌推广的渠道有哪些
  • 湖州建设局新网站网站设计公司官网