Hive Shell

目录

hive是否执行mr

创建数据库指定目录

删除数据库

 显示表信息/表结构

查看表示内部表还是外部表 

拷贝一张已经存在的表的表模式(而无需拷贝数据)

复制一张表(包括数据)

 hive-cli 显示当前所在数据库

执行命令不进入hive交互模式

hive关联hbase表

创建外部表

查询数据保存到linux系统

创建内部表

创建parquet格式snappy压缩表

外部执行

清空表中所有行数据

导入数据

1.将文件放入表目录下

2.导入本地文件直接导入表中

3.导入hdfs上数据到表中

4.从别的表中查询插入相应的表

5.在创建表的时候通过从别的表中查询出相应的记录并插入到所创建的表中

UDF

Hive执行引擎设置

Hive指定yarn队列

多表插入

Hive手动创建目录导入数据,表刷新partition



hive是否执行mr

简单的查询,就是只是select,不带count,sum,group by这样的,都不走map/reduce,直接读取hdfs文件进行filter过滤。这样做的好处就是不新开mr任务,执行效率要提高不少,但是不好的地方就是用户界面不友好,有时候数据量大还是要等很长时间,但是又没有任何返回。
改这个很简单,在hive-site.xml里面有个配置参数叫
hive.fetch.task.conversion
将这个参数设置为more,简单查询就不走map/reduce了,设置为minimal,就任何简单select都会走map/reduce

创建数据库指定目录

hive> CREATE DATABASE financials> LOCATION '/my/preferred/directory'> COMMENT 'Holds all financial tables'

删除数据库

hive> DROP DATABASE IF EXISTS financialsIF EXISTS子句是可选的,如果加了这个子句,就可以避免因数据库finanacials不存在而抛出警告信息默认情况下,Hive是不允许用户删除一个包含有表的数据库的。用户要么先删除数据库中的表,然后再删除数据库;要么在删除命令的最后面加上关键字CASCADE,这样可以使Hive自行先删除数据库中的表:hive> DROP DATABASE IF EXISTS financials CASCADE

 显示表信息/表结构

hive > DESCRIBE FORMATTED mydb.tableNameFORMATTED 详细表结构

查看表示内部表还是外部表 

hive> DESCRIBE extended crawler_hive2;
内部表: tableType:MANAGED_TABLE
外部表:ableType:EXTERNAL_TABLE

拷贝一张已经存在的表的表模式(而无需拷贝数据)

CREATE TABLE IF NOT EXISTS mydb.employees2
LIKE mydb.employees
LOCATION 'xxxx/xxx/xxx'

复制一张表(包括数据)

create table t_copy as select * from t_temp;

 

 hive-cli 显示当前所在数据库

hive> set hive.cli.print.current.db=true;
hive (ods_database)>取消显示 
set hive.cli.print.current.db=false;

执行命令不进入hive交互模式

hive -e "SQL" 执行单条语句
hive -f /home/root/insert.sql 执行sql文件,适合多条语句

hive关联hbase表

hive集成hbase:

hive 0.13版本 hbase1.2.5版本无法创建hive创建内部表关联,提示找不到方法,hive更新到2.1.1版本就可以了

  • hive创建外部表关联(可以关联hbase已有的表)
    CREATE EXTERNAL TABLE hive_high_keyword(key string, keyword string, adCode string)   STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'  WITH SERDEPROPERTIES (  "hbase.columns.mapping"=":key,fn:keyword,fn:adCode"  )TBLPROPERTIES("hbase.table.name" = "crawl:high_keyword");
  • hive创建内部表关联(只能关联hbase中没有的表,删除hive表后hbase表也会删除,并且通过hive创建hbase的内部表,存储数据仍然存在hbse中)
CREATE TABLE biz0728(key string, name string)   
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'  
WITH SERDEPROPERTIES (  "hbase.columns.mapping"=":key,fn:name"  )
TBLPROPERTIES("hbase.table.name" = "biz0728");

创建外部表

create EXTERNAL TABLE u_info
(usrid STRING,age STRING,sex STRING
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'LINES TERMINATED BY '\n';

查询数据保存到linux系统

insert overwrite local directory '/home/xxx/xxx' select * from tableName;

 


创建内部表

create  TABLE u_info
(usrid STRING,age STRING,sex STRING
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'LINES TERMINATED BY '\n';

创建parquet格式snappy压缩表

CREATE EXTERNAL TABLE IF NOT EXISTS tableName(xxx string)
partitioned by
(pt_xvc string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\001'
STORED AS PARQUET TBLPROPERTIES('parquet.compression'='SNAPPY');

 


外部执行

hive -f xxx.sql


清空表中所有行数据

truncate table tablename;

导入数据

1.将文件放入表目录下

  • 表创建时会指定列分隔符(默认'\t')和行分隔符(默认'\n')
  • 将数据以指定形式放入,hive在hdfs存储目录下

测试导入数据如下(a.txt里内容):

user1   27      1
user2   28      1
user3   29      0
user4   30      1
user5   31      0
user6   32      1
user7   33      1
user8   34      0
我      是      测试
外      部      表
  • 步骤:
    • 用上面创建表命令创建一个内部或者外部表
    • 将a.txt里的内容导入到hdfs该表的目录下
    • select * from u_info;即可查询到数据
  • 如果有两个txt,查询时会合并到一起

2.导入本地文件直接导入表中

测试导入数据a.txt

load data local inpath 'a.txt' into table u_info;
  • a.txt,文件路径默认是用户的根目录,如root用户,读取目录为/home/root/a.txt
  • 推荐写绝对路径
load data local inpath '/home/root/a.txt' into table u_info;
  • 在hive中可以直接查看hdfs上的数据,使用命令:
dfs -ls /user/hive/warehouse/xxx ;

3.导入hdfs上数据到表中

测试导入数据a.txt

load data inpath '/a.txt' into table u_info;
  • 与2中的区别是少了一个 local

4.从别的表中查询插入相应的表

  • 创建表 test 并且以age进行分区
create table testc(
id int, name string
,tel string,sdf string)
partitioned by
(age int)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE;
  • 查询另一个表的数据并且插入到test表
insert into table test
partition (age='25')
select id, name, tel
from wyp;

这里做一下说明: 我们知道我们传统数据块的形式insert into table values(字段1,字段2),这种形式hive是不支持的。

  • 我们也可以在select语句里面通过使用分区值来动态指明分区:
set hive.exec.dynamic.partition.mode=nonstrict;
insert into table test
partition (age)
select id, name,
tel, age
from wyp;// partition (age),指定创建表时候的列
// partition跟select 中查询的列名无关,对应select查询最后一个列为test表中的age做partition(describe tablename 可以查看partition在哪个位置) 

这种方法叫做动态分区插入,但是Hive中默认是关闭的,所以在使用前需要先把hive.exec.dynamic.partition.mode设置为nonstrict

5.在创建表的时候通过从别的表中查询出相应的记录并插入到所创建的表中

  • 在实际情况中,表的输出结果可能太多,不适于显示在控制台上,这时候,将Hive的查询输出结果直接存在一个新的表中是非常方便的,我们称这种情况为CTAS(create table .. as select)如下:
create table test4
as
select id, name, tel
from wyp;

UDF

  • UDFClass
public class Uppercase extends UDF
{
//参数列表可以使用多个参数public Text evaluate(Text s1){String retsult=s1.toString().toUpperCase();return new Text(retsult);}
}

maven引用

<dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>2.7.1</version></dependency><dependency><groupId>org.apache.hive</groupId><artifactId>hive-exec</artifactId><version>1.2.1</version></dependency>
  • 在hive交互界面输入
//添加自己写入的jar包到hive中
add jar /home/root/udf.jar;
// 将自己写的类创建为函数,函数名为mytest
create temporary function mytest as 'com.xxx.hive.udf.Uppercase';
//查看所有可用函数,会发现自己刚刚添加的函数
show functions;
//使用udf函数查询
select mytest(u_info.age) from u_info;
  • 使用函数查询后结果
704512  BJ-华龙达       北京市华龙达商贸公司
2457600 NNZQD   南宁市百花谷文化传播有限公司
21889024        LYYZC@Y.COM     ztc
7979008 GX303YY200XLWW014       中国人民解放军第三0三医院
  • 不使用函数结果
704512  bj-华龙达       北京市华龙达商贸公司
2457600 nnzqd   南宁市百花谷文化传播有限公司
21889024        lyyzc@y.com     ztc
7979008 gx303yy200xlww014       中国人民解放军第三0三医院
  • 使用hive -i 参数在进入hive时自动初始化
$ cat hive_init
add jar /home/root/udf.jar;
create temporary function mytest as 'com.xxx.hive.udf.Uppercase';
$ hive -i hive_init
//进入hive交互界面就可直接使用函数了

和前两者相比,第三种方式直接将用户的自定义函数作为注册为内置函数,未来使用起来非常简单,但这种方式也非常危险,一旦出错,将是灾难性的,因此,建议如果不是特别通用,并且固化下来的函数,还是使用前两种方式比较靠谱。

Hive执行引擎设置

set hive.execution.engine=mr;

Hive指定yarn队列

set mapred.job.queue.name=queue3;

多表插入

FROM tableName1
INSERT OVERWRITE TABLE tableName2SELECT column1,colum2 GROUP BY year
INSERT OVERWRITE TABLE tableName3SELECT column1,count(1)WHERE column2 = 100
  • CTAS(CREATE TABLE... AS SELECT) 把查询到的结果创建一个新表保存起来,原子性操作,查询失败表不会被创建
CREATE TABLE tableName
AS
SELECT column1,column2
FROM tableName2

Hive手动创建目录导入数据,表刷新partition

alter table crawler_other_article_hive add partition(created_date=201801) location 'hdfs://xxx:8020/user/hive/warehouse/ods_crawler.db/crawler_other_article_hive/created_date=201801';删除表分区
ALTER TABLE testc DROP PARTITION (pt_date=20181212)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/510160.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++11/14新特性学习

1.__func__ 预定义表示符 返回所在函数的名字 #include<string> #include<iostream> using namespace std; const char* hello(){return __func__}int main() {cout<<hello()<<endl; } 打印结果&#xff1a; hello 2.__VA__ARGC__ 可以在宏定义的…

Linux chattr 与 lsattr命令

PS&#xff1a;有时候你发现用root权限都不能修改某个文件&#xff0c;大部分原因是曾经用chattr命令锁定该文件了。chattr命令的作用很大&#xff0c;其中一些功能是由Linux内核版本来支持的&#xff0c;不过现在生产绝大部分跑的linux系统都是2.6以上内核了。通过chattr命令修…

在C++中用虚函数的作用是什么?为什么要用到虚函数

简单地说&#xff0c;那些被virtual关键字修饰的成员函数&#xff0c;就是虚函数。虚函数的作用&#xff0c;用专业术语来解释就是实现多态性&#xff08;Polymorphism&#xff09;&#xff0c;多态性是将接口与实现进行分离&#xff1b;用形象的语言来解释就是实现以共同的方法…

如何成为一个优秀的高级C++程序员

C这门语言从诞生到今天已经经历了将近30个年头。不可否认&#xff0c;它的学习难度都比其它 语言较高。而它的学习难度&#xff0c;主要来自于它的复杂性。现在C的使用范围比以前已经少了很多&#xff0c;java、C#、python等语言在很多方面已经可以代替 C。但是也有很多地方是其…

cuda学习资源

https://bbs.gpuworld.cn/ https://developer.nvidia.com/cuda-zone http://docs.nvidia.com/cuda/index.html# https://www.cnblogs.com/1024incn/category/695134.html

c++标准库 及 命名空间std

1、命名空间std   C标准中引入命名空间的概念&#xff0c;是为了解决不同模块或者函数库中相同标识符冲突的问题。有了命名空间的概念&#xff0c;标识符就被限制在特定的范围(函数)内&#xff0c;不会引起命名冲突。最典型的例子就是std命名空间&#xff0c;C标准库中所有标…

Cloudera-Manager 与 原生集群 免密登录问题

原生集群启动方式&#xff1a; 在Hadoop启动以后&#xff0c;namenode是通过SSH来启动和停止各个节点上的各种守护进程的&#xff0c;这就需要在节点之间执行指令的时候是不需要输入密码的方式&#xff0c;故我们需要配置SSH使用无密码公钥认证的方式。 Cloudera-Manager启动方…

相机标定原理和opencv代码解析

1.单目标定 单应矩阵 设三维空间点的齐次坐标,对应的图像坐标为 他们满足一下关系&#xff1a; s为尺度因子&#xff0c;K为内参矩阵 R和T旋转平移矩阵统称为外参 假设我们提供K个棋盘图像&#xff0c;每个棋盘有N个角点&#xff0c;于是我们拥有2KN个约束方程。与此同时&am…

C++:构造函数和析构函数能否为虚函数

C&#xff1a;构造函数和析构函数能否为虚函数&#xff1f; 简单回答是&#xff1a;构造函数不能为虚函数&#xff0c;而析构函数可以且常常是虚函数。 &#xff08;1&#xff09; 构造函数不能为虚函数 让我们来看看大牛C之父 Bjarne Stroustrup 在《The C Programming Langua…

Linux平台下C++编程

关于Linux下开发应该具备哪些基础知识&#xff0c;应该如何进阶。除了C的基本语法知识外&#xff0c;应该学习哪些内容&#xff0c;更有助于工作和成长。同事给出了他自己的学习思路。具体如下&#xff1a; 1、STL STL作为已经被发明过的轮子&#xff0c;使用起来有很多好处&am…

Hive 大小表关联查询异常

异常原因&#xff1a;mr将数据量小的表识别成了大表&#xff0c;数据量大的识别成小表&#xff0c;导致将数据量大的表加入到内存&#xff0c;导致程序异常处理方法&#xff1a; set hive.execution.enginemr; set hive.mapjoin.smalltable.filesize55000000; set hive.auto.co…

cudaMemcpyToSymbol使用

学到了cudaMemcpyToSymbol竟然还有将数据从host拷贝到global的功能&#xff0c;以前只用过这个函数拷贝到constant memory。拷贝方式的不同是由目的内存申请的方式决定的。 申请的是device内存&#xff0c;cudaMemcpyToSymbol拷贝就是从host拷贝到global memory。 申请的是co…

定义一个结构体指针需要分配存储空间?

前言 问题的来源于在学数据结构的时候&#xff0c;C的语法和C语言的语法竟然不一样。 1.首先函数的参数有两种传递方式&#xff0c;一个是值传递&#xff0c;一个是地址传递。当指针作为参数传递的时候&#xff0c;即为地址传递&#xff0c;但C写的时候需要加&引用符号&a…

内核模式和用户模式

2位x86系统&#xff0c;每个进程的空间是4GB&#xff0c;即地址0x00000000到0xFFFFFFFF。 为了高效调用&#xff0c;Windows会把操作系统的内核数据和代码映射的系统中所有进程的进程空间中。因此4GB空间被划分为两个区域&#xff1a;用户空间和系统空间&#xff0c;默认大小为…

HUE 提交Schedule 时区问题

1.配置如下&#xff0c;每天定时 14:02 启动 2.运行后&#xff0c;任务状态提示&#xff0c;时间变成了06:02:00 3.修改HUE的时区配置 修改后 3.重启 4.然后执行发现&#xff0c;还是不起作用&#xff0c;后排查了一下oozie问题&#xff0c;发现hue的时区配置对oozie无法生效…

高斯日记

大数学家高斯有个好习惯&#xff1a;无论如何都要记日记。 他的日记有个与众不同的地方&#xff0c;他从不注明年月日&#xff0c;而是用一个整数代替&#xff0c;比如&#xff1a;4210 后来人们知道&#xff0c;那个整数就是日期&#xff0c;它表示那一天是高斯出生后的第几…

线程同步之条件变量

一、引言 假设有一个任务&#xff0c;由我和张三共同完成。张三把寄来的文稿初步审阅后放入一个队列&#xff0c;我负责将这个队列中的文稿进行审批&#xff0c;决定刊登与否。张三审阅一份文稿需要15分钟&#xff0c;我处理一个文稿需要2分钟。 如果将张三和我看作两个线程&am…

cuda的global memory介绍

CUDA Memory Model 对于程序员来说&#xff0c;memory可以分为下面两类&#xff1a; Programmable&#xff1a;我们可以灵活操作的部分。Non-programmable&#xff1a;不能操作&#xff0c;由一套自动机制来达到很好的性能。 在CPU的存储结构中&#xff0c;L1和L2 cache都是n…

串口通信参数

串口是一种非常通用的设备通信的协议&#xff08;不要与通用串行总线Universal Serial Bus(USB)混淆&#xff09;。大多数计算机包含两个基于RS232的串口。串口同时也是仪器仪表设备通用的通信协议&#xff1b;很多GPIB兼容的设备也带有RS-232口。同时&#xff0c;串口通信协议…

马虎的算式

小明是个急性子&#xff0c;上小学的时候经常把老师写在黑板上的题目抄错了。 有一次&#xff0c;老师出的题目是&#xff1a;36 x 495 ? 他却给抄成了&#xff1a;396 x 45 ? 但结果却很戏剧性&#xff0c;他的答案竟然是对的&#xff01;&#xff01; 因为 36 * 495 …