IT评测·应用市场-qidao123.com

标题: Hive详细讲解-底子语法快速入门 [打印本页]

作者: 曹旭辉    时间: 2025-3-16 13:01
标题: Hive详细讲解-底子语法快速入门
1.DDL数据库相关操作


1.1创建数据库

  1. CREATE DATABASE [IF NOT EXISTS] database_name
  2. [COMMENT database_comment]
  3. [LOCATION hdfs_path]
  4. [WITH DBPROPERTIES (property_name=property_value, ...)];
复制代码


注:若不指定路径,其默认路径为${hive.metastore.warehouse.dir}/database_name.db

1.2指定路径下创建数据库


1.3添加额外信息创建with dbproperties

  1. create database db_hive2
  2. with dbproperties ('name'='junchao');
复制代码
1.4查看数据库 结合like模糊查询

like查询可以使用通配符
*表示匹配任意个字符
|表示或的关系

2.查看某一个数据库的相关信息

2.1.如何查看数据库信息,extended可选


desc和describe结果相同
只有extended加入之后数据库才会展示parameters

2.2修改数据库



3.Hive基本数据类型



4.复杂数据类型



5.类型转换


5.1类型隐士转换





5.2类型显式转换




6.建表逻辑*



   指定hive的分区字段
  分区指的是hive一张表的数据按照你指定的分区字段将数据存储到不同的字段中。
  
   只当分桶表
  将hive一张表的数据分散的存储到多个文件中。
  Hive的读流程:


Hive的写流程:



   hive中任意一张表的建表语句都需要inputformat、outputformat、serializer
  


  1. ROW FORAMT DELIMITED
  2. [FIELDS TERMINATED BY char]
  3. [COLLECTION ITEMS TERMINATED BY char]
  4. [MAP KEYS TERMINATED BY char]
  5. [LINES TERMINATED BY char]
  6. [NULL DEFINED AS char]
复制代码


null值的存储格式;
配置null defined as ;默认值是\N

与上述delimited序列化方式不同,serde可以指定特定的序列化方式如json格式。也可以自界说序列化格式。
  1. row format serde serdename
复制代码

   当前章节仅了解即可, 后续详细讲解stored as等
  7.CTAS建表


  1. CREATE [TEMPORARY] TABLE [IF NOT EXISTS] table_name
  2. [COMMENT table_comment]
  3. [ROW FORMAT row_format]
  4. [STORED AS file_format]
  5. [LOCATION hdfs_path]
  6. [TBLPROPERTIES (property_name=property_value, ...)]
  7. [AS select_statement]
复制代码
  此处create 后面关键字仅有temporary
  先前的可以指定external外部表等这是CTAS限定;
  8.create table like建表


  1. CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name
  2. [LIKE exist_table_name]
  3. [ROW FORMAT row_format]
  4. [STORED AS file_format]
  5. [LOCATION hdfs_path]
  6. [TBLPROPERTIES (property_name=property_value, ...)]
复制代码
9.创建表应用案例







   这个表创建时没有声明外部表,external
  那么默认表示是内部表
  






   仍然存在
  



   
  1. struct<name:string>
复制代码

  1. row format serde 'org.apache.hadoop.hive.serde2.JsonSerDe'
复制代码

  








10.查看表语法

1.展示所有表

2.查看某一个表的详细信息




3.表的重定名 rename to

4.修改表的列信息

   请你注意:
  
  





   替换列指的是将所有字段重新赋值,也就是所有column进行重新替换。
  

   经验小结:
  所有sql语句后面table 后面大多跟表明,可能和语法有关
  上述修改表字段类型时,参考隐式转换,string式不能直接转int
  

    如果非要string转int,可以使用hive提供的强转
  1. set hive.metastore.disallow.incompatible.col.type.changes=false;
复制代码

   

  11.DML


1.Load



   local指的是当前客户端向hdfs上 传文件
  命令行客户端那么表示命令行当前节点
  hiveserver2表示hiverserver2所在节点
  

可以多次into操作,表示追加

将hdfs路径下数据load

overwrite方式load数据

   load从客户端load 文件时copy方式
  hdfs load,是hdfs文件移动方式
  2.Insert




   into可以替换为overwrite
  与load不同
  load若进行覆盖写,那么直接overwrite into 或into
  而insert 要么into 要么overwrite
  

   此处注意的点是:values后面一个括号表示 要插入的一行数据
  
   此处必须用overwrite而不能用into
  

   local表示当地否则是hdfs路径
  row format声明行格式或声明每一行序列化反序列化
  stored as声明文件格式
  3.export

4.import


   我的临时实现不了,先暂定
  12.Hive查询语句



   
  

12.1关系运算函数




   
  


12.2聚合函数*





   
  COUNT(*) 会对所有列进行查抄(即使不会读取实际列值),以确保行的存在性。
  COUNT(1) 只会查抄一列的存在性或用虚拟列来替换。
  性能上count(1)略微高效
  
  





   
  12.3 group by



   固然你直接将job进行分组后还是要统计行数的
  因此需要和count(*)一起使用。
  


   老师精讲:分组聚合做的第一部将group by应用到用户指定的字段例如job,然后使用你指定的聚合函数对每一组进行统计等。
  

   细节:
  hive语法规定,你使用了分组聚合那么就不能在select查询分组以外的数据了
  

   
  

   having专门对group by进行过滤。
  13.Join语句




   直接在join完成的虚拟表进行分组聚合操作即可
  


   等值毗连,非等值毗连(非等值毗连不常用 )
    DG快捷键,格式化当前sql代码;
  ctrl shift enter
  


   内毗连
  外毗连
  左外,右外毗连,端外毗连,多表毗连,笛卡尔毗连,联合
  
   1.默认情况下单写一个join表示内毗连。
    2.只有进行毗连的两个表中都存在与毗连条件相匹配的数据才会被保存下来。
  1. select
  2.     e.empno,
  3.     e.ename,
  4.     d.deptno
  5. from emp e
  6. join dept d
  7. on e.deptno = d.deptno;
复制代码

内毗连实现的结果就是二者毗连条件的公共字段被返回

  1. select
  2.     e.empno,
  3.     e.ename,
  4.     d.deptno
  5. from emp e
  6. left join dept d
  7. on e.deptno = d.deptno;
复制代码
  左外毗连
  
  


   返回的行是右表的所有行,列是所有列
  注意:若单join默认就是内毗连,left join,right join,full join默认就是外毗连


返回所有行所有列,没匹配上返回null




14.Union







15.Order by排序


  1. -- 15.按照工资升序排序
  2. select * from emp
  3. order by sal;
复制代码

  1. -- 15.按照工资升序排序
  2. select * from emp
  3. order by sal desc;
复制代码



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4