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. Git 内部原理--初探 .git

    说到Git大家应该都非常熟悉,几乎每天都会用到它.在日常使用过程中,我们貌似并不需要关注其内部的原理,只需要记住那几个常用的命令,就可以说自己是会Git的人了.可是,事实真的是这样子的吗?今天我们就来 ...

  2. 2-17-MySQL读写分离-mysql-proxy

        实验环境: mysql-proxy服务端:        xuegod1              IP:192.168.10.31 mysql服务器(主,负责写)服务端:xuegod2    ...

  3. [Windows][VC]开机自动启动程序的几种方法

    原文:[Windows][VC]开机自动启动程序的几种方法 很多监控软件要求软件能够在系统重新启动后不用用户去点击图标启动项目,而是直接能够启动运行,方法是写注册表Software\\Microsof ...

  4. C++得到当前进程所占用的内存

    原文地址:C++得到当前进程所占用的内存作者:雪碧狗 使用SDK的PSAPI (Process Status Helper)中的BOOL GetProcessMemoryInfo(  HANDLE P ...

  5. QT在release版本产生pdb文件

    ##环境说明 QtCreator QtLibrary 编译器 Qt Creator 2.7.0 4.8.4-msvc msvc9.0(VS2008) ##背景说明 >项目中需要对发布版本追踪崩溃 ...

  6. Qt 不规则窗体 – 鼠标点击穿透(Linux也可以,有对x11的配置的方法)

    之前写过如何用 Qt 现成的方法写出无边框半透明的不规则窗体:<Qt 不规则窗体 – 无边框半透明> 其实有一个很特殊的窗体属性一直以来都伴随着不规则窗体出现,这就是本文要介绍的鼠标点击穿 ...

  7. PHP发送邮件功能实现(使用163邮箱)

    第一步 我用的是163邮箱发送邮件,做一个尝试,在尝试之前,需要要开启163邮箱的授权码如图所示,请记住您的授权码,将在之后的步骤中用到 第二步 需要下载一个类PHPMailer,我有这个资源已经上传 ...

  8. 窗体图片背景(两种方法:设置Brush.Bitmap指向图片,别的控件也可以这样)

    var   Bitmap: TBitmap; procedure TForm1.FormCreate(Sender: TObject); begin   Bitmap := TBitmap.Creat ...

  9. javascript 实现ajax

    AJAX 英文名称 Asynchronous JavaScript and XML即异步的 JavaScript 和 XML AJAX 是与服务器交换数据并更新部分网页一门无刷新技术构建自己的ajax ...

  10. 学习Java,值得你留意的问题(1)更名为《学习Java,容易被你忽略的小细节(1)》

    记得大二快要结束的时候,有个女孩子突然问我“你会Java吗,帮我做大作业好吗?” 实话说,那个女孩真的很漂亮,我当时也非常想帮她.但是我从来没有接触过Java,让我在短短的几天内完成Java程序设计课 ...