Apache Hive学习教程
什么是Hive?
- Apache Hive是一款建立在Hadoop之上的开源数据仓库系统,可以将存储在Hadoop文件中的结构化、半结构化 数据文件映射为一张数据库表,基于表提供了一种类似SQL的查询模型,称为Hive查询语言(HQL),用于访问和 分析存储在Hadoop文件中的大型数据集。
- Hive核心是将HQL转换为MapReduce程序,然后将程序提交到Hadoop群集执行。
- Hive由Facebook实现并开源。
为什么使用Hive?
- 使用Hadoop MapReduce直接处理数据所面临的问题,人员学习成本太高 需要掌握java语言,MapReduce实现复杂查询逻辑开发难度太大
- 使用Hive处理数据的好处:1)操作接口采用 类 SQL 语法 ,提供快速开发的能力( 简单、容易上手 )2)避免直接写MapReduce,减少开发人员的学习成本3)支持自定义函数,功能扩展很方便4)背靠Hadoop, 擅长存储分析海量数据集
Hive和Hadoop关系
- 从功能来说,数据仓库软件,至少需要具备下述两种能力:存储数据的能力、分析数据的能力
- Apache Hive作为一款大数据时代的数据仓库软件,当然也具备上述两种能力。只不过Hive并不是自己实现了上述两种能力,而是借助Hadoop。Hive 利用 HDFS 存储数据,利用 MapReduce 查询分析数据 。
- 这样突然发现Hive没啥用,不过是套壳Hadoop罢了。其实不然,Hive的最大的魅力在于 用户专注于编写HQL, Hive帮您转换成为MapReduce程序完成对数据的分析 。、
Apache Hive架构、组件
- 用户接口包括 CLI、JDBC/ODBC、WebGUI。其中,CLI(command line interface)为shell命令行;Hive中的Thrift服务器允许 外部客户端通过网络与Hive进行交互,类似于JDBC或ODBC协议。WebGUI是通过浏览器访问Hive。
- 元数据存储通常是存储在关系数据库如 mysql/derby中。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。
- Driver 驱动程序,包括语法解析器、计划编译器、优化器、执行器完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在 随后有执行引擎调用执行。
- 执行引擎Hive本身并不直接处理数据文件。而是通过执行引擎处理。当下Hive支持MapReduce、Tez、Spark3种执行引擎。
Apache Hive安装部署
Apache Hive元数据
1. Hive Metadata
- Hive Metadata即Hive的元数据。
- 包含用Hive创建的database、table、表的位置、类型、属性,字段顺序类型等元信息。
- 元数据存储在关系型数据库中。如hive内置的Derby、或者第三方如MySQL等。
2. Hive Metastore
- Metastore即元数据服务。Metastore服务的作用是管理metadata元数据,对外暴露服务地址,让各种客户端通 过连接metastore服务,由metastore再去连接MySQL数据库来存取元数据。
- 有了metastore服务,就可以有多个客户端同时连接,而且这些客户端不需要知道MySQL数据库的用户名和密码 ,只需要连接metastore 服务即可。某种程度上也保证了hive元数据的安全。
-
3. metastore配置方式
- metastore服务配置有3种模式:内嵌模式、本地模式、远程模式。
- 区分3种配置方式的关键是弄清楚两个问题:1)Metastore服务是否需要单独配置、单独启动?2)Metadata是存储在内置的derby中,还是第三方RDBMS,比如MySQL。
4. metastore远程模式

Apache Hive部署实战
安装前准备
- 由于Apache Hive是一款基于Hadoop的数据仓库软件,通常部署运行在Linux系统之上。因此不管使用何种方式 配置Hive Metastore,必须要先保证服务器的基础环境正常,Hadoop集群健康可用。
- 服务器基础环境集群时间同步、防火墙关闭、主机Host映射、免密登录、JDK安装
- Hadoop 集群健康可用启动Hive之前必须先启动Hadoop集群。特别要注意,需 等待HDFS安全模式关闭之后再启动运行Hive 。Hive不是分布式安装运行的软件,其分布式的特性主要借由Hadoop完成。包括分布式存储、分布式计算。
Hadoop与Hive整合
- 因为Hive需要把数据存储在HDFS上,并且通过MapReduce作为执行引擎处理数据;
- 因此需要在Hadoop中添加相关配置属性,以满足Hive在Hadoop上运行。
- 修改Hadoop中core-site.xml,并且Hadoop集群同步配置文件,重启生效。
<!-- 整合 hive -->< property >< name >hadoop.proxyuser.root.hosts</ name >< value >*</ value ></ property >< property >< name >hadoop.proxyuser.root.groups</ name >< value >*</ value ></ property >
Hive3安装
Mysql安装
卸载Centos7自带的mariadb
[root@node3 ~]# rpm -qa|grep mariadb mariadb-libs-5.5.64-1.el7.x86_64 [root@node3 ~]# rpm -e mariadb-libs-5.5.64-1.el7.x86_64 --nodeps [root@node3 ~]# rpm -qa|grep mariadb [root@node3 ~]#安装mysql
mkdir /export/software/mysql #上传mysql-5.7.29-1.el7.x86_64.rpm-bundle.tar 到上述文件夹下 解压 tar xvf mysql-5.7.29-1.el7.x86_64.rpm-bundle.tar #执行安装 yum -y install libaio [root@node3 mysql]# rpm -ivh mysql-community-common-5.7.29-1.el7.x86_64.rpm mysql-community-libs-5.7.29-1.el7.x86_64.rpm mysql-community-client-5.7.29-1.el7.x86_64.rpm mysql-community-server-5.7.29-1.el7.x86_64.rpm warning: mysql-community-common-5.7.29-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY Preparing... ################################# [100%] Updating / installing...1:mysql-community-common-5.7.29-1.e################################# [ 25%]2:mysql-community-libs-5.7.29-1.el7################################# [ 50%]3:mysql-community-client-5.7.29-1.e################################# [ 75%]4:mysql-community-server-5.7.29-1.e################ ( 49%)mysql初始化设置
#初始化 mysqld --initialize #更改所属组 chown mysql:mysql /var/lib/mysql -R #启动mysql systemctl start mysqld.service #查看生成的临时root密码 cat /var/log/mysqld.log [Note] A temporary password is generated for root@localhost: o+TU+KDOm004修改root密码 授权远程访问 设置开机自启动
[root@node2 ~]# mysql -u root -p Enter password: #这里输入在日志中生成的临时密码 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.7.29 Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> #更新root密码 设置为hadoop mysql> alter user user() identified by "root"; Query OK, 0 rows affected (0.00 sec) #授权 mysql> use mysql; mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION; mysql> FLUSH PRIVILEGES; #mysql的启动和关闭 状态查看 (这几个命令必须记住) systemctl stop mysqld systemctl status mysqld systemctl start mysqld #建议设置为开机自启动服务 [root@node2 ~]# systemctl enable mysqld Created symlink from /etc/systemd/system/multi-user.target.wants/mysqld.service to /usr/lib/systemd/system/mysqld.service. #查看是否已经设置自启动成功 [root@node2 ~]# systemctl list-unit-files | grep mysqld mysqld.service enabledCentos7 干净卸载mysql 5.7
#关闭mysql服务 systemctl stop mysqld.service #查找安装mysql的rpm包 [root@node3 ~]# rpm -qa | grep -i mysql mysql-community-libs-5.7.29-1.el7.x86_64 mysql-community-common-5.7.29-1.el7.x86_64 mysql-community-client-5.7.29-1.el7.x86_64 mysql-community-server-5.7.29-1.el7.x86_64 #卸载 [root@node3 ~]# yum remove mysql-community-libs-5.7.29-1.el7.x86_64 mysql-community-common-5.7.29-1.el7.x86_64 mysql-community-client-5.7.29-1.el7.x86_64 mysql-community-server-5.7.29-1.el7.x86_64 #查看是否卸载干净 rpm -qa | grep -i mysql #查找mysql相关目录 删除 [root@node1 ~]# find / -name mysql /var/lib/mysql /var/lib/mysql/mysql /usr/share/mysql [root@node1 ~]# rm -rf /var/lib/mysql [root@node1 ~]# rm -rf /var/lib/mysql/mysql [root@node1 ~]# rm -rf /usr/share/mysql #删除默认配置 日志 rm -rf /etc/my.cnf rm -rf /var/log/mysqld.log
Hive的安装
上传安装包 解压
tar zxvf apache-hive-3.1.2-bin.tar.gz解决Hive与Hadoop之间guava版本差异
cd /export/server/apache-hive-3.1.2-bin/ rm -rf lib/guava-19.0.jar cp /export/server/hadoop-3.3.0/share/hadoop/common/lib/guava-27.0-jre.jar ./lib/修改配置文件
hive-env.sh
cd /export/server/apache-hive-3.1.2-bin/conf mv hive-env.sh.template hive-env.sh vim hive-env.sh export HADOOP_HOME=/export/server/hadoop-3.3.0 export HIVE_CONF_DIR=/export/server/apache-hive-3.1.2-bin/conf export HIVE_AUX_JARS_PATH=/export/server/apache-hive-3.1.2-bin/libhive-site.xml
vim hive-site.xml<configuration> <!-- 存储元数据mysql相关配置 --> <property><name>javax.jdo.option.ConnectionURL</name><value>jdbc:mysql://node1:3306/hive3?createDatabaseIfNotExist=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8</value> </property> <property><name>javax.jdo.option.ConnectionDriverName</name><value>com.mysql.jdbc.Driver</value> </property> <property><name>javax.jdo.option.ConnectionUserName</name><value>root</value> </property> <property><name>javax.jdo.option.ConnectionPassword</name><value>root</value> </property> <!-- H2S运行绑定host --> <property><name>hive.server2.thrift.bind.host</name><value>node1</value> </property> <!-- 远程模式部署metastore metastore地址 --> <property><name>hive.metastore.uris</name><value>thrift://node1:9083</value> </property> <!-- 关闭元数据存储授权 --> <property><name>hive.metastore.event.db.notification.api.auth</name><value>false</value> </property> </configuration> 上传mysql jdbc驱动到hive安装包lib下
mysql-connector-java-5.1.32.jar初始化元数据
cd /export/server/apache-hive-3.1.2-bin/ bin/schematool -initSchema -dbType mysql -verbos #初始化成功会在mysql中创建74张表在hdfs创建hive存储目录(如存在则不用操作)
hadoop fs -mkdir /tmp hadoop fs -mkdir -p /user/hive/warehouse hadoop fs -chmod g+w /tmp hadoop fs -chmod g+w /user/hive/warehouse==启动hive==
1、启动metastore服务
#前台启动 关闭ctrl+c /export/server/apache-hive-3.1.2-bin/bin/hive --service metastore #前台启动开启debug日志 /export/server/apache-hive-3.1.2-bin/bin/hive --service metastore --hiveconf hive.root.logger=DEBUG,console #后台启动 进程挂起 关闭使用jps+ kill -9 nohup /export/server/apache-hive-3.1.2-bin/bin/hive --service metastore &2、启动hiveserver2服务
nohup /export/server/apache-hive-3.1.2-bin/bin/hive --service hiveserver2 & #注意 启动hiveserver2需要一定的时间 不要启动之后立即beeline连接 可能连接不上3、beeline客户端连接
/export/server/apache-hive-3.1.2-bin/bin/beeline
beeline> ! connect jdbc:hive2://node1:10000
beeline> root
beeline> 直接回车
Apache Hive客户端使用
使用任何一种工具连接即可
HQL语法
1. 建库、删库语句
- 在Hive中,默认的数据库叫做default,存储数据位置位于HDFS的/user/hive/warehouse下。
- 用户自己创建的数据库存储位置是/user/hive/warehouse/database_name.db下。
-- 建库语句CREATE ( DATABASE | SCHEMA ) [ IF NOT EXISTS ] database_name[ COMMENT database_comment][ LOCATION hdfs_path][ WITH DBPROPERTIES ( property_name =property_value, ...)];-------------------------------------------------------------------------------------------COMMENT:数据库的注释说明语句LOCATION:指定数据库在HDFS存储位置,默认/user/hive/warehouse/dbname.dbWITH DBPROPERTIES:用于指定一些数据库的属性配置。-- 删库DROP ( DATABASE | SCHEMA ) [ IF EXISTS ] database_name [ RESTRICT | CASCADE ];-------------------------------------------------------------------------------------------默认行为是RESTRICT,这意味着仅在数据库为空时才删除它。要删除带有表的数据库(不为空的数据库),我们可以使用CASCADE 。
2. 建表语句
CREATE TABLE [IF NOT EXISTS] [db_name.] table_name(col_name data_type [COMMENT col_comment], ... )[COMMENT table_comment][ ROW FORMAT DELIMITED … ];-----------------------------------------------------蓝色字体 是建表语法的关键字,用于指定某些功能。[ ] 中括号的语法表示可选。建表语句中的语法顺序要和语法树中顺序保持一致 。最低限度必须包括的语法为: CREATE TABLE table_name (col_name data_type);
1)数据类型
- Hive数据类型指的是表中列的字段类型;
- 整体分为两类:原生数据类型(primitive data type)和复杂数据类型(complex data type)。
- 最常用的数据类型是字符串String和数字类型Int。
2)指定分隔符
- ROW FORMAT DELIMITED语法用于指定字段之间等相关的分隔符,这样Hive才能正确的读取解析数据。
- 或者说只有分隔符指定正确,解析数据成功,我们才能在表中看到数据。
- LazySimpleSerDe是Hive默认的,包含4种子语法,分别用于 指定字段之间 、集合元素之间、map映射 kv之间、 换行的分隔符号 。
- 在建表的时候可以根据数据的特点灵活搭配使用。
- Hive建表时如果没有row format语法指定分隔符,则采用默认分隔符;
- 默认的分割符是'\001',是一种特殊的字符,使用的是ASCII编码的值,键盘是打不出来的。
- 在vim编辑器中,连续按下Ctrl+v/Ctrl+a即可输入'\001' ,显示^A
- 在一些文本编辑器中将以SOH的形式显示:
3)txt文件跟表数据的映射
- 建表成功之后,在Hive的默认存储路径下就生成了表对应的文件夹;
- 把表数据文件上传到对应的表文件夹下,使用sql查询语句就可以查出来了。
3. show语法
--1 、显示所有数据库 SCHEMAS 和 DATABASES 的用法 功能一样show databases;show schemas;--2 、显示当前数据库所有表show tables;SHOW TABLES [ IN database_name] ; -- 指定某个数据库--3 、查询显示一张表的元数据信息desc formatted t_team_ace_player ;
4. DML语法
1)load加载数据
LOAD DATA [ LOCAL ] INPATH 'filepath' [ OVERWRITE ] INTO TABLE tablename;-------------------------------------------------------------------------语法规则之 filepathfilepath 表示 待移动数据的路径 。可以指向文件(在这种情况下,Hive将文件移动到表中),也可以指向目录(在 这种情况下,Hive将把该目录中的所有文件移动到表中)。filepath文件路径支持下面三种形式,要结合LOCAL关键字一起考虑:1. 相对路径,例如:project/data12. 绝对路径,例如:/user/hive/project/data13. 具有schema的完整URI ,例如:hdfs://namenode:9000/user/hive/project/data1语法规则之 LOCAL指定 LOCAL , 将在本地文件系统中查找文件路径并复制。1. 若指定相对路径,将相对于用户的当前工作目录进行解释;2. 用户也可以为本地文件指定完整的URI-例如: file:///user/hive/project/data1 。没有指定 LOCAL 关键字。1. 如果filepath指向的是一个完整的URI,会直接使用这个URI;2. 如果没有指定schema,Hive会使用在hadoop配置文件中参数fs.default.name指定的(不出意外,都是HDFS,且是移动)注意: 如果对HiveServer2服务运行此命令, 本地文件系统 指的是 Hiveserver2服务所在机器的本地Linux文件系统 ,不是Hive客户端所在的本地文件系统。
2)insert插入数据
使用标准的insert语句插入数据超级慢,推荐使用load加载数据。也可以使用insert语法把数据插入到指定的表中,最常用的配合是把查询返回的结果插入到另一张表中。
INSERT INTO TABLE tablename select_statement1 FROM from_statement;------------------------------------------------------------------------------------------------step1: 创建一张源表 studentdrop table if exists student ;create table student ( num int , name string , sex string , age int , dept string )row format delimitedfields terminated by ',' ;-- 加载数据load data local inpath '/root/hivedata/students.txt' into table student ;--step2 :创建一张目标表 只有两个字段create table student_from_insert ( sno int , sname string );-- 使用 insert+select 插入数据到新表中insert into table student_from_insert select num , name from student ;select *from student_insert1 ;
3)常规语法
ALL 、DISTINCT
-- 返回所有匹配的行select state from t_usa_covid19 ;-- 相当于select all state from t_usa_covid19 ;-- 返回所有匹配的行 去除重复的结果select distinct state from t_usa_covid19 ;-- 多个字段 distinct 整体去重select distinct county , state from t_usa_covid19 ;WHERE在WHERE表达式中,可以使用Hive支持的任何函数和运算符,但聚合函数除外。聚合操作-- 统计美国总共有多少个县 countyselect count ( county ) from t_usa_covid19 ;-- 统计美国加州有多少个县select count ( county ) from t_usa_covid19 where state = "California" ;-- 统计德州总死亡病例数select sum ( deaths ) from t_usa_covid19 where state = "Texas" ;-- 统计出美国最高确诊病例数是哪个县select max ( cases ) from t_usa_covid19 ;
GROUP BY-- 根据 state 州进行分组 统计每个州有多少个县 countyselect count ( county ) from t_usa_covid19 where count_date = "2021-01-28" group by state ;-- 想看一下统计的结果是属于哪一个州的select state , count ( county ) from t_usa_covid19 where count_date = "2021-01-28" group by state ;-- 再想看一下每个县的死亡病例数,我们猜想很简单呀把 deaths 字段加上返回真实情况如何呢?select state , count ( county ) , deaths from t_usa_covid19 where count_date = "2021-01-28" group by state ;-- 很尴尬 sql 报错了 org.apache.hadoop.hive.ql.parse.SemanticException:Line 1:27 Expression not in GROUP BY key 'deaths'-- 为什么会报错?? group by 的语法限制-- 结论:出现在 GROUP BY 中 select_expr 的字段:要么是 GROUP BY 分组的字段;要么是被聚合函数应用的字段。--deaths 不是分组字段 报错--state 是分组字段 可以直接出现在 select_expr 中-- 被聚合函数应用select state , count ( county ) , sum ( deaths ) from t_usa_covid19 where count_date = "2021-01-28" group by state ;HAVING在SQL中增加HAVING子句原因是,WHERE关键字无法与聚合函数一起使用。HAVING子句可以让我们筛选分组后的各组数据,并且可以在Having中使用聚合函数,因为此时where,group by 已经执行结束,结果集已经确定 。--6 、 having-- 统计 2021-01-28 死亡病例数大于 10000 的州select state , sum ( deaths ) from t_usa_covid19 where count_date = "2021-01-28" and sum ( deaths ) > 10000 group by state ;--where 语句中不能使用聚合函数 语法报错-- 先 where 分组前过滤,再进行 group by 分组, 分组后每个分组结果集确定 再使用 having 过滤select state , sum ( deaths ) from t_usa_covid19 where count_date = "2021-01-28" group by state having sum ( deaths ) > 10000 ;-- 这样写更好 即在 group by 的时候聚合函数已经作用得出结果 having 直接引用结果过滤 不需要再单独计算一次了select state , sum ( deaths ) as cnts from t_usa_covid19 where count_date = "2021-01-28" group by state having cnts> 10000 ;HAVING 与 WHERE 区别
- having是在分组后对数据进行过滤
- where是在分组前对数据进行过滤
- having后面可以使用聚合函数
- where后面不可以使用聚合函数
ORDER BY-- 根据确诊病例数升序排序 查询返回结果select * from t_usa_covid19 order by cases ;-- 不写排序规则 默认就是 asc 升序select * from t_usa_covid19 order by cases asc;-- 根据死亡病例数倒序排序 查询返回加州每个县的结果select * from t_usa_covid19 where state = "California" order by cases desc;LIMIT-- 没有限制返回 2021.1.28 加州的所有记录select * from t_usa_covid19 where count_date = "2021-01-28" and state = "California" ;-- 返回结果集的前 5 条select * from t_usa_covid19 where count_date = "2021-01-28" and state = "California" limit 5 ;-- 返回结果集从第 1 行开始 共 3 行select * from t_usa_covid19 where count_date = "2021-01-28" and state = "California" limit 2 , 3 ;-- 注意 第一个参数偏移量是从 0 开始的执行顺序在查询过程中执行顺序: from > where > group (含聚合) > having >order > select ;1. 聚合语句(sum,min,max,avg,count)要比having子句优先执行2. where子句在查询过程中执行优先级别优先于聚合语句(sum,min,max,avg,count)结合下面SQL:-- 执行顺序select state , sum ( deaths ) as cnts from t_usa_covid19where count_date = "2021-01-28"group by statehaving cnts> 10000limit 2 ;
4)JOIN关联查询
inner join内连接
--1 、 inner joinselect e. id , e. name , e_a. city , e_a. streetfrom employee e inner join employee_address e_aon e. id =e_a. id ;-- 等价于 inner join=joinselect e. id , e. name , e_a. city , e_a. streetfrom employee e join employee_address e_aon e. id =e_a. id ;-- 等价于 隐式连接表示法select e. id , e. name , e_a. city , e_a. streetfrom employee e , employee_address e_awhere e. id =e_a. id ;![]()
- left join中文叫做是左外连接(Left Outer Join)或者左连接,其中outer可以省略,left outer join是早期的写法。
- eft join的核心就在于left左。左指的是join关键字左边的表,简称左表。
- 通俗解释:join时以左表的全部数据为准,右边与之关联;左表数据全部返回,右表关联上的显示返回,关联不上 的显示null返回。
--2 、 left joinselect e. id , e. name , e_conn. phno , e_conn. emailfrom employee e left join employee_connection e_connon e. id =e_conn. id ;-- 等价于 left outer joinselect e. id , e. name , e_conn. phno , e_conn. emailfrom employee e left outer join employee_connection e_connon e. id =e_conn. id ;![]()
5)Hive 函数概述及分类标准
概述
-------------------------------------------常用内置函数----------------------------------------------------------String Functions 字符串函数 ------------select length ( "itcast" ) ;select reverse ( "itcast" ) ;select concat ( "angela" , "baby" ) ;-- 带分隔符字符串连接函数: concat_ws(separator, [string | array(string)]+)select concat_ws ( '.' , 'www' , array ( 'itcast' , 'cn' )) ;-- 字符串截取函数: substr(str, pos[, len]) 或者 substring(str, pos[, len])select substr ( "angelababy" , - 2 ) ; --pos 是从 1 开始的索引,如果为负数则倒着数select substr ( "angelababy" , 2 , 2 ) ;-- 分割字符串函数 : split(str, regex)select split ( 'apache hive' , ' ' ) ;----------- Date Functions 日期函数 ------------------- 获取当前日期 : current_dateselect current_date () ;-- 获取当前 UNIX 时间戳函数 : unix_timestampselect unix_timestamp () ;-- 日期转 UNIX 时间戳函数 : unix_timestampselect unix_timestamp ( "2011-12-07 13:01:03" ) ;-- 指定格式日期转 UNIX 时间戳函数 : unix_timestampselect unix_timestamp ( '20111207 13:01:03' , 'yyyyMMdd HH:mm:ss' ) ;--UNIX 时间戳转日期函数 : from_unixtimeselect from_unixtime ( 1618238391 ) ;select from_unixtime ( 0 , 'yyyy-MM-dd HH:mm:ss' ) ;-- 日期比较函数 : datediff 日期格式要求 'yyyy-MM-dd HH:mm:ss' or 'yyyy-MM-dd'select datediff ( '2012-12-08' , '2012-05-09' ) ;-- 日期增加函数 : date_addselect date_add ( '2012-02-28' , 10 ) ;-- 日期减少函数 : date_subselect date_sub ( '2012-01-1' , 10 ) ;----Mathematical Functions 数学函数 --------------- 取整函数 : round 返回 double 类型的整数值部分 (遵循四舍五入)select round ( 3.1415926 ) ;-- 指定精度取整函数 : round(double a, int d) 返回指定精度 d 的 double 类型select round ( 3.1415926 , 4 ) ;-- 取随机数函数 : rand 每次执行都不一样 返回一个 0 到 1 范围内的随机数select rand () ;-- 指定种子取随机数函数 : rand(int seed) 得到一个稳定的随机数序列select rand ( 3 ) ;-----Conditional Functions 条件函数 -------------------- 使用之前课程创建好的 student 表数据select * from student limit 3 ;--if 条件判断 : if(boolean testCondition, T valueTrue, T valueFalseOrNull)select if ( 1 = 2 , 100 , 200 ) ;select if ( sex = ' 男 ' , 'M' , 'W' ) from student limit 3 ;-- 空值转换函数 : nvl(T value, T default_value)select nvl ( "allen" , "itcast" ) ;select nvl ( null, "itcast" ) ;-- 条件转换函数 : CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] ENDselect case 100 when 50 then 'tom' when 100 then 'mary' else 'tim' end;select case sex when ' 男 ' then 'male' else 'female' end from student limit 3 ;
案例:
相关文章:
Apache Hive学习教程
什么是Hive? Apache Hive是一款建立在Hadoop之上的开源数据仓库系统,可以将存储在Hadoop文件中的结构化、半结构化 数据文件映射为一张数据库表,基于表提供了一种类似SQL的查询模型,称为Hive查询语言(HQL)&…...
学习笔记六——Rust 切片全解析
这篇文章不是告诉你“切片是啥”,而是让你真正理解并学会用切片,同时还会把你最容易卡壳的 {:?}、char_indices() 等都讲清楚! 📚 文章目录 切片到底是什么?能不能通俗一点?切片的本质:它其实…...
Apache Doris SelectDB 技术能力全面解析
Apache Doris 是一款开源的 MPP 数据库,以其优异的分析性能著称,被各行各业广泛应用在实时数据分析、湖仓融合分析、日志与可观测性分析、湖仓构建等场景。Apache Doris 目前被 5000 多家中大型的企业深度应用在生产系统中,包含互联网、金融、…...
设计模式 Day 8:策略模式(Strategy Pattern)完整讲解与实战应用
🔄 前情回顾:Day 7 重点回顾 在 Day 7 中,我们彻底讲透了观察者模式: 它是典型的行为型模式,核心理念是“一变多知”,当一个对象状态变化时,自动通知所有订阅者。 我们通过 RxCpp 实现了工业…...
HarmonyOS-ArkUI V2装饰器-@Once
前文,关于Param的使用: HarmonyOS-ArkUIV2装饰器-Param:组件外部输入-CSDN博客 Once装饰器是一个需要配合Param装饰器一块使用的的装饰器。它的特性是,仅仅在变量进行初始化的时候,接受一个外部传来的值进行初始化&am…...
前端Node.js的包管理工具npm指令
npm(Node Package Manager)是Node.js的包管理工具,主要用于安装、更新、删除和管理JavaScript包。以下是前端开发中常用的npm命令及其用途: 基本命令 npm提供了一系列命令行工具,用于执行各种包管理操作。以下是一…...
本地搭建直播录屏应用并实现使用浏览器远程控制直播间录屏详细教程
 本文主要介绍如何在 Windows 系统电脑本地部署直播录屏工具 Bililive-go,并结合 cpolar 内网穿透工具实现远程访问本地 Bililive-go 服务 web 界面管理录屏任务。 相信很多小伙伴都喜欢看直播,不过如果一旦临时有事看不了直播,…...
Hydra Columnar:一个开源的PostgreSQL列式存储引擎
Hydra Columnar 是一个 PostgreSQL 列式存储插件,专为分析型(OLAP)工作负载设计,旨在提升大规模分析查询和批量更新的效率。 Hydra Columnar 以扩展插件的方式提供,主要特点包括: 采用列式存储,…...
OpenGL学习笔记(assimp封装、深度测试、模板测试)
目录 模型加载Assimp网格模型及导入 深度测试深度值精度深度缓冲的可视化深度冲突 模板测试物体轮廓 GitHub主页:https://github.com/sdpyy1 OpenGL学习仓库:https://github.com/sdpyy1/CppLearn/tree/main/OpenGLtree/main/OpenGL):https://github.com/sdpyy1/CppL…...
自动化备份全网服务器数据平台
1.项目说明 1.1概述 该项目共分为2个子项目,由环境搭建和实施备份两部分组成 该项目旨在复习巩固系统服务部署使用、shell编程等知识,旨在让学生增加知识面,提高项目实习经历,充实简历 1.2项目组织方式及时间 时间:…...
Trea CN多多与主流AI编程工具万字解析
Trea CN多多与主流AI编程工具万字解析 (含数学建模、架构图、开发流程可视化) 一、数学建模:代码生成效率量化模型 1.1 全链路效率公式 T total N ⋅ ( 1 λ C S ) T check (1) T_{\text{total}} N \cdot \left( \frac{1}{\lambda} \…...
Django从零搭建卖家中心注册页面实战
在电商系统开发中,卖家中心是一个重要的组成部分,而用户注册与登陆则是卖家中心的第一步。本文将详细介绍如何使用Django框架从零开始搭建一个功能完善的卖家注册页面,包括前端界面设计和后端逻辑实现。 一、项目概述 我们将创建一个名为sel…...
如何进行预算考核
✅ 一、预算考核体系总体架构 模块内容说明考核内容1. 预算目标/指标完成情况2. 预算编制/执行情况双轮驱动,目标 + 执行双考核考核对象高层、中层、基层、后台支持分层分类考核考核周期月度(滚动)+ 季度(校验)+ 年度(决算)提高适应性和准确性考核工具指标体系、差错率评…...
django相关面试题
django相关面试题 1.django的生命周期 2.django中的orm查询如何自定义方法 3.django中的中间件的作用 4.django中间件,request进来经过哪些中间件,顺序是怎么样的 5.django中的csrf是什么 6.django每访问一次数据库都会创建一个连接吗 7.uwsgi gunicorn…...
【Java面试系列】Spring Cloud微服务架构中的分布式事务实现与性能优化详解 - 3-5年Java开发必备知识
【Java面试系列】Spring Cloud微服务架构中的分布式事务实现与性能优化详解 - 3-5年Java开发必备知识 引言 在微服务架构中,分布式事务是一个不可避免的挑战。随着业务复杂度的提升,如何保证跨服务的数据一致性成为面试中的高频问题。本文将从基础到进…...
PostgreSQL 17深度解析(从17.0-17.4)
PostgreSQL 17自2024年9月发布以来,持续通过小版本迭代增强功能、优化性能并修复安全漏洞。本文将从17.0到17.4的每个版本切入,深度解析其新增特性、技术原理、性能提升及实践价值,帮助开发者、DBA及架构师全面掌握PostgreSQL 17的演进脉络。 一、PostgreSQL 17.0:基石奠定…...
人物4_Japanese
Now, I start my JaPan【Tokyo】 life, 【I go out of my country{China}, the reason is I want learn more new computer technologies in foreign, also it could let me know more different culture.】I like the place and most persons in here. The JaPan culture have…...
Go 语言中的 package main、 func main() 和main.go的使用规范
本文旨在解释 Go 语言中 package main 、 func main() 和main.go的关系及其使用规则,解决如下典型问题: 是否可以在一个项目中定义多个 func main()?是否可以在非 package main 中写 func main()?多个文件中都写 func main() 会冲…...
mac 终端 code 命令打开 vscode,修改 cursor占用
rm /usr/local/bin/code vim ~/.zshrc # 定义 cursor 函数,用于打开 Cursor 应用 function cursor {open -a "/Applications/Cursor.app" "$" }# 定义 code 函数,用于打开 Visual Studio Code function code {open -a "/Appli…...
【常用功能】下载文件和复制到剪切板
前言 前端人员在开发时经常会遇到: 后端给一个地址,需要去下载的需求。将页面的内容复制到剪切板 下载文件 我们先说下载文件,通常情况下我们会自己写上一个非常简单的工具函数。 思路如下: 创建一个a元素设置a元素跳转的链接…...
【ESP32-microros(vscode-Platformio)】
一、步骤 1、目前支持ESP32 2、同一个局域网 3、上位机要安装代理(电脑或者linux设备) 4、可直接通过USB下载,也可以使用官方烧录工具,具体的分区表地址要从USB烧录的时候日志查看,一共四个文件,第三个…...
如何使用AI辅助开发CSS3 - 通义灵码功能全解析
一、引言 CSS3 作为最新的 CSS 标准,引入了众多新特性,如弹性布局、网格布局等,极大地丰富了网页样式的设计能力。然而,CSS3 的样式规则繁多,记忆所有规则对于开发者来说几乎是不可能的任务。在实际开发中,…...
OpenCV图像形态学详解
文章目录 一、什么是图像形态学?二、基本概念:结构元素三、基本形态学操作1. 腐蚀(Erosion)2. 膨胀(Dilation)3. 开运算(Opening)4. 闭运算(Closing) 四、高级…...
Java-servlet(完结篇)过滤器乱码解决与监听器
Java-servlet(完结篇)过滤器乱码解决与监听器 前言一、过滤器乱码解决二、监听器1. HttpSessionListener2. ServletContextListener3. ServletRequestListener 三、监听器的使用场景Java-servlet 结语 前言 在之前的 Java Servlet 学习中,我…...
【发布】dtns协议的js-sdk(实现a2a协议:agent2agent)
【发布】dtns协议的js-sdk(实现a2a协议:agent2agent) dtns协议简介 dtns协议是用于dtns.network分布式智体网络的通讯协议。主要目标是将各个独立的智体节点,通过dtns协议(dtns.network)连接在一起&#…...
深度学习总结(8)
模型工作流程 模型由许多层链接在一起组成,并将输入数据映射为预测值。随后,损失函数将这些预测值与目标值进行比较,得到一个损失值,用于衡量模型预测值与预期结果之间的匹配程度。优化器将利用这个损失值来更新模型权重。 下面是…...
[特殊字符] Hyperlane:为现代Web服务打造的高性能Rust文件上传解决方案
🚀 Hyperlane:为现代Web服务打造的高性能Rust文件上传解决方案 ▎开发者必备:为什么选择Hyperlane处理大文件上传? 在实时数据爆炸式增长的时代,开发者面临两大核心挑战: 如何实现TB级大文件的可靠传输如…...
英伟达开源253B语言模型:Llama-3.1-Nemotron-Ultra-253B-v1 模型情况
Llama-3.1-Nemotron-Ultra-253B-v1 模型情况 1. 模型概述 Llama-3.1-Nemotron-Ultra-253B-v1 是一个基于 Meta Llama-3.1-405B-Instruct 的大型语言模型 (LLM),专为推理、人类对话偏好和任务(如 RAG 和工具调用)而优化。该模型支持 128K 令…...
2025年智能合约玩法创新白皮书:九大核心模块与收益模型重构Web3经济范式
——从国库管理到动态激励的加密生态全栈解决方案 一、核心智能合约架构解析 1. 国库合约:生态财政中枢 作为协议的金库守卫者,国库合约通过多签冷钱包与跨链资产池实现资金沉淀。其创新点包括: 储备资产动态再平衡:采用预言机实…...
[250411] Meta 发布 Llama 4 系列 AI 模型 | Rust 1.86 引入重大语言特性
目录 Llama 4 家族登场:开启原生多模态 AI 创新新纪元Rust 1.86.0 版本发布亮点主要新特性与改进其他重要信息 Llama 4 家族登场:开启原生多模态 AI 创新新纪元 Meta AI 近日发布了其最新、最先进的 Llama 4 系列人工智能模型,标志着 AI 技术…...
缓存不只是加速器:深入理解 Redis 的底层机制
一、Redis 是什么?为什么我们需要它? Redis(Remote Dictionary Server)是一种高性能的内存型键值对数据库。 通俗地讲,它就像一个超快的、放在内存中的超级字典,你可以用它来存数据、查数据,而…...
windows虚拟内存
windows的虚拟内存只是 虚拟内存技术的一个拓展, 叫他分页文件更好, 真正的虚拟内存是 CPU 内存管理单元 用于调度物理内存和磁盘衍生出来的技术. 在此基础上, 虚拟内存会根据页表 去物理内存中找数据, 找不到就去磁盘找, 找到之后再登记到页表. 这里的磁盘就是window系统中所…...
Ajax------免刷新地前后端交互
本文略带PHP代码需要在PHP环境下使用 介绍 AJAX (Asynchronous JavaScript and XML) 是一种创建快速动态网页应用的开发技术,它允许网页在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页内容。例如,在我们做爬虫的时候发现有些…...
python办公自动化---pdf文件的读取、添加水印
需要安装包:pdfminer、pypdf2 一、读取pdf中的内容 from pdfminer.converter import TextConverter from pdfminer.layout import LAParams from pdfminer.pdfdocument import PDFDocument from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterprete…...
下一代数据架构全景:云原生实践、行业解法与 AI 底座 | Databend Meetup 成都站回顾
3 月底,Databend 2025 开年首场 Meetup 在成都多点公司成功举办!活动特别邀请到四位重量级嘉宾:多点科技数据库架构师王春涛、多点DMALL数据平台负责人李铭、Databend联合创始人吴炳锡,以及鹏城实验室王璞博士。在春日的蓉城&…...
Kubernetes容器编排与云原生实践
第一部分:Kubernetes基础架构与核心原理 第1章 容器技术的演进与Kubernetes的诞生 1.1 虚拟化技术的三次革命 物理机时代:资源浪费严重,利用率不足15% 虚拟机突破:VMware与Hyper-V实现硬件虚拟化,利用率提升至50% …...
vue项目使用html2canvas和jspdf将页面导出成PDF文件
一、需求: 页面上某一部分内容需要生成pdf并下载 二、技术方案: 使用html2canvas和jsPDF插件 三、js代码 // 页面导出为pdf格式 import html2Canvas from "html2canvas"; import jsPDF from "jspdf"; import { uploadImg } f…...
JAVA实现在H5页面中点击链接直接进入微信小程序
在普通的Html5页面中如何实现点击URL链接直接进入微信小程序,不需要扫描小程序二维码? 网上介绍的很多方法是在小程序后台设置Schema,不过我进入我的小程序后台在开发设置里面 没有找到设置小程序Schema的地方,我是通过调用API接口…...
深入剖析 Kafka 的零拷贝原理:从操作系统到 Java 实践
Kafka 作为一款高性能的分布式消息系统,其卓越的吞吐量和低延迟特性得益于多种优化技术,其中“零拷贝”(Zero-Copy)是核心之一。零拷贝通过减少用户态与内核态之间的数据拷贝,提升了 Kafka 在消息传输中的效率。本文将…...
深度学习:AI 大模型时代的智能引擎
当 Deepspeek 以逼真到难辨真假的语音合成和视频生成技术横空出世,瞬间引发了全球对 AI 伦理与技术边界的激烈讨论。从伪造名人演讲、制造虚假新闻,到影视行业的特效革新,这项技术以惊人的速度渗透进大众视野。但在 Deepspeek 强大功能的背后…...
【Flask开发】嘿马文学web完整flask项目第4篇:4.分类,4.分类【附代码文档】
教程总体简介:2. 目标 1.1产品与开发 1.2环境配置 1.3 运行方式 1.4目录说明 1.5数据库设计 2.用户认证 Json Web Token(JWT) 3.书架 4.1分类列表 5.搜索 5.3搜索-精准&高匹配&推荐 6.小说 6.4推荐-同类热门推荐 7.浏览记录 8.1配置-阅读偏好 8.配置 9.1项目…...
【MySQL】002.MySQL数据库基础
文章目录 数据库基础1.1 什么是数据库1.2 基本使用创建数据库创建数据表表中插入数据查询表中的数据 1.3 主流数据库1.4 服务器,数据库,表关系1.5 MySQL架构1.6 SQL分类1.7 存储引擎1.7.1 存储引擎1.7.2 查看存储引擎1.7.3 存储引擎对比 前言:…...
Python爬取视频的架构方案,Python视频爬取入门教程
文章目录 前言方案概述架构设计详细实现步骤1.环境准备2. 网页请求模块3. 网页解析模块4. 视频下载模块5. 异常处理与日志模块 代码示例:性能优化注意事项 前言 以下是一个全面的使用 Python 爬取视频的架构方案,包含方案概述、架构设计、详细实现步骤、…...
ERC-20 代币标准
文章目录 一、什么是 ERC-20?核心价值:互操作性简化开发生态基石 二、ERC-20 的六大核心功能基础功能授权与代理转账事件通知 三、ERC-20 代币的典型应用场景四、ERC-20 的技术优势与局限性优势:局限性: 五、ERC-20 代币的创建步骤…...
SpringBoot实战1
SpringBoot实战1 一、开发环境,环境搭建-----创建项目 通过传统的Maven工程进行创建SpringBoot项目 (1)导入SpringBoot项目开发所需要的依赖 一个父依赖:(工件ID为:spring-boot-starter-parent…...
GSO-YOLO:基于全局稳定性优化的建筑工地目标检测算法解析
论文地址:https://arxiv.org/pdf/2407.00906 1. 论文概述 《GSO-YOLO: Global Stability Optimization YOLO for Construction Site Detection》提出了一种针对建筑工地复杂场景优化的目标检测模型。通过融合全局优化模块(GOM)、稳定捕捉模块(SCM)和创新的AIoU损失函…...
解读json.loads函数参数
json.loads()函数是解码JSON字符串为Python对象的核心工具。本文将深入探讨json.loads()函数的各个参数。 一、基本功能与输入类型 1. 功能概述 json.loads(s, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=N…...
2025.04.10-拼多多春招笔试第一题
📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 01. 神奇公园的福娃占卜 问题描述 LYA在一个神奇的公园里发现了一条特殊的小径,小径上排列着一群可爱的福娃玩偶。这条小径有 n n...
【学习笔记】CPU 的“超线程”是什么?
1. 什么是超线程? 超线程(Hyper-Threading)是Intel的技术,让一个物理CPU核心模拟出两个逻辑核心。 效果:4核CPU在系统中显示为8线程。 本质:通过复用空闲的硬件单元(如ALU、FPU)&a…...
Docker Harbor
下载Harbor安装包 wget https://github.com/goharbor/harbor/releases/download/v2.5.0/harbor-offline-installer-v2.5.0.tgz 解压安装包 tar xvf harbor-offline-installer-v2.5.0.tgz cd harbor 配置harbor vi harbor.yml hostname: registry.example.com # Harbor …...