partition:
1、删除表、创建外部表和分区、根据分区导入数据
dfs -rmr /tmp/ext/tab_name1; --删除hadoop文件系统中的目录及文件 dfs -mkdir /tmp/ext/tab_name1;--重新创建目录。建表前需要先创建与表名称对应的目录才行 drop table if exists tab_name1; create external table if not exists tab_name1(id int ,name string) partitioned by (aa string) row format delimited fields terminated by ',' location '/tmp/ext/tab_name1'; load data local inpath '/home/conkeyn/jar/a.txt' into table tab_name1 partition(aa='1'); load data local inpath '/home/conkeyn/jar/b.txt' into table tab_name1 partition(aa='2'); dfs -ls /tmp/ext/tab_name1;
2、根据分页查询
select * from tab_name1 where aa='1';
clustered
1、创建表簇
--创建普通表 drop table if exists tab_cdr; create table if not exists tab_cdr(oaddr string,oareacode string,daddr string,dareacode string,ts string,type string) row format delimited fields terminated by ','; load data local inpath '/home/conkeyn/jar/output/cdr01.txt' into table tab_cdr; select count(*) from tab_cdr; --创建表簇 drop table if exists tab_cdr_buc; create table if not exists tab_cdr_buc(oaddr string,oareacode string,daddr string,dareacode string,ts string,type string) clustered by (oaddr) into 10 buckets; --强制使用批量 set hive.enforce.bucketing=true; --添加数据 insert into table tab_cdr_buc select * from tab_cdr;
file_format(文件类型)
需要依赖:安装hadoop-lzo压缩库
创建普通表,待会儿需要从普通表上查询记录,并插入到压缩表中
drop table if exists tab_cdr; create table if not exists tab_cdr(oaddr string,oareacode string,daddr string,dareacode string,ts string,type string) row format delimited fields terminated by ','; load data local inpath '/home/conkeyn/jar/output/ab.txt' into table tab_cdr; dfs -ls /user/hive/warehouse/tab_cdr; select count(*) from tab_cdr;
1、sequence file
--sequencefile set hive.exec.compress.output=true; set mapred.output.compress=true; set mapred.output.compression.type=BLOCK; set mapred.output.compression.codec=com.hadoop.compression.lzo.LzoCodec; drop table if exists tab_cdr_seq; create table if not exists tab_cdr_seq(oaddr string,oareacode string,daddr string,dareacode string,ts string,type string) row format delimited fields terminated by ',' stored as sequencefile; insert overwrite table tab_cdr_seq select * from tab_cdr; dfs -ls /user/hive/warehouse/tab_cdr_seq; select count(*) from tab_cdr_seq;
2、text file
3、rcf file
--rcfile set hive.exec.compress.output=true; set mapred.output.compress=true; set mapred.output.compression.type=BLOCK; set mapred.output.compression.codec=com.hadoop.compression.lzo.LzoCodec; drop table if exists tab_cdr_rc; create table if not exists tab_cdr_rc(oaddr string,oareacode string,daddr string,dareacode string,ts string,type string) row format delimited fields terminated by ',' stored as rcfile; insert overwrite table tab_cdr_rc select * from tab_cdr; dfs -ls /user/hive/warehouse/tab_cdr_rc; select count(*) from tab_cdr_rc;
4、input file
5、gz
--使用压缩文件格式 drop table if exists tab_name; create table if not exists tab_name(id int ,name string) row format delimited fields terminated by ','; load data local inpath '/home/conkeyn/jar/a.txt.gz' into table tab_name; dfs -ls /user/hive/warehouse/tab_name; --在查询时,后台会自动为我们解压 select * from tab_name;
6、字段的复杂类型
(1)、Array类型
数据准备:
rob,bob,steven 1,2,3 amy,andy 11,22 jac 11,22,33,44,55
SQL操作:
--field array type drop table if exists tab_arr; create table if not exists tab_arr(a array<string>,b array<int>) row format delimited fields terminated by '\t' collection items terminated by ','; load data local inpath '/home/conkeyn/jar/arr.txt' into table tab_arr; select a[2] from tab_arr; select * from tab_arr where array_contains(a,'rob'); select * from tab_arr where array_contains(b,22); insert into table tab_arr select array(oaddr,oareacode),array(0) from tab_cdr;
(2)Map类型
数据准备:
rob age:10,tel:87654321 amy age:17,tel:09876543,addr:shanghai bob age:18,tel:98765432,addr:beijing
SQL操作
drop table if exists tab_map; create table if not exists tab_map(name string,info map<string,string>) row format delimited fields terminated by '\t' collection items terminated by ',' map keys terminated by ':'; load data local inpath '/home/conkeyn/jar/map.txt' into table tab_map; select info['age'] from tab_map; insert into table tab_map select oaddr,map('oareacode',oareacode,'daddr',daddr) from tab_cdr; select * from tab_map limit 10;
(3)、Struct类型
数据准备:
rob 10,87654321 amy 17,09876543,shanghai bob 18,98765432beijing
SQL操作
drop table if exists tab_struct; create table if not exists tab_struct(name string,info struct<age:int,tel:string,addr:string>) row format delimited fields terminated by '\t' collection items terminated by ','; load data local inpath '/home/conkeyn/jar/struct.txt' into table tab_struct; select * from tab_struct limit 10; select info.age from tab_struct; insert into table tab_struct select oaddr,named_struct('age',0,'tel',daddr,'addr',dareacode) from tab_cdr;
7、查询
(1)join(联接)
--表联接 drop table if exists tab_areaname; create table if not exists tab_areaname(code string,name string) row format delimited fields terminated by '\t'; load data local inpath '/home/conkeyn/jar/areaname.txt' overwrite into table tab_areaname; select * from tab_areaname; drop table if exists tab_res1; create table if not exists tab_res1(oaddr string ,cityname string); insert into table tab_res1 select a.oaddr,b.name from tab_cdr a inner join tab_areaname b on a.oareacode = b.code; -- map join --mapjoin使用条件是,mapjoin(table_name)的table_name这张表的数据量要比较小时才能显现出效果。 insert into table tab_res1 select /*+ mapjoin(a) */ b.oaddr,a.name from tab_cdr b inner join tab_areaname a on a.code = b.oareacode; --三张表联接 drop table if exists tab_user; create table tab_user(addr string); insert overwrite table tab_user select distinct(oaddr) from tab_cdr limit 100; insert into table tab_res1 select /*+ mapjoin(a) */ b.oaddr,a.name from tab_cdr b inner join tab_areaname a on a.code = b.oareacode inner join tab_user c on c.addr = b.oaddr;
从同张表中取出数据分别插入不同表(以下示例是使用同一张表不同分区)中。
drop table if exists tab_indb_tmp; create table tab_indb_tmp(oaddr string,oareacode string,daddr string,dareacode string ,ts string, type string) row format delimited fields terminated by ','; drop table if exists tab_indb; create table tab_indb(oaddr string,oareacode string,daddr string,dareacode string ,ts string, type string) partitioned by (date string) stored as rcfile; --按分区插入数据语法 from tab_indb_tmp insert into table tab_indb partition(date="1st") select * where substr(ts,7,2)<="10" insert into table tab_indb partition(date="2ed") select * where substr(ts,7,2) between "11" and "20" insert into table tab_indb partition(date="3rd") select * where substr(ts,7,2)>"20";
d
相关推荐
通过对MapReduce实现SQL操作原理的深入理解,我们可以更好地掌握Hive的工作机制,从而提高数据分析的效率和准确性。在日常工作中,这样的知识不仅能帮助我们排查和修复问题,也能指导我们编写更高效的Hive SQL,提升...
本文旨在深入探讨HiveSQL解析原理及其如何将SQL转化为MapReduce过程,并解释MapReduce如何实现基本SQL操作。 #### 二、MapReduce实现基本SQL操作的原理 在深入理解Hive如何将SQL语句转换为MapReduce任务之前,我们...
### Hive SQL优化技巧详解 #### 一、数据倾斜优化 数据倾斜是指在Hive查询过程中,数据不均匀地分布在不同的Reducer上,导致某些Reducer处理的数据量远大于其他Reducer,从而影响整个查询性能的问题。解决数据倾斜...
### 部分普通SQL查询在Hive中的实现方式 Hive是一款基于Hadoop的数据仓库工具,能够对存储在Hadoop文件系统中的数据集进行数据提取、转换、加载(ETL),这是一种可以简化MapReduce编程的工具。由于Hive的设计初衷...
在大数据处理领域,HiveSQL是一种广泛使用的查询语言,它扩展了标准的SQL,以便在分布式存储系统上处理大规模数据集。本学习笔记主要聚焦于HiveSQL中的窗口函数,这是进行复杂数据分析的重要工具。 窗口函数允许...
在SQL(Structured Query Language)中,循环语句主要用于执行重复性的任务,特别是在处理大量数据或者需要按步骤操作的时候。在数据库编程中,我们通常使用PL/SQL(Oracle)、T-SQL(Microsoft SQL Server)或存储...
总的来说,Hive SQL的实战应用涵盖了数据操作和复杂查询,尤其是窗口函数的运用,能够帮助我们更好地理解和处理大规模数据。通过学习和实践这些案例,我们可以提升在实际工作中处理数据问题的能力。
《HIVE-SQL开发规范》文档的出现,旨在为Java开发者提供一套标准的Hive SQL编程准则,确保数据处理的高效、稳定与可维护性。Hive是基于Hadoop的数据仓库工具,它允许用户使用SQL语法来查询分布式存储的数据。在大...
用户自定义聚合函数(User-Defined Aggregate Functions, UDAGGs 或简称 UDAFs)是Hive提供的扩展功能,允许开发人员根据业务需求定制特殊的聚合操作。在“hive udaf 实现按位取与或”的场景中,我们主要探讨如何...
4. **执行Spark SQL操作**:当Spark SQL通过Hive接口执行DML(Data Manipulation Language)或DDL(Data Definition Language)操作时,Hive Hook会捕获这些操作的元数据变更。 5. **血缘信息收集和存储**:捕获的...
本文将详细介绍如何在Shell脚本中循环调用Hive SQL语句,以便实现批量处理数据或者执行一系列相关的查询操作。 首先,我们要理解Shell脚本的基本结构和Hive SQL的功能。Shell脚本是一种解释型的编程语言,主要用于...
### 2024年最新,Hive SQL经典面试题详解 #### 1. 连续登录n天的用户 **题目背景与目的** 在大数据分析领域,了解用户的行为模式对于提升用户体验、优化产品功能至关重要。例如,识别连续登录n天的用户可以帮助...
8. **错误处理和日志记录**:Kettle 提供详细的日志记录和错误处理机制,帮助用户跟踪和解决在处理 Hive 数据时遇到的问题。 9. **与 SQL Server 和 Oracle 数据库的连接**:除了 Hive,这个连接包还包含了连接 SQL...
另一方面,`get("sqls")`可能返回一个数组,包含了原始输入的SQL语句,这便于后续处理或日志记录。 在实际应用中,Hive ParseUtils可能会结合Hive的AST(抽象语法树)进行工作。当SQL语句被解析后,会生成一个表示...
在大数据处理领域,Hive是一个非常重要的工具,它提供了对大规模数据集的SQL查询能力,使得非编程背景的用户也能方便地进行数据分析。本实战项目是关于如何利用Hive通过日期来计算星座的一个实例,旨在帮助学习者更...
【Hive SQL大厂必考常用窗口函数及面试题】主要涵盖了窗⼝函数在大数据分析中的应用,尤其在OLAP(在线分析处理)场景中的重要性。窗⼝函数是一种标准SQL功能,它允许对数据库数据进行实时分析处理,如市场分析、...
TPCDS SQL查询的复杂性在于它们设计了多种数据仓库的典型操作,如聚合、联接、子查询、排序、分组等,这些都是大数据分析中常见的操作。通过执行这些SQL脚本,我们可以测试Hive在处理大数据量时的响应速度、资源消耗...
在IT行业中,尤其是在大数据处理领域,Hive是一个广泛使用的数据仓库工具,它允许用户通过SQL-like查询语言(HQL)来处理存储在分布式文件系统中的大规模数据。然而,当面对大量不再需要的Hive表时,手动删除不仅...
6. **log4j-1.2.14.jar**: 日志记录框架,用于记录Hive与SQL Developer交互过程中的日志信息,便于调试和问题排查。 7. **httpclient-4.1.3.jar**: 提供了HTTP协议的客户端实现,可能在Hive的网络通信中起到作用。 ...