hive sql 总结

一、HQL:

  1. where 过滤筛选 (map 任务) select ,update ,delete ,insert into (在分组语句group by之前执行)

    select * from emp where sal >3000;

  2. limit 限制条件 (无mapreduce)

    select * from emp where sal > 3000 limit 10

  3. distinct (map + reduce任务)

    select distinct sal from emp;

  4. between and (map 任务)
    • select * from emp where sal between 2000 and 4000;
  5. is null & is not null
    • select * from emp where comm is not null;

二、 聚合函数

  1. count <>

    select count(1) from emp;

  2. avg

    select avg(sal) from emp;

  3. group by 分组

    select deptno avg(sal) from emp group by deptno;

  4. having 和where功能相同,设定条件
    (having在分组语句之后执行,where先执行然后having执行)

    select deptno ,avg(sal)  from emp group by deptno   having  avg(sal) > 3000;
    
  5. join 两表join join 是耗时的,消耗资源大
    5.1 左join left (位于 join 左边的表没有null值)

    5.2 右join right (join右边的表没有null值)

    5.3 全join full (join左右两边的值都)

    5.4 等值join (连接两张表共有的字段都显示出来,)

     create table dept (
    deptno int,
    dname string,
    loc string
    

    )
    row format delimited fields terminated by ‘\t’;
    load data local inpath ‘/opt/tools/dept.txt’ into table dept;

    dept 和 emp 两表join;

三、hive 中与 MR相关的设置

  1. reduce 相关

    In order to change the average load for a reducer (in bytes):
    set hive.exec.reducers.bytes.per.reducer=
    In order to limit the maximum number of reducers:
    set hive.exec.reducers.max=
    In order to set a constant number of reducers:
    set mapreduce.job.reduces=

四、排序

  1. order by –全局排序, 只能有一个reduce,生成一个文件,(map + reduce)

    insert local directory ‘/opt/emp.haha’ select * from emp order by sal;

    insert overwrite local directory ‘/opt/datas/’ select * from emp;

  2. sort by – 局部排序,不能保证所有数据都是有序 的,针对每个reduce的结果进行排序(reduce的一个排序阶段)

    set mapreduce.job.reduces=3;
    set mapreduce.job.reduce;
    
    insert overwrite local directory "/opt/datas"  row format delimited fields terminated by '\t' select sal,comm , deptno from emp group by deptno,sal,comm;
    
    insert overwrite local directory "/opt/datas"  row format delimited fields terminated by '\t' select sal, comm , deptno from emp sort by sal;
    
  3. distribute by –mapreduce的分区,按照指定的值进行分区,控制map的输出给哪个reduce。
    (sort by 是对分区后的数据进行排序)

    insert overwrite local directory '/opt/datas'  row format delimited fields terminated by  '\t' 
    select * from emp 
    distribute by  deptno 
    sort by  sal ;
    
  4. cluster by (distributed by 和 sort by的结合使用)

    insert overwrite local directory '/opt/datas'  row format delimited fields terminated by  '\t' 
    select * from emp 
    cluster by  sal; 
    

先用全局 order by 然后再使用其他sort by,会提高效率。

Hive SQL 是一种用于查询和管理数据仓库中数据的语言,它与传统的 SQL 类似,但在某些方面具有独特的特性和最佳实践。以下是一些常用的 Hive SQL 命令及其最佳实践。 ### 数据定义语言 (DDL) #### 创建表 创建表时,需要指定表名、列名及其数据类型,并可以选择存储格式和其他属性。 ```sql CREATE TABLE table_name ( column1_name column1_type, column2_name column2_type, ... ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE; ``` - `ROW FORMAT DELIMITED` 指定行的格式为分隔符格式。 - `FIELDS TERMINATED BY ','` 指定字段之间的分隔符。 - `STORED AS TEXTFILE` 指定存储格式为文本文件[^2]。 #### 删除表 删除表可以使用 `DROP TABLE` 命令。 ```sql DROP TABLE IF EXISTS table_name; ``` #### 修改表 修改表结构可以通过 `ALTER TABLE` 命令实现。 ```sql ALTER TABLE old_table_name RENAME TO new_table_name; ALTER TABLE table_name ADD COLUMNS (new_column_name new_column_type); ``` ### 数据操作语言 (DML) #### 插入数据 插入数据可以通过 `INSERT INTO` 或 `INSERT OVERWRITE` 命令实现。 ```sql INSERT INTO TABLE table_name VALUES (value1, value2, ...); INSERT OVERWRITE TABLE table_name SELECT * FROM another_table; ``` #### 查询数据 查询数据是 Hive 中最常用的操作之一。 ```sql SELECT column1, column2, ... FROM table_name WHERE condition; ``` ### 分区和桶 #### 创建分区表 分区表可以提高查询性能。 ```sql CREATE TABLE sales_data ( product_id INT, sale_amount DOUBLE ) PARTITIONED BY (dt STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE; ``` #### 添加分区 添加分区可以使用 `ALTER TABLE ... ADD PARTITION` 命令。 ```sql ALTER TABLE sales_data ADD PARTITION (dt='2023-01-01'); ``` #### 删除分区 删除分区可以使用 `ALTER TABLE ... DROP PARTITION` 命令。 ```sql ALTER TABLE sales_data DROP PARTITION (dt='2023-01-01'); ``` ### 文件合并 #### 合并小文件 合并小文件可以提高查询性能。 ```sql ALTER TABLE table_name CONCATENATE; ``` ### 性能优化 #### 使用 ORC 文件格式 ORC 文件格式提供了高效的压缩和编码技术。 ```sql CREATE TABLE orc_table ( id INT, name STRING ) STORED AS ORC; ``` #### 设置合理的分区策略 合理设置分区策略可以避免过多的小分区,从而提高查询性能[^2]。 ### 其他实用命令 #### 显示数据库 显示所有数据库可以使用 `SHOW DATABASES` 命令。 ```sql SHOW DATABASES; ``` #### 切换数据库 切换数据库可以使用 `USE` 命令。 ```sql USE database_name; ``` #### 显示表 显示当前数据库中的所有表可以使用 `SHOW TABLES` 命令。 ```sql SHOW TABLES; ``` #### 查看表结构 查看表结构可以使用 `DESCRIBE` 命令。 ```sql DESCRIBE table_name; ``` ### 最佳实践 - **合理设置分区策略**:避免过多的小分区,以提高查询性能。 - **使用 Hive Merge 相关参数自动合并小文件**:这有助于减少文件数量,提高查询效率。 - **定期执行 `ALTER TABLE ... CONCATENATE` 命令**:合并小文件可以提高查询性能。 - **使用 Hive ACID 的自动压缩功能**:这有助于保持数据的一致性和高效性[^2]。 通过遵循这些最佳实践,可以有效地管理和优化 Hive 数据仓库中的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值