Hive sql 常用命令2

原文地址:https://zhuanlan.zhihu.com/p/132720059

基本概念

  • 外部表EXTERNAL:删除表并不会删除数据,但描述表的元数据信息会被删除掉。
  • 分区表:使用分区来水平分散压力,将数据以一种符合逻辑的方式进行组织,比如分层存储。创建分区表的语法如下:
CREATE TABLE IF NOT EXISTS employees (
    name STRING,
    salary FLOAT,
    subordinated ARRAY<STRING>,
    deductions MAP<STRING, FLOAT>,
    address STRUCT<street:STRING, city:STRING, state:STRING, zip:INT> 
) PARTITIONED BY (year INT, month INT, day INT) --按照州划分数据
LOCATION '/user/hive/warehouse/mydb.db/employees';

这些数据会存储在对应的employees的目录下,Hive会创建号可以反应分区结构的子目录,如:

当用 set hive.mapred.mode=strict;将Hive设置为 strict格式时,如果对分区表进行查询而WHERE子句没有加分区过滤,则会禁止提交这个任务;
可以用SHOW PARTITIONS查看表中存在的所有分区;若存在很多个分区,可以在此基础上增加一个或多个指定语句进行查看,利用 SHOW PARTITIONS employees PARTITION(country='US');语句进行过滤查询;

表操作

  • 创建表
CREATE TABLE IF NOT EXISTS mydb.employees (
    name STRING COMMENT 'Employee name',
    salary FLOAT COMMENT 'Employee salary',
    subordinated ARRAY<STRING> COMMENT 'Names of subordinates',
    deductions MAP<STRING, FLOAT> COMMENT 'Keys are deductions names, values are percentages',
    address STRUCT<street:STRING, city:STRING, state:STRING, zip:INT> COMMENT 'Home address'
)COMMENT 'Description of the table'
TBLPROPERTIES ('creator'='me', 'created_at'='2012-01-02 10:00:00', ...)
--TBLPROPERTIES作用是按键-值对的格式为表增加额外的文档说明
LOCATION '/user/hive/warehouse/mydb.db/employees';
--Hive会自动增加两个表属性:1.last_modified_by保存最后修改这个表的用户名;2.last_modified_time保存最后一次修改的新纪元时间秒。
  • 查看表

SHOW TABLES命令可列举出所有的表;

USE mydb;
SHOW TABLES;

也可以使用DESCRIBE EXTENDED mydb.employees命令来查看表详细结构信息,使用FORMATTED关键字替代EXTENDED关键字,可以提供更多输出信息。这个命令也可以显示出分区键。

  • 删除表
DROP TABLE IF EXISTS employees;
  • 修改表

①表重命名

ALTER TABLE log_messages RENAME TO logmsgs;

②增加、修改和删除表分区

ALTER TABLE log_messages ADD IF NOT EXISTS
PARTITION (year = 2011, month = 1, day = 1) LOCATION '/logs/2011/01/01'
PARTITION (year = 2011, month = 1, day = 2) LOCATION '/logs/2011/01/02'
PARTITION (year = 2011, month = 1, day = 3) LOCATION '/logs/2011/01/03'
...; --增加多个分区
ALTER TABLE log_message 
PARTITION (year = 2011, month = 12, day = 2)
SET LOCATION 's3n://ourbucket/logs/2011/01/02'; --修改分区路径
ALTER TABLE log_messages 
DROP IF EXISTS 
PARTITION (year = 2011, month = 12, day = 2)

③修改列信息

ALTER TABLE log_message 
CHANGE COLUMN hms hours_minutes_seconds INT
COMMENT 'The hours, minutes, and seconds part of the timestamp'
AFTER severity; --FIRST将字段移动到第一个位置

④增加列

ALTER TABLE log_messages ADD COLUMNS (
    app_name STRING COMMENT 'Application name',
    session_id LONG COMMENT 'The current session id'
);

若新增字段中某个或多个字段位置是错误的,则需要使用ALTER COLUMN 表名 CHANGE COLUMN语句逐一调整字段位置。

⑤删除或者替换列

ALTER TABLE log_messages REPLACE COLUMNS (
    hours_mins_secs INT COMMENT 'hour, minute, second from timestamp',
    severity STRING COMMENT 'The message severity',
    message STRING COMMENT 'The rest of the message'
);

ALTER语句只改变表的元信息数据。

⑥修改表属性

ALTER TABLE log_messages SET TBLPROPERTIES (
    'notes' = 'The process id is no longer captures; this column is always NULL'
)

⑦修改存储属性

ALTER TABLE log_messages
PARTITION (year = 2012, month = 1, day = 1)
SET FILEFORMAT SEQUENCEFILE;

数据操作

  • 向表中装载数据

该命令先创建分区目录,然后再将数据拷贝到该目录下。

LOAD DATA LOCAL INPATH '${env:HOME}/california-employees' --LOCAL本地文件系统路径 省略则为分布式文件系统中的路径
OVERWRITE INTO TABLE employees
PARTITION (country = 'US', state = 'CA')
  • 通过查询语句向表中插入数据
INSERT OVERWRITE TABLE employees --OVERWRITE会覆盖之前分区中的内容,无OVERWRITE或为INSERT INTO则是追加
PARTITION (country = 'US', state = 'OR')
SELECT * FROM staged_employees se
WHERE se.cnty = 'US' AND se.st = 'OR'
动态分区插入
INSERT OVERWRITE TABLE employees
PARTITION (country = 'US', state)
SELECT ..., se.cnty, se.st
FROM staged_employees se
WHERE se.cnty = 'US';  --country字段为静态分区,state为动态分区,静态分区键必须在动态分区键之前
 
  • 导出数据

拷贝文件夹或者文件的方法

hadoop fs -cp source_path target_path

或者

INSERT OVERWRITE LOCAL DIRECTORY '/tmp/ca_employees'
SELECT name, salary, address
FROM employees
WHERE se.state = 'CA'

附录:动态分区属性

属性名称缺省值描述hive.exec.dynamic.partitionfalse设置成true,表示开启动态分区功能hive.exec.dynamic.partition.modestrict设置成nonstrict,表示允许所有分区都是动态的hive.exec.max.dynamic.partitions.pernode100每个mapper或reducer可以创建的最大动态分区个数hive.exec.max.dynamic.partitions+1000一个动态分区创建语句可以创建的最大动态分区个数hive.exec.max.created.files100000全局可以创建的最大文件个数

数据查询

SELECT ...
FROM ...

  • SELECT ... FROM语句

①使用正则表达式来指定列

SELECT symbol, `price.*` 
FROM stocks;

②使用列值进行计算

SELECT upper(name)
       , salary
       , deductions["Federal Taxes"]
       , round(salary * (1 - deductions["Federal Taxes"])) --返回DOUBLE类型的最近整数
FROM employees;

③CASE ... WHEN ... THEN 句式

在利用SQL进行数据分析过程中,这种方法经常用到,用于处理单个列的查询结果。

SELECT name
       , salary
       , CASE WHEN salary < 50000.0 THEN 'low'
              WHEN salary >= 50000.0 AND salary < 70000.0 THEN 'middle'
              WHEN salary >= 70000.0 AND salary < 100000.0 THEN 'high'
              ELSE 'very high' END AS bracket
FROM employees;
Hive可以避免进行MapReduce的情况:①本地模式查询,即简单读取目录下文件;②WHERE过滤条件只是分区字段

④谓语操作词(类似于=、<、>这种操作符)

关于浮点数的比较:当用户写一个浮点数,Hive会将该值保存为DOUBLE型的,0.2对于FLOAT类型是0.2000001,而对于DOUBLE类型是0.200000000001。
SELECT name
       , salary 
       , deductions['Federal Taxes']
FROM employees
WHERE deductions['Federal Taxes'] > 2;
--修改成符合预期的
--WHERE deductions['Federal Taxes'] > cast(0.2 AS FLOAT)

⑤LIKE和RLIKE

查找所有住址的街道名称中含有单词Chicago或Ontario的雇员名称和街道信息如下:

SELECT name
       , address.street
       FROM employees
WHERE address.street RLIKE '.*(Chicago|Ontario).*'
  • GROUP BY 语句
SELECT year(ymd)
       , avg(price_close)
FROM stocks
WHERE exchange = 'NASDAQ' AND symbol = 'AAPL'
GROUP BY year(ymd)
HAVING avg(price_close) > 50.0;
  • JOIN语句

类型:

①INNER JOIN内连接

②LEFT OUTER JOIN左外连接

③外连接OUTER JOIN

④RIGHT OUTER JOIN右外连接

⑤FULL OUTER JOIN完全外连接

⑥LEFT SEMI-JOIN左半开连接

⑦笛卡尔积JOIN

⑧map-side JOIN:所有表中只有一张表是小表,可以在最大的表通过mapper的时候将小表完全放到内存中,Hive可以在map端执行连接过程,和内存中的小表进行逐一匹配,从而省略掉常规连接操作所需要的reduce过程。

SELECT /*+MAPJOIN(d) */ s.ymd
       , s.symbol
       , s.price_close
       , d.dividend
FROM stocks s JOIN dividends d ON s.ymd = d.ymd AND s.symbol = d.symbol
WHERE s.symbol = 'AAPL';

JOIN优化的点在于用户需要保证连续查询中的表的大小从左到右是依次增加的。

  • ORDER BY和SORT BY

SORT BY只会在每个reducer中对数据进行排序,即局部排序过程,保证每个reducer的输出数据都是有序的。两者的对比:

SELECT s.ymd
       , s.symbol
       , s.price_close
FROM stocks s
ORDER BY s.ymd ASC, s.symbol DESC;
--SORT BY s.ymd ASC, s.symbol DESC;

若reducer的个数大于1,SORT BY的结果是局部有序的,ORDER BY的结果是全局有序的。

补充:含有SORT BY的DISTRIBUTE BY

SELECT s.ymd
       , s.symbol
       , s.price_close
FROM stocks s
DISTRIBUTE BY s.symbol
SORT BY s.symbol DESC, s.ymd ASC;

如上DISTRIBUTE BY保证具有相同股票交易码的记录会分发到同一个reducer中进行处理,然后使用SORT BY来排序。

  • CLUSTER BY语句

上面语句等价于

SELECT s.ymd
       , s.symbol
       , s.price_close
FROM stocks s
CLUSTER BY s.symbol;
  • 类型转换

cast(value AS TYPE)为类型转换函数,浮点数转换成整数用round()或者floor()函数BINARY类型只支持将BINARY类型转换为STRING类型

  • 抽样查询

①采用rand()函数

SELECT *
FROM numbers
TABLESAMPLE(BUCKET 3 OUT OF 10 ON rand()) s;

分桶语句中的分母表示的是数据将会被散列的桶的个数,而分子表示将会选择的桶的个数。

②数据块抽样

基于行数按照输入路径下的数据块百分比进行的抽样

SELECT *
FROM numbersflat
TABLESAMPLE(0.1 PERCENT) s;
  • UNION ALL

与SQL相同

索引

  • 创建索引
CREATE INDEX employees_index
ON TABLE employees (country)
AS 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler' --一种典型的索引实现
WITH DEFERRED REBUILD
IDXPROPERTIES ('creator' = 'me', 'created_at' = 'some_time')
IN TABLE employees_index_table
PARTITIONED BY (country, name)
COMMENT 'Employees indexed by country and name.';
  • 重建索引
ALTER INDEX employees_index
ON TABLE employees
PARTITION (country = 'US')
REBUILD;
  • 显示索引
SHOW FORMATTED INDEX ON employees;
  • 删除索引
DROP INDEX IF EXISTS employees_index ON TABLE employees;

附录

  • Hive内置数学函数

 

 

  • 聚合函数

可以通过设置属性 SET hive.map.aggr=true命令来提高聚合的性能。
  • 表生成函数

  • 其他内置函数

 

 

在数据分析实习中经常用到的函数主要是聚合函数、日期处理函数、正则表达式、字符串处理函数,后面争取对于这些常用的函数做一下详细解释。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
### 回答1: 很高兴为您提供一些有关Hive SQL资料。 您可以查看Apache Hive官方文档:https://cwiki.apache.org/confluence/display/Hive/Home,以及Hive查询语言的参考文档:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Select。此外,您也可以查看Hive的教程,例如:https://tutorialspoint.dev/apache-hive/hive-ql,https://www.guru99.com/hive-tutorial.html。 ### 回答2: Hive SQL是一种用于在大数据环境下进行数据查询和处理的高级查询语言。它类似于传统的关系型数据库SQL语言,但专门用于处理分布式存储和处理大数据。以下是一些可以帮助您了解Hive SQL的资料: 1. 官方文档:Hive官方网站和文档提供了详细的Hive SQL语法和功能说明,包括用户指南、语言手册和API文档等。您可以访问Hive官方网站(https://hive.apache.org/)来获取最新的文档。 2. 学习教程:有许多在线教程和学习资源可供学习Hive SQL。您可以通过搜索引擎或在线教育平台查找Hive SQL的教程,其中包括视频教程、在线课程和实际使用案例。 3. 书籍:有一些书籍专门介绍Hive SQL,这些书籍可以提供更深入的理解和实践指导。例如,《Hive高效实战》、《Hadoop技术内幕》等等。您可以通过在线书店或图书馆查找相关书籍。 4. 社区论坛和博客:Hive SQL拥有活跃的社区论坛和博客,许多专业人士和爱好者在这些平台上分享经验和知识。您可以加入相关的Hive SQL论坛或关注一些知名博客,与其他用户交流和学习。 5. 示例代码和案例:许多开源项目和GitHub存储库提供了使用Hive SQL的示例代码和实际应用案例。您可以下载和学习这些代码,从中获取更好的实践经验。 总之,通过使用上述资源,您将能够获得关于Hive SQL的详细信息,并学习如何使用它来处理和查询大数据。祝您学习顺利! ### 回答3: Hive SQL是一种用于在Hadoop上进行数据处理和查询的SQL方言。以下是一些关于Hive SQL的资料: 1. 官方文档:Hive有详细的官方文档,其中包含了完整的语法、函数、命令以及示例。你可以访问Hive官方网站或者通过搜索引擎找到这些文档。 2. 教程:有许多在线教程可以帮助你入门Hive SQL。你可以通过搜索引擎找到一些示例性的教程,并跟随这些教程来学习Hive SQL的基础知识和用法。 3. 书籍:一些著名的Hive SQL教材和参考书籍也可以提供更深入和全面的学习资料。例如,《Apache Hive Essentials》和《Programming Hive》是一些值得参考的书籍。 4. 网上资源:在GitHub和其他技术论坛上,有很多Hive SQL的示例代码和实践经验的共享资源。你可以搜索并加入一些技术社区,以获取更多的学习资料和互动交流。 总的来说,学习Hive SQL需要理解其基本语法、常用函数和命令,以及掌握在Hadoop集群上进行数据处理和查询的方法。通过阅读官方文档、参考书籍、在线教程和资源分享,你可以更好地掌握Hive SQL的相关知识。祝你学习顺利!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值