上海古都建筑设计集团,上海办公室装修设计公司,上海装修公司高质量的内容分享社区,上海装修公司我们不是内容生产者,我们只是上海办公室装修设计公司内容的搬运工平台

hql、数据仓库、sql调优、hive sql、python

guduadmin11天前

SQL/HQL

HQL(Hibernate Query Language) 是面向对象的查询语言

SQL的操作对象是数据列、表等数据库数据 ; 而HQL操作的是类、实例、属性

#FROM 
String hql = "from com.demo.bean.User" =  "select * from user"
#WHERE
"form User u  where u.id = 1 " = "select * form user where id = 1"
#查询出一个String/或者其他类型的属性,封装为List
        public List getAllUsernames(){
                Session session = new HibernateSessionFactory().getSession();
                String hql = "select u.username from User as u where status = 0"; 
                Query query = session.createQuery(hql); 
                List list = query.list();  //返回出的List对象中,封装的对象的类型,看具体的情况而定的
                return list;
        }
#使用统计函数
String hql = "select count(*) from User where status = 0";
String hql = "select count(*),min(u.age) from User as u where status = 0";
#分组和排序
String hql = “select u.username form User as u order by u.age desc”  按年龄的降序排列取出姓名
String hql =”select count(user),age from User group by age having count(user)>3”;
#实体更新和删除   HQL对数据库的修改操作,需要事务来实现
有条件删除   String hql = "delete from User where age<15";
有条件更新  String hql = "update User set username='tom' where id=2";
       public void updateSome(){
                Session session = new HibernateSessionFactory().getSession();
                String hql = "update User set username='tom' where id=2";
                Query query = session.createQuery(hql); 
                Transaction tr = session.beginTransaction();
                query.executeUpdate();
                tr.commit();
                session.close();
        }
#参数绑定
顺序占位符:用?来代表参数,用query.setXxx(0, ??); 给参数赋值,参数的序号从0开始
String hql = "update User set username=? where id=?";
引用占位符:用“:占位字符串”实现
 String hql = "from User where username=:username and password =:password";
 

数据仓库基本理论

数据仓库的定义 英文名称为Data Warehouse,可简写为DW或DWH。

为企业级别的决策制定过程,提供所有类型数据支持的战略集合。

它出于分析性报告和决策支持目的而创建,为需要业务智能的企业,提供指导业务流程改进、监视时间、成本、质量以及控制。

数据仓库的意义 根据以往的数据进行分析,优化流程和确定决策

数据仓库的特点 面向对象的、集成的、不可更新的、随时间变化的

数据仓库和数据库的区别

数据库 OLTP用于存放数据的仓库;数据库软件用来实现数据库的逻辑功能

数据仓库 OLAP主要用于数据挖掘和数据分析,辅助领导做决策

在IT架构体系,需要一个放数据的地方,这个地方就是数据库

在BI方面,数据库的表设计往往是某个应用,但针对数据分析和挖掘较为困难;数据仓库的表结构是按照分析需求、分析维度、** 分析指标**进行设计的

hql、数据仓库、sql调优、hive sql、python,在这里插入图片描述,第1张

数据仓库分层ODS(临时存储层)、PDW(数据仓库层)、DM(数据集市层)、APP(应用层)

hql、数据仓库、sql调优、hive sql、python,在这里插入图片描述,第2张

hql、数据仓库、sql调优、hive sql、python,在这里插入图片描述,第3张

SQL性能调优

sql执行流程

1、客户端请求到服务端,服务端通过数据库连接池,用JDBC连接数据库驱动。

2、数据库端的连接池接收到服务端的连接,然后把服务端对数据库的请求交给数据库的线程。

3、通过数据库获取SQL接口,获取到连接中的SQL语句。

4、然后是通过数据库解析器对SQL进行解析(解析成数据库认识的语言)。

5、然后通过SQL查询优化器获得最优执行SQL。

6、最终把最优SQL交给数据库执行器。

7、执行器选择当前数据库的存储引擎(图例采用InnoDB为例)。

8、然后先去数据库的BufferPool(缓存)中查询,这里如果命中了缓存则直接返回结果。

9、如果没有在缓存中命中结果,那么会去硬盘中读取数据,然后返回结果集并缓存起来,以便下次取用。

数据库使用规范

1、表命名必须小写字母且下划线分割单词;

2、表名称及字段名称不要用数据库的关键字;

3、数据库表命名不超过32个字符;

4、遵循数据库三范式;

5、合理的反三范式使用(比如合理的冗余字段再一张表)

sql调优技巧

1.合理使用索引

(B树索引常用于有序数据的访问,而哈希索引则常用于无序数据的访问。在使用索引时,需要根据实际情况选择合适的索引类型,避免使用不必要的索引。同时,建议为频繁访问的列创建索引,以提升查询效率。)

2.避免全表扫描

(优化SQL查询语句,使用索引和优化器来提升查询效率。在使用索引时,需要保证索引列和查询列保持一致,避免类型不匹配造成查询失败)

3.优化SQL查询语句

(尽可能避免子查询和视图的使用;注意优化日期和时间戳的格式;避免使用SELECT * 查询、避免SELECT DISTINCT 语句)

4.处理大量数据时,需要合理使用查询优化器,避免重复查询和不必要的排序操作

5.削减不必要的数据传输,需要避免传输不必要的数据列、避免重复查询和避免使用JOIN查询等

Kettle、Sqoop等ETL工具

kettle 水壶

hql、数据仓库、sql调优、hive sql、python,在这里插入图片描述,第4张

hql、数据仓库、sql调优、hive sql、python,在这里插入图片描述,第5张

sqoop

hql、数据仓库、sql调优、hive sql、python,在这里插入图片描述,第6张

hive sql

Hive SQL是一种基于Hadoop的数据仓库工具

它允许用户使用类似于SQL的语法来查询和分析存储在Hadoop集群中的数据

1. 数据定义语言(DDL):
   - 创建数据库:`CREATE DATABASE database_name;`
   - 删除数据库:`DROP DATABASE database_name;`
   - 显示所有数据库:`SHOW DATABASES;`
   - 使用数据库:`USE database_name;`
   - 创建表:`CREATE TABLE table_name (column1 data_type, column2 data_type, ...);`
   - 删除表:`DROP TABLE table_name;`
   - 显示所有表:`SHOW TABLES;`
   - 修改表结构:`ALTER TABLE table_name ADD/ALTER/DROP COLUMN column_name data_type;`
2. 数据操作语言(DML):
   - 插入数据:`INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);`
   - 查询数据:`SELECT column1, column2, ... FROM table_name WHERE condition;`
   - 更新数据:`UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;`
   - 删除数据:`DELETE FROM table_name WHERE condition;`
3. 数据查询语言(DQL):
   - 聚合函数:`COUNT(), SUM(), AVG(), MIN(), MAX()`
   - 分组:`GROUP BY column1, column2, ... HAVING condition;`
   - 排序:`ORDER BY column1 ASC/DESC, column2 ASC/DESC, ...;`
   - 分页:`LIMIT start, count;`
   - 连接查询:`JOIN table1 ON table1.column = table2.column;`
   - 子查询:`SELECT * FROM table_name WHERE column IN (SELECT column FROM another_table);`
4. 数据控制语言(DCL):
   - 授权:`GRANT permissions ON database_name.table_name TO user_name;`
   - 撤销权限:`REVOKE permissions ON database_name.table_name FROM user_name;`
   - 创建用户:`CREATE USER user_name IDENTIFIED BY password;`
   - 删除用户:`DROP USER user_name;`
5. 其他常用语句:
   - 查看表结构:`DESCRIBE table_name;`
   - 查看表详情:`DESCRIBE FORMATTED table_name;`
   - 查看表分区:`SHOW PARTITIONS table_name;`
   - 查看表统计信息:`ANALYZE table_name;`
   - 查看表数据文件位置:`MSCK REPAIR table_name;`

hive sql和SQL的区别

1.hive不支持等值连接,一般使用left join、right join 或者inner join替代。
2、分号字符
分号是sql语句的结束符号,在hive中也是,但是hive对分号的识别没有那么智能,有时需要进行转义 “;” --> “\073”
3、NULL
sql中null代表空值,但是在Hive中,String类型的字段若是空(empty)字符串,即长度为0,那么对它 is null 判断结果为False
4、Hive不支持将数据插入现有的表或分区中
Hive仅支持覆盖重写整个表。
insert overwrite 表 (重写覆盖)
5、Hive不支持 Insert into 表 Values(), UPDATA , DELETE 操作
insert into 就是往表或者分区中追加数据。
6、Hive支持嵌入mapreduce程序,来处理复杂的逻辑
7、Hive支持将转换后的数据直接写入不同的表,还能写入分区,hdfs和本地目录
需避免多次扫描输入表的开销。
8、HQL不支持行级别的增、改、删,所有数据在加载时就已经确定,不可更改。

python

基础语法 http://t.csdnimg.cn/2xalS

Python的六大数据类型如下所示:    
(1)数字(Numbers):int(整型),long(长整型),complex(复数),float(浮点型),bool(布尔型);    
(2)字符串(String):"Python",'Python';    
(3)列表(List):[1,2,3,4],[5,6,7,[8,9],10];    
(4)字典(Dictionary):{1:"study",2:"Python"};    
(5)元组(Tuple):(1, "shuai",2);    
(6)集合(Set):{'P', 'y', 't', 'h', 'o', 'n'}
不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组)
可变数据(3 个)  :List(列表)、Dictionary(字典)、Set(集合)
列表支持字符,数字,字符串甚至可以包含列表(也就是嵌套)
元组用"()"标识。内部元素用逗号隔开。但是元素不能二次赋值,相当于只读列表。
字典用"{ }"标识。字典由索引 (key) 和它对应的值 value 组成,
字典 (dictionary) 是除列表以外 Python 之中最灵活的内置数据结构类型。
列表是有序的对象集合,字典是无序的对象集合。
两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。
注释
#这是单行注释
"""
这是多行注释
这是多行注释
"""
'''
也可以用三个单引号来进行多行注释
也可以用三个单引号来进行多行注释
'''
分块 python的函数不需要{} 用缩进表示
Python 使用缩进来表示代码块。缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数。
python可以用type函数来检查一个变量的类型:
type(name))
input()函数作为输出流,print()函数作为输入流

网友评论

搜索
最新文章
热门文章
热门标签