1、NVL函数与Coalesce差异
-- select nvl(null,8); -- 结果是 8
-- select nvl('',7); -- 结果是""
-- select coalesce(null,null,9); -- 结果是 9
-- select coalesce("",null,9); -- 结果是 ""
1.2、
2、hive 库、表、数据的增删改查语法
- -- create table test_kuming_202311041520.students
- -- ( id bigint, name string);
-
- -- select * from test_kuming_202311041520.students;
-
- -- drop table test_kuming_202311041520.students;
-
- -- insert into test_kuming_202311041520.students (id,name) values(1,"yyyy")
-
- ---- insert into 加不加表名,都可以。
- -- insert into test_kuming_202311041520.students (id,name) values(12,"wwww")
-
- -- insert into table test_kuming_202311041520.students (id,name) values(52,"9999")
-
- ---- overwrite 的错误用法
- -- insert overwrite table test_kuming_202311041520.students (id,name) values(52,"9999") -- 这样操作是错误的;
-
- -- overwrite 的正确用法
- -- insert overwrite table test_kuming_202311041520.students
- -- select * from test_kuming_202311041520.students where id = '1'
-
-
-
-
-
4、hive 表新增字段
5、SQL之with子句
6、分享10个高级sql写法
6.1、通过分组,组合某个字段的内容。
SELECT shopname, GROUP_CONCAT(shangpinname SEPARATOR '-')
from shop_dq_sjb GROUP BY shopname;
7、 在 数据库 中创建emp 和dept 数据
表的准备:dept(部门表)、emp(员工表)、salgrade(薪资等级表)、bonus(奖金表,没数据)
- -- select * from bonus;
- -- select * from DEPT;
- -- select * from EMP;
- -- select * from SALGRADE;
-
-
- CREATE TABLE BONUS (
- ENAME VARCHAR(100) ,
- JOB VARCHAR(100) ,
- SAL int NULL ,
- COMM decimal(10,2)
- );
-
- CREATE TABLE DEPT (
- DEPTNO int NOT NULL ,
- DNAME VARCHAR(140) NULL ,
- LOC VARCHAR(130) NULL
- );
-
-
- CREATE TABLE EMP (
- EMPNO int NOT NULL ,
- ENAME VARCHAR(100) NULL ,
- JOB VARCHAR(90) NULL ,
- MGR int NULL ,
- HIREDATE DATE NULL ,
- SAL int NULL ,
- COMM decimal(7,2) NULL ,
- DEPTNO int NULL
- );
-
-
- CREATE TABLE SALGRADE (
- GRADE int NULL ,
- LOSAL int NULL ,
- HISAL int NULL
- );
-
-
- INSERT INTO DEPT VALUES ('10', 'ACCOUNTING', 'NEW YORK');
- INSERT INTO DEPT VALUES ('20', 'RESEARCH', 'DALLAS');
- INSERT INTO DEPT VALUES ('30', 'SALES', 'CHICAGO');
- INSERT INTO DEPT VALUES ('40', 'OPERATIONS', 'BOSTON');
-
-
-
- INSERT INTO EMP VALUES ('7369', 'SMITH', 'CLERK', '7902', '1980-12-17 00:00:00' , '800', null, '20');
- INSERT INTO EMP VALUES ('7499', 'ALLEN', 'SALESMAN', '7698', '1981-02-20 00:00:00' , '1600', '300', '30');
- INSERT INTO EMP VALUES ('7521', 'WARD', 'SALESMAN', '7698', '1981-02-22 00:00:00' , '1250', '500', '30');
- INSERT INTO EMP VALUES ('7566', 'JONES', 'MANAGER', '7839', '1981-04-02 00:00:00' , '2975', null, '20');
- INSERT INTO EMP VALUES ('7654', 'MARTIN', 'SALESMAN', '7698', '1981-09-28 00:00:00' , '1250', '1400', '30');
- INSERT INTO EMP VALUES ('7698', 'BLAKE', 'MANAGER', '7839', '1981-05-01 00:00:00' , '2850', null, '30');
- INSERT INTO EMP VALUES ('7782', 'CLARK', 'MANAGER', '7839', '1981-06-09 00:00:00', '2450', null, '10');
- INSERT INTO EMP VALUES ('7788', 'SCOTT', 'ANALYST', '7566', '1987-04-19 00:00:00' , '3000', null, '20');
- INSERT INTO EMP VALUES ('7839', 'KING', 'PRESIDENT', null, '1981-11-17 00:00:00' , '5000', null, '10');
- INSERT INTO EMP VALUES ('7844', 'TURNER', 'SALESMAN', '7698', '1981-09-08 00:00:00' , '1500', '0', '30');
- INSERT INTO EMP VALUES ('7876', 'ADAMS', 'CLERK', '7788', '1987-05-23 00:00:00' , '1100', null, '20');
- INSERT INTO EMP VALUES ('7900', 'JAMES', 'CLERK', '7698', '1981-12-03 00:00:00', '950', null, '30');
- INSERT INTO EMP VALUES ('7902', 'FORD', 'ANALYST', '7566', '1981-12-03 00:00:00' , '3000', null, '20');
- INSERT INTO EMP VALUES ('7934', 'MILLER', 'CLERK', '7782', '1982-01-23 00:00:00' , '1300', null, '10');
-
-
- INSERT INTO SALGRADE VALUES ('1', '700', '1200');
- INSERT INTO SALGRADE VALUES ('2', '1201', '1400');
- INSERT INTO SALGRADE VALUES ('3', '1401', '2000');
- INSERT INTO SALGRADE VALUES ('4', '2001', '3000');
- INSERT INTO SALGRADE VALUES ('5', '3001', '9999');
-
-
-
-
8、 Hive——hive性能优化
9、oracle的 listagg() WITHIN GROUP () 行转列函数的使用
10、Mysql与Oracle函数差异以及SQL对比
11、oracle的 listagg() WITHIN GROUP () 行转列函数的使用
12、PostgreSQL 创建表时如何为列添加注释
13、关于Hive使用动态分区插入数据详解
16、Hive的hive.exec.parallel参数说明
17、hive.exec.parallel.thread.number
17.1、
set hive.execution.engine=mr; --mr引擎
set hive.exec.dynamic.partition=true; --允许动态分区
set hive.auto.convert.join=true; --此配置可能会导致数据倾斜
set hive.map.aggr=true; --是否开启Map端聚和
set hive.groupby.mapaggr.checkinterval = 100000 ;--在Map端进行聚和的条目数
set hive.groupby.skewindata = true; --有数据倾斜的时候进行负载均衡
set hive.exec.parallel=true; --并行开关
set hive.exec.parallel.thread.number =16; --并行条数
set hive.exec.dynamic.partition.mode=nonstrict; --非严格模式
--set hive.exec.max.dynamic.partitions=100000; --总共允许创建的最大动态分区数
--set hive.exec.max.dynamic.partitions.pernode=100000;--每个mapper或reducer可以创建的最大动态分区个数
--# map阶段内存不足
set mapreduce.map.memory.mb=8192;
set mapreduce.map.java.opts=-Xmx8120m;
--# reduce阶段内存不足
set mapreduce.reduce.memory.mb=8120;
set mapreduce.reduce.java.opts=-Xmx8120m;
18、Hive中如何调整MapReduce任务的内存占用
Hive中如何调整MapReduce任务的内存占用? – 编程技术之美-IT之美https://www.itzhimei.com/archives/4673.html
20、Hive操作——删除表(drop、delete ,truncate)
20.4、百度安全验证https://baijiahao.baidu.com/s?id=1708962497266232303&wfr=spider&for=pc
20.6、
21、hive常用日期函数
22、Hive SQL 语法大全
23、Hive sql - 常用窗口函数(万字超详解)
24、SQL四种方法实现行列转换超详细
26、hive sql
26.2、
28、动态分区的实现逻辑
- -- drop table `dwd.test_dong_202311301621`
- -- 创建表(带分区,带防止字段错位)
- CREATE TABLE `dwd.test_dong_202311301621`(
- `id` string COMMENT 'Id',
- `name_ed` string COMMENT '姓名',
- `dept_name` string COMMENT '部门')
- COMMENT 'dong_测试表'
- PARTITIONED BY (
- `b_n` string COMMENT '分区字段')
- stored as parquet --(etl任务,从其他数据库导入hive数仓,字段内容错位的时候,要加上这个条件)
-
-
- show create TABLE `dwd.test_dong_202311301621`;
-
-
- --===========插入数据
-
- set hive.exec.parallel=true;
- set hive.exec.parallel.thread.number=16;
-
- set hive.exec.dynamic.partition.mode=nonstrict;
- set hive.exec.dynamic.partition=true;
- set hive.execution.engine=mr;
- set hive.exec.max.dynamic.partitions=10000;
- set hive.exec.max.dynamic.partitions.pernode=10000;
-
- set mapreduce.map.memory.mb=7120;
- set mapreduce.map.java.opts=-Xmx7120m;
- set mapreduce.reduce.memory.mb=7120;
- set mapreduce.reduce.java.opts=-Xmx7120m;
-
- -- insert overwrite table dwd.test_dong_202311301621 partition(bsn_mon)
-
- insert overwrite table dwd.test_dong_202311301621 partition(b_n)
- select fy_id,wtdw,xitonglaiy,substring(current_timestamp(),-3,3)
- from dwd.dwd_fin_ywxt_otm_yjmxb_three limit 100;
-
-
-
- -- select count(*) from dwd.test_dong_202311301621;
- -- truncate table dwd.test_dong_202311301621;
- -- select * from dwd.test_dong_202311301621;
-
-
- --==================查看分区
-
- -- show partitions dwd.test_dong_202311301621;
29、一个简单存储过程插入数据
-
-
- -- CREATE table T500(
- -- id INTEGER);
- --
- -- select * from T500
-
- -- TRUNCATE table T1
-
-
-
- -- create procedure sum_total(a int)
- -- begin
- -- declare sum int default 0; -- default 是指定该变量的默认值
- -- declare i int default 0;
- -- while i<=a DO -- 循环开始
- -- set sum=sum+i;
- -- set i=i+1;
- -- -- 向一张表中插入数据(此表两个varchar字段)
- -- INSERT into T500 VALUES(i);
- -- end while; -- 循环结束
- -- select sum; -- 输出结果
- -- end;
- -- -- 执行存储过程
- -- call sum_total(499);
- --
- -- -- 删除存储过程
- -- drop procedure if exists sum_total;
-
30、查看一张表的数据大小
- select concat(round(sum(DATA_LENGTH/1024/1024),2),'MB') as data
- from information_schema.TABLES
- where table_schema = 'test926' and table_name='test_jack_500';
-
-
-
-
-
-
- --===================
- 修改数据库名字,和表名字,即可。
- where table_schema = 'test926' and table_name='test_jack_500';
-
-
-
- 测试多少条数据
- select count(*) from test_jack_500;
31、RDBMS是什么意思(关系型数据库管理系统的缩写)
31.1、
RDBMS是什么意思_笔记大全_设计学院https://www.python100.com/html/Q5S33ZGN7W54.html
- -- postpreSQL 数据库
-
- -- ads_port_cli_num_detail 表名
-
- ALTER TABLE ads_port_cli_num_detail ADD order_number_de VARCHAR(500); -- 添加字段
- COMMENT ON COLUMN ads_port_cli_num_detail.order_number_ord IS '订单号'; -- 字段添加(备注)
- COMMENT ON COLUMN ads_port_cli_num_detail.order_number_de IS '运单号';-- 字段添加(备注)
-
-
-
- -- 详情操作过程
- CREATE TABLE ads_fin_yjmxb_final_guangxi_gngj(
- etl_time VARCHAR(256) ,
- g_opecenter VARCHAR(256) ,
- g_period VARCHAR(256) ,
- g_inter_or_dom VARCHAR(256) ,
- g_inter_or_dom_fenkaitongji VARCHAR(256) ,
- g_inter_or_dom_tatal VARCHAR(256) ,
- g_zb_gngj VARCHAR(256)
- )
-
- -- 添加注释到表
- COMMENT ON TABLE ads_fin_yjmxb_final_guangxi_gngj IS '广西_国际国内的毛利占比_明细表';
-
- -- 添加注释到列
- COMMENT ON COLUMN ads_fin_yjmxb_final_guangxi_gngj.etl_time IS '调度时间';
- COMMENT ON COLUMN ads_fin_yjmxb_final_guangxi_gngj.g_opecenter IS '营运中心';
- COMMENT ON COLUMN ads_fin_yjmxb_final_guangxi_gngj.g_period IS '会计期间';
- COMMENT ON COLUMN ads_fin_yjmxb_final_guangxi_gngj.g_inter_or_dom IS '国际国内';
- COMMENT ON COLUMN ads_fin_yjmxb_final_guangxi_gngj.g_inter_or_dom_fenkaitongji
- IS '每个月国际国内数量';
- COMMENT ON COLUMN ads_fin_yjmxb_final_guangxi_gngj.g_inter_or_dom_tatal IS '每个月国际国内总数量';
- COMMENT ON COLUMN ads_fin_yjmxb_final_guangxi_gngj.g_zb_gngj IS '国际国内的毛利占比';
-
-
- -- 查看表信息
- desc shop_dq;
- show CREATE table shop_dq;
- -- 添加字段
- ALTER table shop_dq add yuc VARCHAR(100) comment '测试字段';
- -- 修改字段
- alter table shop_dq modify yuc int comment '测试字段int';
- -- 指定字段添加的位置
- alter table shop_dq add yuc_shop_id int AFTER shopid;
- -- 删除字段
- alter table shop_dq drop yuc_shop_id;
- -- 删除多个字段
- alter table shop_dq drop yuc_shop_id,drop yuc;
-
- -- 查询表信息
- select * from shop_dq
-
-
-
-
-
-
- -- 分区赋值与代码书写逻辑(动态分区与静态分区)
-
- set hive.exec.parallel=true;
- set hive.exec.parallel.thread.number=16;
-
- set hive.exec.dynamic.partition.mode=nonstrict;
- set hive.exec.dynamic.partition=true;
- set hive.execution.engine=mr;
- set hive.exec.max.dynamic.partitions=10000;
- set hive.exec.max.dynamic.partitions.pernode=10000;
-
- set mapreduce.map.memory.mb=7120;
- set mapreduce.map.java.opts=-Xmx7120m;
- set mapreduce.reduce.memory.mb=7120;
- set mapreduce.reduce.java.opts=-Xmx7120m;
-
-
- --动态分区赋值方法一
- insert overwrite table dwd.dwd_fin_ywxt_otm_yjmxb_two partition(bsn_mon)
- select
- '$[now(yyyy-MM-dd HH:mm:ss)]' AS ETL_TIME,
- fszt,
- concat(substring(orh.ddcjtimg,1,7),'-01') as bsn_mon
- from dwd.dwd_fin_ywxt_otm_yjmxb_one orh
-
-
- --动态分区赋值方法二
- insert overwrite table dwd.dwd_fin_yjmxb_final partition(bsn_mon='$[time(yyyy-MM-01,-1M)]')
- select
- '$[now(yyyy-MM-dd HH:mm:ss)]' AS ETL_TIME,
- id, --ID
- concat(substring(orh.ddcjtimg,1,7),'-01') as bsn_mon
- from dwd.dwd_fin_ywxt_otm_yjmxb_one orh
-
-
- --静态分区赋值方法一
- insert overwrite table dwd.dwd_fin_yjmxb_final partition(bsn_mon='202312')
- select
- '$[now(yyyy-MM-dd HH:mm:ss)]' AS ETL_TIME,
- id, --ID
- concat(substring(orh.ddcjtimg,1,7),'-01') as bsn_mon
- from dwd.dwd_fin_ywxt_otm_yjmxb_one orh
-
-
-
-
-
35、复制表,插入表数据
- SELECT * FROM `dept`
-
-
- -- ======= 复制一张表(除了数据没有复制过来,索引、存储引擎、备注、默认字符集等等都完成了复制)
- create table test_dept like dept;
- -- ========= 查询新表
- select * from test_dept;
- -- ========= 向新表插入数据(不用加values关键字)
- insert into test_dept select * from dept;
-
-
-
- https://blog.csdn.net/Crezfikbd/article/details/129796417
36、 SQL函数大全,史上最全,值得收藏!
- -- 对日期和时间的移位(指定时间格式)
- select date_sub(curdate(),INTERVAL 1 month);
- SELECT DATE_ADD(curdate(), INTERVAL -1 month);
- select TIMESTAMPADD(month,-1,curdate());
-
- select TIMESTAMPADD(month,-1,now());
-
- -- 两个时间相减
- select DATEDIFF('2023-12-23','2022-12-23');
37、MySQL中concat()、concat_ws()、group_concat()三个函数的使用技巧案例与心得总结
38、MySQL中float、double、decimal三个浮点类型的区别与总结!
38.2、
38.3、
39、MySQL(61)MySQL REGEXP:正则表达式
40、SQL中EXTRACT() 函数
41.2、
MySQL存储过程和触发器https://c.biancheng.net/mysql/85/
42、ddl和dml的区别
百度安全验证https://baijiahao.baidu.com/s?id=1708962497266232303&wfr=spider&for=pc
43、SQL中Exists用法
43.2、
44、 mysql中longtext和longblob有啥区别
44.2、
45、 图片保存在数据库中
- CREATE TABLE images (
- id INT(11) NOT NULL AUTO_INCREMENT,
- named VARCHAR(50) NOT NULL,
- datad LONGBLOB NOT NULL,
- PRIMARY KEY (id)
- );
-
-
-
- select * from images;
-
-
- -- truncate table images;
-
- -- === 查看图片可以存放的路径
- show global VARIABLES like '%secure%';
- -- ======= 测试一下
- select LOAD_FILE("D:/mysql/Uploads/my_images/my_image.png");
-
- -- 插入数据
- INSERT INTO images (named,datad) VALUES
- ('my_image.png',LOAD_FILE("D:/mysql/Uploads/my_images/my_image.png"));
-
-
- select * from images;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
45.2、
45.3、
45.4、
47、
48、
49、
50、
51、
52、
53、
54、
55、
56、
57、
58、
59、
60、
61、
62、
63、
64、
65、
66、
67、
68、
69、
70、
71、
72、
73、
74、
75、
76、
77、
78、
79、
80、