首页 > 其他分享 >9.21每日总结

9.21每日总结

时间:2023-09-21 17:37:17浏览次数:52  
标签:总结 9.21 name 每日 分隔符 employee table column1 select

 

Hive表操作–增删改:
(1)创建一个自定义分隔符的普通内部表:

CREATE TABLE IF NOT EXISTS employee ( #employee为举例表名,根据实际情况进行替换,下同
name string,
work_place ARRAY<string>,
sex_age STRUCT<sex:string,age:int>,
skills_score MAP<string,int>,
depart_title MAP<STRING,ARRAY<STRING>> #小括号内均为“列名 类型,”格式,此处列举了多种典型情况
)
COMMENT 'This is a table' #COMMENT后面替换为你想要加的注释
ROW FORMAT DELIMITED
#行格式化限制后面几行为设定的分隔符和存储格式,根据数据实际需要进行替换,以下几项均可不写,不写时,使用默认分隔符
FIELDS TERMINATED BY '|' #字段分隔符'|'
COLLECTION ITEMS TERMINATED BY ',' #集合分隔符
MAP KEYS TERMINATED BY ':' #映射分隔符
STORED AS TEXTFILE #存储为文本形式
tblproperties ("skip.header.line.count"="1"); #跳过表头(可选操作)
(2)创建一个导入数据文件类型为csv的内部表:

CREATE TABLE my_table(
a string,
b string, ...) #a,b为列名;string为列类型
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' #用于导入csv文件的特殊类
WITH SERDEPROPERTIES (
"separatorChar" = "\t", #分隔符
"quoteChar" = "'", #引用符,即''内的内容作为一个整体
"escapeChar" = "\\"#忽略符,当遇到引用符时,就自动忽略分隔符,不论''里面的数据是否包含分隔符(separatorChar)
)
STORED AS TEXTFILE;

separatorChar,quoteChar,escapeChar均为可选属性默认情况下:

separatorChar为 ,
quoteChar为 "
escapeChar为 \
(3)创建外部表:
CREATE EXTERNAL TABLE my_table_external(
a string,
b string, ...) #a,b为列名;string为列类型
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' #用于导入csv文件的特殊类
WITH SERDEPROPERTIES (
"separatorChar" = "\t", #分隔符
"quoteChar" = "'", #引用符,即''内的内容作为一个整体
"escapeChar" = "\\"#忽略符,当遇到引用符时,就自动忽略分隔符,不论''里面的数据是否包含分隔符(separatorChar)
)
STORED AS TEXTFILE;
location hdfs_path

(4)创建临时表:

CREATE temporary TABLE my_table(
a string,
b string, ...) #a,b为列名;string为列类型
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' #用于导入csv文件的特殊类
WITH SERDEPROPERTIES (
"separatorChar" = "\t", #分隔符
"quoteChar" = "'", #引用符,即''内的内容作为一个整体
"escapeChar" = "\\"#忽略符,当遇到引用符时,就自动忽略分隔符,不论''里面的数据是否包含分隔符(separatorChar)
)
STORED AS TEXTFILE;

(5)向表中载入数据:

load data local inpath 'file_path' overwrite into table table_name; #file_path为你的本地文件路径,table_name为你要导入的表的名字

(6)向表中添加数据:

insert into table_name values (column1_value,column2_value,...) #column_value为每列的值

(7)修改表中数据:

update table_name set column_name1=column_newvalue1,column_name2=column_newvalue2,... where 条件
#支持同时修改多个列,条件可以为多个不同的条件用and或or进行连接

(8)删除表中数据:

delete from table_name where 条件 #条件可以为多个不同的条件用and或or进行连接

(9)清空表中数据:

truncate table table_name # truncate不能清空外部表中的数据

(10)删除表:

drop table_name

(11)创建静态#建表时定义分区,通过PARTITIONED BY定义分区

CREATE TABLE employee_partitioned(
name string,
work_place ARRAY<string>,
sex_age STRUCT<sex:string,age:int>,
skills_score MAP<string,int>,
depart_title MAP<STRING,ARRAY<STRING>> )
PARTITIONED BY (year INT, month INT)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '|'
COLLECTION ITEMS TERMINATED BY ','
MAP KEYS TERMINATED BY ':';

(12)静态分区表操作:

#ADD添加分区,DROP删除分区
ALTER TABLE employee_partitioned ADD PARTITION (year=2019,month=3) PARTITION (year=2019,month=4);
ALTER TABLE employee_partitioned DROP PARTITION (year=2019, month=4);

(13)创建动态分区表:

#先创建一个普通内部表即可
CREATE TABLE employee_partitioned(
name string,
work_place ARRAY<string>,
sex_age STRUCT<sex:string,age:int>,
skills_score MAP<string,int>,
depart_title MAP<STRING,ARRAY<STRING>> )
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '|'
COLLECTION ITEMS TERMINATED BY ','
MAP KEYS TERMINATED BY ':';

#设置hive.exec.dynamic.partition.mode属性为nonstrice
set hive.exec.dynamic.partition.mode=nonstrict;

#insert方式添加动态分区
insert into table employee_partitioned partition(year, month)
select name,array('Toronto') as work_place,
named_struct("sex","male","age",30) as sex_age,
map("python",90) as skills_score,
map("r&d", array('developer')) as depart_title,
year(start_date) as year,month(start_date) as month
from employee_hr eh ;

Hive表操作–查
(1)简单查询表中数据:

select column1,column2,... from table_name where 条件1,条件2...
#column1,column2为列名;条件可以为一个或多个条件,不同条件间用and和or连接
#例如 where name='tom' and age = 20

(2)查询某列数据中不重复的数据:

select DISTINCT column1 from table_name #DISTINCT限定查询唯一数据

(3)CTE(Common Table Expression)查询方式:

WITH t1 AS (SELECT …) SELECT * FROM t1 # t1执行首次查询中查询的表,后面的select再从前面查询的结果中筛选出新的结果
#举例
#此句为统计订单最多的顾客的订单数,rank()是一种用于排序的开窗函数,后面会讲到
with a as(
select customer_id,count(transcation_id) as nums from transcation_details group by customer_id),
b as(
select *,rank() over(order by nums desc) rn from a)
select * from b;

(4)嵌套查询:

#此处为为一个嵌套查询样例,作用是与CTE方式相同,都是从上一级查询获得的结果中筛选出新的结果
SELECT * FROM (SELECT * FROM employee) a;

(5)列匹配正则表达式:

# Hive要想支持正则表达式查询需先将hive.support.quoted.identifiers设置为none
SET hive.support.quoted.identifiers = none;
SELECT `^o.*` FROM offers; #表示查询offers表中以字母o开头的,包含0个或多个换行符以外字符的列

(6)关联查询:

a. Inner Join(内连接):
从两表交集中查询结果(即区域C),隐式连接(Join)也是一种内连接。

select column1,column2 from table_a inner join table_b; #显示内连接
select column1,column2 from table_a join table_b #隐式内连接

b.Outer Join(外连接):
i.左外连接:
从整个左表中查询结果(即区域A)。

select column1,column2,... from table_a left join table_b;
select column1,column2,... from table_a left outer join table_b;

ii.右外连接:
从两表交集和右表其余部分中获取查询结果(即区域B)。

select column1,column2,... from table_a right join table_b;
select column1,column2,... from table_a right outer join table_b;

iii.全外连接:
从两表全部数据中查询结果(即AUBUC)。

select column1,column2,... from table_a full outer join table_b;

c.Cross Join(交叉连接,取笛卡尔积)

select column1,column2,... from table_a,table_b;

(7)合并多次查询结果(Union):

select column1 from table_a where column1='a'
union
select column2 from table_a where column2='b';

Hive数据排序:
(1).ORDER BY(默认正序即ASC)

select * from table_a order by column1; #按column1列从小到大进行排序
select * from table_a order by column1 desc; #按column1列从大到小进行排序

(2).SORT BY/DISTRIBUTE BY
SORT BY对每个Reducer中的数据进行排序:

当Reducer数量设置为1时,等于ORDER BY。
排序列必须出现在SELECT column列表中。
DISTRIBUTE BY类似于标准SQL中的GROUP BY:
确保具有匹配列值的行被分区到相同的Reducer。
不会对每个Reducer的输出进行排序。
通常使用在SORT BY语句之前。
例:
SELECT department_id , name, employee_id, evaluation_score
FROM employee_hr
DISTRIBUTE BY department_id SORT BY evaluation_score DESC;

(3).CLUSTER BY
CLUSTER BY大致相当于sort by和distribute by合在一起的效果,但它不支持ASC和DESC且排序列必须出现在SELECT column列表中。

SELECT name, employee_id FROM employee_hr CLUSTER BY name;

Hive聚合运算
(1)Group By(按列进行分组):

select category, max(offervalue) from offers group by category;

(2)Having(对GROUP BY聚合结果的条件过滤,不建议使用):

#以下为一个典型的Having语句
select sex_age.age from employee group by sex_age.age having count(*) <= 1;

(3)取某列的最大/最小值/平均值/和:

selects customer_id,max(price) `最大值` from offers;
selects customer_id,min(price) `最小值` from offers;
selects customer_id,avg(price) `平均值` from offers;
selects customer_id,sum(price) `总和` from offers;

Hive窗口函数
(1)ROW_NUMBER():对所有数值输出不同的序号,序号唯一连续。
(2)RANK():对相同数值,输出相同的序号,下一个序号跳过(1,1,3)。
(3)DENSE_RANK():对相同数值,输出相同的序号,下一个序号连续(1,1,2)。
(4)NLITE(n):将有序的数据集合平均分配到n个桶中, 将桶号分配给每一行,根据桶号,选取前或后 n分之几的数据。
(5)(目前排名- 1)/(总行数- 1),值相对于一组值的百分比排名。

SELECT
name, dept_num, salary,
ROW_NUMBER() OVER () AS row_num,
RANK() OVER (PARTITION BY dept_num ORDER BY salary) AS rank,
DENSE_RANK() OVER (PARTITION BY dept_num ORDER BY salary) AS dense_rank,
PERCENT_RANK() OVER(PARTITION BY dept_num ORDER BY salary) AS percent_rank,
NTILE(2) OVER(PARTITION BY dept_num ORDER BY salary) AS ntile
FROM employee_contract
ORDER BY dept_num, salary;

补:窗口类型:行类型窗口和范围类型窗口:
**行类型窗口:**以当前行为参照,通过向前或向后数任意行进行范围确定。


SELECT
name, dept_num AS dept, salary AS sal,
MAX(salary) OVER (PARTITION BY dept_num ORDER BY name ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) win1 FROM employee_contract ORDER BY dept, name;

**范围类型窗口:**以当前行为参照,通过向前和向后数任意行进行范围确定。

SELECT department_id,SUM(salary) RANGE BETWEEN 500 PRECEDING AND 1000 FOLLOWING from salary group by department_id;

从本地导入表/导出表到本地
(1) 从本地导入表:

IMPORT TABLE employee FROM '/tmp/output3';

(2)导出表到本地:

EXPORT TABLE employee TO '/tmp/output3';
————————————————
原文链接:https://blog.csdn.net/welson650/article/details/105835663

标签:总结,9.21,name,每日,分隔符,employee,table,column1,select
From: https://www.cnblogs.com/ZRGUGUGU818/p/17720470.html

相关文章

  • 每日总结|9.21-Hive搭建及报错解决方案
    搭建安装hive把apache-hive-3.1.2-bin.tar.gz上传到linux的/opt/software目录下 解压apache-hive-3.1.2-bin.tar.gz到/opt/module/目录下面tar-zxvf/opt/software/apache-hive-3.1.2-bin.tar.gz-C/opt/module/修改apache-hive-3.1.2-bin.tar.gz的名称为h......
  • Git忽略提交规则 - .gitignore配置运维总结
    在使用Git的过程中,我们喜欢有的文件比如日志,临时文件,编译的中间文件等不要提交到代码仓库,这时就要设置相应的忽略规则,来忽略这些文件的提交。简单来说一个场景:在你使用gitadd.的时候,遇到了把你不想提交的文件也添加到了缓存中去的情况,比如项目的本地配置信息,如果你上传到Git中去......
  • 工作流程优化 - 总结笔记
    一、一个忙碌的上午(现实中的工作流问题)小张已经忙了一个早上了,她觉得自己还是很有条理的,这种有条理的忙碌感让他觉得内心充实。她会把每件工作按照紧急程序进行一个大致的排序,一件件处理,但是判断依据呢?只是自己的一个感觉而已。(问题:没有对瓶颈环节设计紧急的分流方案)老王的......
  • 软件产品研发流程总结
    开发流程更完整、更有效率,产品才能脱颖而出。 1.项目启动在项目启动阶段,主要确定项目的目标、范围及其可行性,我们需要对项目的背景、干系人、决策人等等进行了解。编制项目章程和组建项目团队,包括:产品经理、架构师、UI工程师、开发工程师、测试工程师等;明确项目管理制度,每......
  • 2023.9.21——每日总结
    学习所花时间(包括上课):9h代码量(行):0行博客量(篇):1篇今天,上午上课,下午上课。我了解到的知识点:1.了解了关于模型训练的一些知识和注意事项;2.了解了关于软件构造的一些知识,明日计划:1.完成Hive的测试;......
  • 从零开始的32小车/diary/9.21
    今上午起晚了,一百多个毕设就剩这一个了。也算是为了应付毕设,开卷。 题目:机场智能行李车系统的设计与实现实现行李车定位、非特定人语音识别、循迹避障等,实现一款通过语音交互与乘客进行沟通的可以为机场乘客领路、陪伴乘客完成登机前准备工作的机场智能行李车。需要知识点:嵌入......
  • 问题总结
    1.参数影响RDS实例性能分库分表实例,共5台rds相同的配置,每个rds20个表,在执行相同的脚本(串行执行altertable来回收表空间),发现其中一台数据库(rds1)实例执行的速度比其他4台足足慢了1天,分库分表,数据量是差不多的,表大小也差不多,为什么会有这么大的差异呢?排查结果:发现rds1的其中......
  • 9.21 英语精读
    高铁化妆 Apublicservicevideoabout"uncivilisedbehavior"onboardChina'smuch-laudedhigh-speedtrainsappearstohavecomeofftherailsamidaccusationsthatitsinglesoutwomen.Thevideoappearstohavebeenintendedtoencourage......
  • 9月16日总结
    数据库sql中判断时间冲突数据库现有数据其中两列:s-开始时间,e-结束时间.在新插入数据s',e'之前需要判断两个时间之间是否有重合因为使用mybatis-plus的缘故,结论都使用s或e在符号前面.s<e比如yyyy-MM-ddHH:mm:ss格式的数据,多用于判断预约时间和每日排班冲突......
  • 9月19日总结
    合集-计算机网络(5)1.网络协议的重要性与应用:理解进程间通信和网络分层结构(上)09-172.网络协议的重要性与应用:理解进程间通信和网络分层结构(下)09-183.深入理解HTTP的基础知识:请求-响应过程解析09-194.深入解析HTTP请求:了解请求特征与报文格式的关键秘密09-205.TCPvsUD......