hive表的数据源有四种:

hbase

hdfs

本地

其他hive表

而hive表本身有两种:

内部表和外部表。

而hbase的数据在hive中,可以建立对应的外部表(参看hive和hbase整合)

内部表和外部表

区别:删除时,内部表删除hadoop上的数据;而外部表不删,其数据在外部存储,hive表只是查看数据的形式,看时从外部读入数据:

内部表:CREATETABLE tab(column1 STRING, column2 STRING);

外部表:用EXTERNAL 关键字,且必须在表结尾指定如下参数

CREATE EXTERNAL TABLE  tab

(column1 STRING,

column2 STRING

)

ROW FORMAT DELIMITED FIELDS TERMINATED BY'\t'

stored as textfile

location 'hdfs://namenode/tmp/lmj/tab/';

分隔符的指定

有两种方式

(1)DELIMITED方式:

ROW FORMAT DELIMITED

[FIELDS TERMINATED BY char]

[COLLECTION ITEMS TERMINATED BY char]

[MAP KEYS TERMINATED BY char]

[LINES TERMINATED BY char]

(2)SERDE方式:

SERDE serde_name [WITH SERDEPROPERTIES(property_name=property_value, property_name=property_value, ...)]

其中,[ROW FORMAT DELIMITED]关键字,是设置建表时加载数据所支持的列分隔符;

如果没有指定 ROW FORMAT 或者 ROW FORMAT DELIMITED,则会自动使用自带的 SerDe。

另外,建表时,用户还要为表指定列,同时也会指定自定义的SerDe,Hive通过SerDe确定表的具体的列数据。

举例如下:

内部表

create table user_info (user_id int, cid string,ckid string, username string)

        row format delimited

        fields terminated by '\t'

        lines terminated by '\n';

外部表

        CREATE EXTERNAL TABLE test_1(id INT, name STRING, citySTRING)

        SORTED AS TEXTFILE

        ROW FORMAT DELIMITED

        FIELDS TERMINATED BY'\t’

        LOCATION ‘hdfs://http://www.cnblogs.com/..’

文件存储格式

如上,用关键字[STORED AS file_format]设置加载数据的文件类型,默认采用[STORED AS TEXTFILE]。主要格式有

STORED AS

SEQUENCEFILE

| TEXTFILE

|RCFILE

|INPUTFORMATinput_format_classname

OUTPUTFORMAT            output_format_classname

其中用STORED AS TEXTFILE 存储纯文本文件。如果数据需要压缩,使用 STORED AS SEQUENCE 。Hive本身支持的文件格式只有:Text File,Sequence File。

数据导入与导出:

一.数据导入:

1.1导入内部表
(1)本地或者hdfs导入:
LOAD DATA[LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLEtablename [PARTITION(partcol1=val1, partcol2=val2 ...)]

        区别是看有无关键字local,有local表示从本地路径导入,无local表示从hadoop(hbase或hdfs)导入。
导入的前提是目标表必须存在。如果无表要先建表,再导入:
CREATE TABLE myword(idSTRING, counts INT, dt STRING) row formatdelimitedfields terminated by ‘\t’;
(2)用hive表的select结果导入

INSERT OVERWRITE TABLE T1 SELECT * FROMT2;

其中,INSERT OVERWRITE TABLE表示覆盖,删除原数据;

而INSERT into TABLE
表示增量的插入,不删除原数据。

另外,

删除表:drop table if exists T1;

清空表:truncate table T1;

1.2 导入外部表:
建表时直接指定数据源(不能指定本地文件,必须是hdfs路径):

(1)Hdfs上数据导入hive:

	CREATE EXTERNAL TABLE wizad_mdm_dev_lmj_edition_20141120 (
cookie_id STRING,
guid STRING
)      
	 ROWFORMAT DELIMITED
         FIELDSTERMINATEDBY ','
         LINESTERMINATEDBY '\n'
         storedas textfile
         LOCATION'/user/wizad/test/lmj/edition_compare/';

其中,也可以用全路径location'hdfs://namenode/user/wizad/test/lmj/edition_compare/';

(2)Hbase上数据导入hive表:

先指定参数

SET mapred.job.queue.name=queue3;

SEThbase.client.scanner.caching=5000;

SEThbase.zookeeper.quorum=datanode06,datanode07,datanode08;

SET zookeeper.znode.parent=/hbase;

有map类型结构,建表时需要指明:

CREATE EXTERNAL TABLE lxw2 (

key string,

value map<STRING,STRING>

)

STORED BY'org.apache.hadoop.hive.hbase.HBaseStorageHandler'

WITH SERDEPROPERTIES("hbase.columns.mapping" =":key,fixeddim:")

TBLPROPERTIES("hbase.table.name"="wizad_mdm_task_geely_hk_20141014");

查询结果

SELECT KEY,dim_name,dim_value FROM lxw2

LATERAL VIEW explode(VALUE) myTable1AS dim_name,dim_value

--WHERE KEY = '000000054153796

这里,读取Hbase库的数据,可能会导入失败,因为scan时间过大,可以设置长时间

sethbase.regionserver.lease.period=180000;

hbase与本地表jion时,可能出现启动后,无限等待。原因:

二.数据导出:

三种导出:

(1)导出到其他hive表:

覆盖:INSERT OVERWRITE TABLE t1 select * from t2;

不覆盖:INSERT INTO TABLE t1 select * from t2;

注意hive不支持 子查询结果直接建表,如 create table t1 as select * from t2; 在hive中是错误的

(2)导出到本地,hdfs(有无local):

INSERT OVERWRITE [LOCAL]DIRECTORY directory1 select_statement1

这里注意:

导出本地时可以指定列分隔符,

而导出到hdfs上不可以使用hive默认\001(^A)

导入到hdfs上不能指定列的分隔符:

使用语句ROW FORMAT DELIMITEDFIELDS TERMINATED BY ',' 会报错,不能识别。

代码如

INSERT OVERWRITE DIRECTORY'/user/wizad/tmp/mytest'

select * from wizad_mdm_dev_lmj_edition_insterest

因为hive导出到hdfs上,默认使用^A作为列分隔符,其对应着001。官方文档:Data
written to the filesystem is serialized as text with columns separated by ^A
。(所以,python中用line.split('\x01')或者line.split('\001')切分。)

但这样的数据在pig中无法读入,用'\001'或者'\\001'或者'^A'都无法读入。

解决办法:作为一个列整体读入后,在用STRSPLIT分隔按'\\001'(使用'^A'无效),可以返回一个元组类似((a,b)),pig代码如下

%default interestFlie/user/wizad/tmp/mytest/*

--无效interest_data =LOAD '$interestFlie' USING PigStorage('\\001')

--无效interest_data =LOAD '$interestFlie' USING PigStorage('^A')

interest_data = LOAD '$interestFlie'

AS(cookie_id:chararray

--  guid:chararray,

--  dimkey :chararray,

--  dimvalue:chararray

);

test2 = foreach interest_data generateSTRSPLIT(cookie_id,'\\001');

DUMP res;

describe res;

结果:result结构:{(null)}

((B2BEF56E09EC115456E221,352751019523267,interest_11,161))

((B2BEF56E09EC115456E221,352751019523267,interest_13,102))

((EC15860E09D5EA545700E9,352751019523267,interest_11,161))

((EC15860E09D5EA545700E9,352751019523267,interest_13,102))

((daca0487-5424ef1a0dc3fa-11535481,352751019523267,interest_4,61))

((daca0487-5424ef1a0dc3fa-11535481,352751019523267,interest_21,21))

((daca0487-5424ef1a0dc3fa-11535481,352751019523267,interest_11,161))

((daca0487-5424ef1a0dc3fa-11535481,352751019523267,interest_13,102))

指定导出全路径也不行。

INSERT OVERWRITE DIRECTORY'hdfs://namenode/user/wizad/tmp/interest2/'

ROW FORMAT DELIMITED FIELDS TERMINATED BY','

select * fromwizad_mdm_dev_lmj_edition_insterest

2导出到本地,可以指定列分隔符:

INSERT OVERWRITE local DIRECTORY'/home/wizad/lmj/inserest2'

ROW FORMAT DELIMITED FIELDS TERMINATED BY','

select * fromwizad_mdm_dev_lmj_edition_insterest

导入到本地可直接用-e命令,默认使用\t分隔:

hive -e 'use wizad;

select * fromwizad_mdm_dev_lmj_edition_insterest;'>> mytest

查询结果使用\t作为列分隔符,mytest中

3531 3631 3730 3631 3931 3635 34360969  51617061916546.i

vim中16进制(%!xxd)两位对应一个字符,看到"."对应的09,在asii码表中09,就是tab制表符

也可以用hive -f:

[wyp@master ~/local]$ cat wyp.sql

select * from wyp

[wyp@master ~/local]$ hive -f wyp.sql>> local/wyp2.txt

hive的数据导入与数据导出:(本地,云hdfs,hbase),列分隔符的设置,以及hdfs上传给pig如何处理的更多相关文章

  1. C#变成数据导入Excel和导出Excel

    excel 基础 •整个excel 表格叫工作表:workbook:工作表包含的叫页:sheet:行:row:单元格:cell. •excel 中的电话号码问题,看起来像数字的字符串以半角单引号开头就 ...

  2. 读取本地文件理解FileReader对象的方法和事件以及上传按钮的美化。

    一.FileReader对象 用来把文件读入内存,并且读取文件中的数据.FileReader对象提供了异步API,使用该API可以在浏览器主线程中异步访问文件系统,读取文件中的数据. 浏览器支持情况, ...

  3. 利用cropper插件裁剪本地图片,然后将裁剪过后的base64图片上传至七牛云空间

    现在做的项目需要做一些图片处理,由于时间赶急,之前我便没有处理图片,直接将图片放在input[type=file]里面,以文件的形式提交给后台,这样做简直就是最低级的做法,之后各种问题便出来了,人物头 ...

  4. devexpress 数据导入(gridcontrol 导出 csv)

    // 1.gridcontrol 导出 csv: DataTable dtbNew = new DataTable(); dtbNew.Columns.Add().GetType()); dtbNew ...

  5. Android设置拍照或者上传本地图片

    效果例如以下: 看代码: MainActivity类中: package com.example.ceshidemo; import java.io.ByteArrayOutputStream; im ...

  6. Hive数据导入/导出

    1.1 导入/导出规则 EXPORT 命令导出数据表或分区,与元数据一起输出到指定位置.又可以从这个输出位置移动到不同的Hadoop 或Hive 实例中,并且使用IMPORT 命令导入. 当导出一个分 ...

  7. Oracle导出表数据与导入表数据dmp,以及导入导出时候常见错误

    使用DOS 操作界面导出表数据,导入表数据(需要在数据库所在的服务器上边执行) exp UserName/Password@192.168.0.141/orcl   file=d:\xtables.d ...

  8. Elasticsearchdump 数据导入/导出

    一.安装过程 Elasticsearchdump 仓库地址,详细使用情况 当前工具主要是用来对ES中的数据进行数据导入/导出,以及对数据迁移相关,使用elasticdump工具需要使用到npm,所以需 ...

  9. 关于 Oracle 的数据导入导出及 Sql Loader (sqlldr) 的用法

    在 Oracle 数据库中,我们通常在不同数据库的表间记录进行复制或迁移时会用以下几种方法: 1. A 表的记录导出为一条条分号隔开的 insert 语句,然后执行插入到 B 表中2. 建立数据库间的 ...

随机推荐

  1. SpringMVC mock测试详解

    @RunWith(SpringRunner.class) @SpringBootTest(classes = WebmanagerApplication.class) //配置事务的回滚,对数据库的增 ...

  2. 百钱买百鸡问题Java

    //百钱买百鸡public class baiqianbaiji { static void BQBJ(int m,int n)//m为钱的总数,n为鸡数 { int z; for(int x = 0 ...

  3. 六星经典CSAPP-笔记(7)加载与链接(上)

    六星经典CSAPP-笔记(7)加载与链接 1.对象文件(Object File) 1.1 文件类型 对象文件有三种形式: 可重定位对象文件(Relocatable object file):包含二进制 ...

  4. linux下内存大小、起始地址的解析与修改

    在实际的工作中,由于产品型号的不同,经常需要调整linux所管理的内存的大小,而内核在启动阶段,会两次去解析从uboot传递过来的关于内存的信息,具体如下: 一.解析从uboot传递过来的tag(在p ...

  5. Swift中方法(method)所谓的lazy绑定简介

    我们知道在ruby之类的动态语言中对象方法可以先从类中预先抽取,然后再应用到某个具体对象上.这称为无绑定的method对象,也可以叫做lazy绑定. 下面举个例子: irb(main):004:0&g ...

  6. Android程序员必须掌握的知识点-多进程和多线程

    当某个应用组件启动且该应用没有运行其他任何组件时,Android 系统会使用单个执行线程为应用启动新的 Linux 进程.默认情况下,同一应用的所有组件在相同的进程和线程(称为"主" ...

  7. Unity UGUI图文混排(七) -- 下划线

    之前更新超链接的时候,忘了搭配实现一个下划线的功能,这篇文章就是来补上这一个功能,时间有点长,一方面没有很好的思路,一方面也没多少时间. 先在网上收集了一下下划线的实现操作,一种是在文本下再创建一个文 ...

  8. 软件测试之BUG分析定位概述(QA如何分析定位BUG)

    你是否遇到这样的场景? QA发现问题后找到DEV说: 不好了,你的程序出问题了! DEV(追查半小时之后): 唉,是你们测试环境配置的问题 唉,是你们数据不一致 唉,是你们**程序版本不对 唉,是** ...

  9. 2014 BDTC 参会有感

    中国大数据技术大会(Big Data Technology Conference,BDTC)是目前国内最具影响.规模最大的大数据领域的技术盛会.大会的前身是Hadoop中国云计算大会(Hadoop i ...

  10. OpenCV+OpenGL 双目立体视觉三维重建

    0.绪论 这篇文章主要为了研究双目立体视觉的最终目标--三维重建,系统的介绍了三维重建的整体步骤.双目立体视觉的整体流程包括:图像获取,摄像机标定,特征提取(稠密匹配中这一步可以省略),立体匹配,三维 ...