5.1 向管理表中装载数据  
Hive 没有行级别的数据插入更新和删除操作,那么往表中装载数据的唯一途径就是使用一种“大量”的数据装载操作,或者通过其他方式仅仅将文件写入到正确的目录下;
 
LOAD DATA LOCAL INPATH '${env:HOME}/califonia-employees'
OVERWRITE INOT TABLE employees  
PARTITON (country=''US, state='CA') ;  
向管理表中装载数据,如果目录不存在的话, overwrite 会先创建分区目录,然后再将数据拷贝到该目录 ;如果是非分区表则应该省略 partition 后面的语句;
通常情况下指定的路径应该是一个目录,而不是一个单个独立的文件,Hive 会将所有的文件都拷贝到这个目录中;
INPATH 子句中使用的文件路径还有一个限制,就是这个路径下可能 包含任何文件夹;
 
注意:如果使用了 LOCAL 关键字,这个路径应该为本地文件系统路径,数据将会被拷贝骊目标位置,如果省略掉 LOCAL关键字,那这个路径应该是分布式文件系统中的路径,这咱情况数据是从这个路径转移到目标位置;
LOAD DATA LOCAL 。。。 拷贝本地数据到位于分布式文件系统上的目标位置;
LOAD DATA 。。。转移数据到目标位置;
 
注意:Hive 要求源文件和目标文件以及目录应该在同个文件系统中,用户不可以使用 LOCAL DATA 语句将数据从一个集群的 HDFS 中转移 到另一个集群的 HDFS 中;
指定全路径会具有更好的鲁棒性,但也同样支持相驿路径,当使用本地模式执行时,相对路径相对的是当 Hive CLI 启动时用户的工作目录,对于分布式或者伪分布式模式,这个路径解读为相对于分布式文件系统中用户的根目录,该目录在 HDFS 和 MapRFS中默认为 /user/$USER;
如果用户指定了 OVERWRITE 关键字,那么目标文件夹中之前存在的数据将会被先删除掉,如果没有,仅仅会把新增的文件增加到目标文件夹中而不会删除之前的数据。如果目标文件夹中的文件已经存在和装载的文件同名的文件,那么旧的同名文件将会被覆盖重写;
 
如果目录是分区表,那么需要使用 PARTITON 子句,而且用户还必须为每个分区的键指定一个值 ;
Hive 并不会验证用户装载的数据和表的模式是否匹配,但会验证文件格式是否和表结构定义的一致;(如存储格式为 SEQUENCEFILE V,那么装载进去的格式也必须为这种)

5.2 通过查询语句向表中插入数据
insert overwrite table employees partition(country='us',state='or')
select * from staged_employees se where se.cnty='us' and se.st='or'
OVERWRITE 关键字会将以前分区之中的内容覆盖掉,如果改成 INOT 则会以追加的方式写入数据;(0.8.0以后的版本才有)
 
FROM staged_employees se
INSERT OVERWRITE TABLE employees
    PATRITION(country='us',state='or')
    SELECT * WHERE se.cnty='us' AND se.st='or'
INSERT OVERWRITE TABLE employees
    PATRITION(country='us',state='ca')
    SELECT * WHERE se.cnty='us' AND se.st='ca'
INSERT OVERWRITE TABLE employees
    PATRITION(country='us',state='il')
    SELECT * WHERE se.cnty='us' AND se.st='il'
以上语句可以只扫描一次表 staged_employees 就可以做多次插入其他表
 
动态分区插入
INSERT OVERWRITE TABLE employees
PARTITION(country,state)
SELECT ...,se.cnty,  se.st
FROM staged_employees se;
Hive 会根据 SELECT 语句中最后2列来确定分区字段 counrty 和 state 的值
 
INSERT OVERWRITE TABLE employees PARTITION (country='us',state)
SELECT ..., se.cnty,se.st FROM staged_employees se WHERE se.cnty='us'
静态+动态分区联合使用
【注意:静态分区必须出现在动态分区之前,而且动态分区默认情况下是没有开启的,开启后默认是以“严格”模式执行的,在这种模式下要求至少有一列分区字段是静态的,这有助于阻止因设计错误导致查询产生大量的分区】
 
动态分区属性 【可以用 set 属性=值  来进行设置】 属性    默认值     说明 
hive.exec.dynamic.partition    false     设置成 true 表示开启动态分区功能
hive.exec.dynamic.partition.mode    strict    设置成 nonstrict 表示允许所有分区都是动态的
hive.exec.max.dynamic.partitions.pernode    100    每个 mapper 或 reducer 可以创建的最大动态分区个数
hive.exec.max.dynamic.partitions    +1000    一个动态分区创建语句可以创建的最大动态分区个数,如果超过出报错
hive.exec.max.created.files     100000    全局可以最大文件个数,如果超过会报错
 
5.3 单个查询语句中创建表并加载数据 【本功能不能使用于外部表】
CREATE TABLE ca_employees AS SELECT name,salary,address FROM employees WHERE se.state='ca' ;
 
5.4 导出数据
hadoop fs -cp source_path target_path 直接用 hadopp 命令导出语句
 
INSERT OVERWRITE LOCAL DIRECTORY '/tmp/ca_employees'    --最后面的路径也可以写成 URL 路径(hdfs://master-server/tmp/ca_employees)
SELECT name, salary, address FROM employees WHERE se.state ='ca';  一个或多个文件将会被保存到 /tmp/ca_employees 目录下,不管Hive 表中数据实际是怎么存储的,Hive 会将所有的字段序列化成字符串写入到文件中,Hive 会使用和 Hive 内部存储的表相同的编码方式来生成输出文件。
hive> ! ls /tmp/ca_employees;  在hive里执行bash命令查看文件
 
用户也可以和向表中插入数据一样,通过以下方式指定多个输出文件夹目录:
FROM staged_employees se
INSERT OVERWRITE directory '/tmp/or_employees'
    PATRITION(country='us',state='or')
    SELECT * WHERE se.cnty='us' AND se.st='or'
INSERT OVERWRITE directory '/tmp/ca_employees'
    PATRITION(country='us',state='ca')
    SELECT * WHERE se.cnty='us' AND se.st='ca'
INSERT OVERWRITE directory '/tmp/il_employees'
    PATRITION(country='us',state='il')
    SELECT * WHERE se.cnty='us' AND se.st='il'

Hive[5] HiveQL 数据操作的更多相关文章

  1. Hive(6)-DML数据操作

    一. 数据导入 1. 语法 load data [local] inpath 'path' [overwrite] into table table_name [partition (partcol1 ...

  2. 使用Hive或Impala执行SQL语句,对存储在HBase中的数据操作

    CSSDesk body { background-color: #2574b0; } /*! zybuluo */ article,aside,details,figcaption,figure,f ...

  3. hive(3)HiveQL数据定义

    HiveQL与传统SQL区别 HiveQL是Hive的查询语言.与mysql的语言最接近,但还是存在于差异性,表现在:Hive不支持行级插入操作.更新操作和删除操作,不支持事物. 基本语法 数据库操作 ...

  4. hive数据操作

    mdl是数据操作类的语言,包括向数据表加载文件,写查询结果等操作 hive有四种导入数据的方式 >从本地加载数据 LOAD DATA LOCAL INPATH './examples/files ...

  5. 使用Hive或Impala执行SQL语句,对存储在Elasticsearch中的数据操作(二)

    CSSDesk body { background-color: #2574b0; } /*! zybuluo */ article,aside,details,figcaption,figure,f ...

  6. 使用Hive或Impala执行SQL语句,对存储在Elasticsearch中的数据操作

    http://www.cnblogs.com/wgp13x/p/4934521.html 内容一样,样式好的版本. 使用Hive或Impala执行SQL语句,对存储在Elasticsearch中的数据 ...

  7. HIVE之 DDL 数据定义 & DML数据操作

    DDL数据库定义 创建数据库 1)创建一个数据库,数据库在 HDFS 上的默认存储路径是/user/hive/warehouse/*.db. hive (default)> create dat ...

  8. hive从入门到放弃(三)——DML数据操作

    上一篇给大家介绍了 hive 的 DDL 数据定义语言,这篇来介绍一下 DML 数据操作语言. 没看过的可以点击跳转阅读: hive从入门到放弃(一)--初识hive hive从入门到放弃(二)--D ...

  9. Hive几种数据导出方式

    Hive几种数据导出方式 今天我们再谈谈Hive中的几种不同的数据导出方式.可以根据导出的地方不一样,将这些方式分为三种: (1).导出到本地文件系统: (2).导出到HDFS中: (3).导出到Hi ...

随机推荐

  1. 实现JavaScript的组成----BOM和DOM

    我们知道,一个完整的JavaScript的实现,需要由三部分组成:ECMAScript(核心),BOM(浏览器对象模型),DOM(文档对象模型). 今天主要学习BOM和DOM. BOM: BOM提供了 ...

  2. 仿UC浏览器图片加载进度条

    前几天用UC浏览器看新闻(无意中给UC打了广告),看到它的图片加载进度条,正好最近有时间,所以就自己写了一个. 效果图如下 进度条的底色和填充颜色都可以调整. 首先中间的笑脸作为一个整体,其实现代码如 ...

  3. Windows 平台下Git 服务器搭建

    由于项目中一直在使用git作为版本管理,自己对git的理解.使用都还不是怎么的熟悉,所以准备深入了解一下git及一些常用命令的使用,于是干脆把服务端架上,通过自己的PC作为服务端同时作为客户端的角色进 ...

  4. 【原】CentOS7上安装Xwiki8.2.1

    环境 CentOS 7内核版本为  3.10.0-327.el7.x86_64JDK8(jdk1.8.0_101)+Tomcat7.0.67+MySQL5.6.32XWIKI 8.2.1 xwiki- ...

  5. PHP正则提取或替换img标记属性实现文章预览

    今天在想如何实现文章预览时,如果文章里面包含照片,那么就选取第一张照片作为预览图,如果没有照片,则截取文章的头150个字作为预览文字,但是因为保存在数据库的文章都是以富文本的形式,没办法直接提取,在网 ...

  6. CENTOS WDCP 安装及安全设置教程

    1.WDCP 安装 源码安装 (ssh登录服务器,执行如下操作即可,需root用户身份安装) wget  http://dl.wdlinux.cn:5180/lanmp_laster.tar.gz t ...

  7. Android编程心得-ListView的Item高亮显示的办法

    在我们使用ListView的时候,经常会遇到某一项(Item)需要高亮显示的情况,如下图,有人说当我们点击子项的时候会变亮,但有时候业务逻辑需要让ITEM根据条件自动变亮,下面我来介绍一下我自己的解决 ...

  8. 【数论-数位统计】UVa 11076 - Add Again

    Add AgainInput: Standard Input Output: Standard Output Summation of sequence of integers is always a ...

  9. Android布局中的空格以及占一个汉字宽度的空格的实现

    在Android布局中进行使用到空格,以便实现文字的对齐.那么在Android中如何表示一个空格呢? 空格:  窄空格:  一个汉字宽度的空格:   [用两个空格(  )占一个汉字的宽度时,两个空格比 ...

  10. UEditor上传图片等附件都出现红叉

    我的环境: vs2010+netframework3.5+ueditor1_3_5-utf8-net 问题:UEditor上传图片等附件都出现红叉 尝试了网络上各种方法都不对, 后来只能自己看下ima ...