`
conkeyn
  • 浏览: 1523050 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

hive的SQL操作记录

 
阅读更多

 

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

分享到:
评论

相关推荐

    Hive SQL 编译过程详解

    通过对MapReduce实现SQL操作原理的深入理解,我们可以更好地掌握Hive的工作机制,从而提高数据分析的效率和准确性。在日常工作中,这样的知识不仅能帮助我们排查和修复问题,也能指导我们编写更高效的Hive SQL,提升...

    HiveSQL解析原理.docx

    本文旨在深入探讨HiveSQL解析原理及其如何将SQL转化为MapReduce过程,并解释MapReduce如何实现基本SQL操作。 #### 二、MapReduce实现基本SQL操作的原理 在深入理解Hive如何将SQL语句转换为MapReduce任务之前,我们...

    Hive sql优化

    ### Hive SQL优化技巧详解 #### 一、数据倾斜优化 数据倾斜是指在Hive查询过程中,数据不均匀地分布在不同的Reducer上,导致某些Reducer处理的数据量远大于其他Reducer,从而影响整个查询性能的问题。解决数据倾斜...

    部分普通sql查询在hive中的实现方式

    ### 部分普通SQL查询在Hive中的实现方式 Hive是一款基于Hadoop的数据仓库工具,能够对存储在Hadoop文件系统中的数据集进行数据提取、转换、加载(ETL),这是一种可以简化MapReduce编程的工具。由于Hive的设计初衷...

    HiveSQL基础窗口函数学习笔记

    在大数据处理领域,HiveSQL是一种广泛使用的查询语言,它扩展了标准的SQL,以便在分布式存储系统上处理大规模数据集。本学习笔记主要聚焦于HiveSQL中的窗口函数,这是进行复杂数据分析的重要工具。 窗口函数允许...

    一个简单的sql循环语句脚本

    在SQL(Structured Query Language)中,循环语句主要用于执行重复性的任务,特别是在处理大量数据或者需要按步骤操作的时候。在数据库编程中,我们通常使用PL/SQL(Oracle)、T-SQL(Microsoft SQL Server)或存储...

    hiveSQL实战案例

    总的来说,Hive SQL的实战应用涵盖了数据操作和复杂查询,尤其是窗口函数的运用,能够帮助我们更好地理解和处理大规模数据。通过学习和实践这些案例,我们可以提升在实际工作中处理数据问题的能力。

    HIVE-SQL开发规范.zip

    《HIVE-SQL开发规范》文档的出现,旨在为Java开发者提供一套标准的Hive SQL编程准则,确保数据处理的高效、稳定与可维护性。Hive是基于Hadoop的数据仓库工具,它允许用户使用SQL语法来查询分布式存储的数据。在大...

    hive udaf 实现按位取与或

    用户自定义聚合函数(User-Defined Aggregate Functions, UDAGGs 或简称 UDAFs)是Hive提供的扩展功能,允许开发人员根据业务需求定制特殊的聚合操作。在“hive udaf 实现按位取与或”的场景中,我们主要探讨如何...

    shell中循环调用hive sql 脚本的方法

    本文将详细介绍如何在Shell脚本中循环调用Hive SQL语句,以便实现批量处理数据或者执行一系列相关的查询操作。 首先,我们要理解Shell脚本的基本结构和Hive SQL的功能。Shell脚本是一种解释型的编程语言,主要用于...

    2024年最新,Hive SQL经典面试题,大数据SQL经典面试题

    ### 2024年最新,Hive SQL经典面试题详解 #### 1. 连续登录n天的用户 **题目背景与目的** 在大数据分析领域,了解用户的行为模式对于提升用户体验、优化产品功能至关重要。例如,识别连续登录n天的用户可以帮助...

    kettle8.1Hive连接包

    8. **错误处理和日志记录**:Kettle 提供详细的日志记录和错误处理机制,帮助用户跟踪和解决在处理 Hive 数据时遇到的问题。 9. **与 SQL Server 和 Oracle 数据库的连接**:除了 Hive,这个连接包还包含了连接 SQL...

    hive parser工具类

    另一方面,`get("sqls")`可能返回一个数组,包含了原始输入的SQL语句,这便于后续处理或日志记录。 在实际应用中,Hive ParseUtils可能会结合Hive的AST(抽象语法树)进行工作。当SQL语句被解析后,会生成一个表示...

    大数据小型实战项目源码之Hive 通过日期计算星座实例

    在大数据处理领域,Hive是一个非常重要的工具,它提供了对大规模数据集的SQL查询能力,使得非编程背景的用户也能方便地进行数据分析。本实战项目是关于如何利用Hive通过日期来计算星座的一个实例,旨在帮助学习者更...

    Hive SQL大厂必考常用窗口函数及面试题.pdf

    【Hive SQL大厂必考常用窗口函数及面试题】主要涵盖了窗⼝函数在大数据分析中的应用,尤其在OLAP(在线分析处理)场景中的重要性。窗⼝函数是一种标准SQL功能,它允许对数据库数据进行实时分析处理,如市场分析、...

    hive-testbench-hive14.zip大数据TPCDS-99SQL自动测试脚本

    TPCDS SQL查询的复杂性在于它们设计了多种数据仓库的典型操作,如聚合、联接、子查询、排序、分组等,这些都是大数据分析中常见的操作。通过执行这些SQL脚本,我们可以测试Hive在处理大数据量时的响应速度、资源消耗...

    快捷删除hive表的工具

    在IT行业中,尤其是在大数据处理领域,Hive是一个广泛使用的数据仓库工具,它允许用户通过SQL-like查询语言(HQL)来处理存储在分布式文件系统中的大规模数据。然而,当面对大量不再需要的Hive表时,手动删除不仅...

    Atlas Spark SQL血缘分析,Hive Hook

    4. **执行Spark SQL操作**:当Spark SQL通过Hive接口执行DML(Data Manipulation Language)或DDL(Data Definition Language)操作时,Hive Hook会捕获这些操作的元数据变更。 5. **血缘信息收集和存储**:捕获的...

    sql developer hive连接java包

    6. **log4j-1.2.14.jar**: 日志记录框架,用于记录Hive与SQL Developer交互过程中的日志信息,便于调试和问题排查。 7. **httpclient-4.1.3.jar**: 提供了HTTP协议的客户端实现,可能在Hive的网络通信中起到作用。 ...

Global site tag (gtag.js) - Google Analytics