博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hive入门(一)
阅读量:4556 次
发布时间:2019-06-08

本文共 2521 字,大约阅读时间需要 8 分钟。

1 Hive中的数据定义

1.1 存储与创建

Hive会为每个数据库创建一个目录。数据库中的表以子目录的形式存储。

有一个例外是default中的表,因为这个库本身没有目录。

数据库的顶级目录是hive.metastore.warehuse.dir所指定的目录。

假设用户使用的是默认配置/user/hive/warehuse,那么我们创建数据库test时,会对应创建一个目录/user/hive/warehuse/test.db(数据库目录是以.db结尾的)。

 可以通过如下命令进行修改:

 
hive> CREATE DATABASE test LOCATION '/mylocation';

 可以命令可以查看该数据库的描述:

 
hive> DESCRIBE DATABASE test;

 

1.2 创建表

hive创建表的语句遵从SQL语句习惯,但是hive有一些扩展:

 
hive> CREATE TABLE [IF NOT EXISTS] [db_name.]table_name
  > [(col_name data_type [COMMENT col_comment], ...)] [
  > COMMENT table_comment]
  > [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
  > [LOCATION hdfs_path]

1)PARTITIONED 表示的是分区,不同的分区会以文件夹的形式存在,在查询的时候指定分区查询将会大大加快查询的时间

2)LOCATION指的是在HDFS上存储的位置

当然这里列举的是常用的选项。

 

1.3 外部表与内部表

1)创建表时:创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径, 不对数据的位置做任何改变。

2)删除表时:在删除表的时候,内部表的元数据和数据会被一起删除, 而外部表只删除元数据,不删除数据。这样外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据。

 

2 Hive中的数据操作

2.1 Hive四种数据导入方式

1)从本地文件系统中导入数据到Hive表

先在Hive里面创建好表:

hive> create table lac    > (id int, name string,    > age int, tel string)    > ROW FORMAT DELIMITED    > FIELDS TERMINATED BY '\t'    > STORED AS TEXTFILE;

本地文件系统里面有个/home/xinniu/lac.txt文件,内容如下:

1       wyp     25      131888888888882       test    30      138888888888883       zs      34      899314121

lac.txt文件中的数据列之间是使用\t分割的,可以通过下面的语句将这个文件里面的数据导入到lac表里面,操作如下:

hive> load data local inpath 'lac.txt' into table lac;

这样就将lac.txt里面的内容导入到wyp表里面去了,可以到lac表的数据目录下查看,如下命令

hive> dfs -ls /user/hive/warehouse/lac;

注意:

和我们熟悉的关系型数据库不一样,Hive现在还不支持在insert语句里面直接给出一组记录的文字形式,也就是说,Hive并不支持INSERT INTO …. VALUES形式的语句。

 

2)HDFS上导入数据到Hive表

假设有下面这个文件/home/xinniu/lac.txt,文件内容和上面一样,具体的操作如下:

bin/hadoop fs -cat /home/xinniu/lac.txt

 

3)从别的表中查询出相应的数据并导入到Hive表中

假设Hive中有test表,其建表语句如下所示

hive> create table test(    > id int, name string    > ,tel string)    > partitioned by    > (age int)    > ROW FORMAT DELIMITED    > FIELDS TERMINATED BY '\t'    > STORED AS TEXTFILE;

 下面语句就是将lac表中的查询结果并插入到test表中:

hive> insert into table test    > partition (age='25')    > select id, name, tel    > from lac;

 

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

hive> create table test2    > as    > select id, name, tel    > from lac;

 

2.2 导出数据

1)导出到本地文件系统

hive> insert overwrite local directory '/home/xinniu/lac'    > select * from lac;

 

2)导出到HDFS中

hive> insert overwrite directory '/home/xinniu/hdfs'    > select * from lac;

注意,和导出文件到本地文件系统的HQL少一个local,数据的存放路径就不一样了。

 

3)导出到Hive的另一个表中

hive> insert into table test    > partition (age='25')    > select id, name, tel    > from lac;

 

转载于:https://www.cnblogs.com/zcjcsl/p/7841212.html

你可能感兴趣的文章
CSS定位深入理解 完全掌握CSS定位 相对定位和绝对定位
查看>>
网络体系结构
查看>>
练习4.13、4.14、4.15、4.16
查看>>
SAP库龄表
查看>>
PhantomJS 基础及示例 (转)
查看>>
20175316盛茂淞 2018-2019-2 《Java程序设计》第3周学习总结
查看>>
zookeeper安装
查看>>
js清空页面控件值
查看>>
Appium使用Python运行appium测试的实例
查看>>
django request bug
查看>>
二叉树_非递归先中后序_递归非递归求深度
查看>>
20181227 新的目标
查看>>
HDFS写流程
查看>>
生产环境服务器环境搭建+ 项目发布
查看>>
js按条件分类json数组,并合计同组数据(一维转换为二维)
查看>>
Exp6 信息搜集与漏洞扫描
查看>>
redis4安装
查看>>
使用命令wsimport构建WebService客户端[转]
查看>>
第八遍:链接详解
查看>>
Qt5.5 使用smtp发邮件的各种坑
查看>>