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      13188888888888
2 test 30 13888888888888
3 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='')
> 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='')
> select id, name, tel
> from lac;

Hive入门(一)的更多相关文章

  1. 4 weekend110的hive入门

    查看企业公认的最新稳定版本:       https://archive.apache.org/dist/  Hive和HBase都很重要,当然啦,各自也有自己的替代品. 在公司里,SQL有局限,大部 ...

  2. hadoop笔记之Hive入门(Hive的体系结构)

    Hive入门(二) Hive入门(二) Hive的体系结构 ○ Hive的元数据 Hive将元数据存储在数据库中(metastore),支持mysql.derby.oracle等数据库,Hive默认是 ...

  3. hadoop笔记之Hive入门(什么是Hive)

    Hive入门(一) Hive入门(一) 什么是Hive? Hive是个数据仓库,数据仓库就是数据库,但又与一般意义上的数据库有点区别 实际上,Hive是构建在hadoop HDFS上的一个数据仓库. ...

  4. Hive入门学习随笔(一)

    Hive入门学习随笔(一) ===什么是Hive? 它可以来保存我们的数据,Hive的数据仓库与传统意义上的数据仓库还有区别. Hive跟传统方式是不一样的,Hive是建立在Hadoop HDFS基础 ...

  5. 第1章 Hive入门

    第1章 Hive入门 1.1 什么是Hive Hive:由Facebook开源用于解决海量结构化日志的数据统计. Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提 ...

  6. hive入门(一)、什么是hive

    1.Hive 基本概念 Hive是基于Hadoop的一个 数据仓库工具,可以将结构化的数据文件映射成一张表,并提供类SQL查询功能: Hive是构建在Hadoop 之上的数据仓库: 使用HQL作为查询 ...

  7. Hive入门学习--HIve简介

    现在想要应聘大数据分析或者数据挖掘岗位,很多都需要会使用Hive,Mapreduce,Hadoop等这些大数据分析技术.为了充实自己就先从简单的Hive开始吧.接下来的几篇文章是记录我如何入门学习Hi ...

  8. Hive Tutorial(上)(Hive 入门指导)

    用户指导 Hive 指导 Hive指导 概念 Hive是什么 Hive不是什么 获得和开始 数据单元 类型系统 内置操作符和方法 语言性能 用法和例子(在<下>里面) 概念 Hive是什么 ...

  9. 《OD大数据实战》Hive入门实例

    官方参考文档:https://cwiki.apache.org/confluence/display/Hive/LanguageManual 一.命令行和客户端 1. 命令窗口 1)进入命令窗口 hi ...

  10. Hive入门之UDFS函数

    一.UDFS函数介绍 1. 基本UDF (1)SHOWFUNCTIONS:这个用来熟悉未知函数. DESCRIBE FUNCTION<function_name>; (2)A IS NUL ...

随机推荐

  1. WPF绑定到linq表达式

    using ClassLibrary;using System;using System.Collections.Generic;using System.Collections.ObjectMode ...

  2. WPF/Silverlight 页面绑定Model验证机制升级版

    关于WPF/Silverlight的数据验证,想必大家都不陌生了. 各大牛的博客里都不泛对这方面讨论的文章. 个人比较赞赏 JV9的“Silverlight实例教程”里的Validation数据验证. ...

  3. redis zincrby zadd 遇到的问题

    在维护代理池时 报错1: zincrby(REDIS_KEY,proxy,-1)redis.exceptions.ResponseError: value is not a valid float 查 ...

  4. 在2005年,Unicode 的第十万个字符被采纳且认可成为标准之一(超过这65535范围的Unicode字符,则需要使用一些诡异的技巧来实现)

    在计算机科学领域中,Unicode(统一码.万国码.单一码.标准万国码)是业界的一种标准,它可以使电脑得以体现世界上数十种文字的系统.Unicode 是基于通用字符集(Universal Charac ...

  5. Win8Metro(C#)数字图像处理--2.21二值图像腐蚀

    原文:Win8Metro(C#)数字图像处理--2.21二值图像腐蚀  [函数名称] 二值图像腐蚀函数CorrosionProcess(WriteableBitmap src) [算法说明] 二值 ...

  6. TP5.0中使用trace调试

    1.在项目 的配置文件config.php 配置, 2.在程序中使用trace: 3.在浏览器网页上打开 得到如下图所示:点击 “用户变量”,即可查看使用trace输出的变量 或者我们使用 trace ...

  7. 在asp.net 中web.config配置错误页

    每当用户访问错误页面时,会出现不友好的错误页面,所以为了防止这种不友好,我们在web.config中的<system.web>节点下配置 <customErrors>,在出现比 ...

  8. C#WebBroswer控件的使用

    在WebBroswer中可以嵌入一个网页文件,通过Url属性绑定. URI,统一资源标识符,用来唯一的标识一个资源. URL,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源. 它包 ...

  9. CKEditor 4.5 beta 发布,可视化 HTML 编辑器

    分享 <关于我> 分享  [中文纪录片]互联网时代                 http://pan.baidu.com/s/1qWkJfcS 分享 <HTML开发MacOSAp ...

  10. windows qt 使用c++ posix接口编写多线程程序(真神奇)good

    一.多线程是多任务处理的一种特殊形式,多任务处理允许让电脑同时运行两个或两个以上的程序.一般情况下,两种类型的多任务处理:基于进程和基于线程.基于进程的多任务处理是程序的并发执行.基于线程的多任务处理 ...