最近在做一个小任务,将一个CDH平台中Hive的部分数据同步到另一个平台中。毕竟我也刚开始工作,在正式开始做之前,首先进行了一段时间的练习,下面的内容就是练习时写的文档中的内容。如果哪里有错误或者疏漏,希望各位网友能够指出。

第一篇:HDFS的上传与下载:https://www.cnblogs.com/BlackString/p/10552553.html

第二篇:Hive中数据的导入与导出:https://www.cnblogs.com/BlackString/p/10552806.html

第四篇:跨平台传输方案:https://www.cnblogs.com/BlackString/p/10553010.html

Hive分区表数据的上传与导出

1. 前言
​ 经过前两篇的练习,我们练习了文件的上传与下载,以及Hive外部表数据的上传与导出。但是很多时候Hive的数据操作不仅仅是外部表,还有可能是对分区表的操作。接下来,就对分区表的数据操作进行练习。

2. 分区表的文件结构

  1)创建一个分区表,分区字段为country:
    hive> create table tt01(id int, name string) partitioned by(country string);

  2)插入几条新数据:
    hive> insert into tt01 partition(country='CN') values(1,'LS');
    hive> insert into tt01 partition(country='CN') values(2,'ZS');
    hive> insert into tt01 partition(country='US') values(3,'Alice');
    hive> insert into tt01 partition(country='UK') values(4,'Tom');

  3)到hive中查看表中的数据:
    hive> select from tt01;
    1 LS CN
    2 ZS CN
    3 Alice US
    4 Tom UK

4)到HDFS中查看test02.db中,tt01文件夹下的文件:
    [root@DataCenter2 aos_dic]# hadoop fs -ls /user/hive/warehouse/test02.db/tt01
    drwxrwxrwt - root hive 0 2019-03-15 10:50 /user/hive/warehouse/test02.db/tt01/country=CN
    drwxrwxrwt - root hive 0 2019-03-15 10:46 /user/hive/warehouse/test02.db/tt01/country=UK
    drwxrwxrwt - root hive 0 2019-03-15 10:45 /user/hive/warehouse/test02.db/tt01/country=US

  会发现Hive按照分区将数据分别存入了不同的文件夹下。
  进入某一个分区,查看其中的数据:
    [root@DataCenter2 aos_dic]# hadoop fs -ls /user/hive/warehouse/test02.db/tt01/country=CN
    -rwxrwxrwt 3 root hive 5 2019-03-15 10:43 /user/hive/warehouse/test02.db/tt01/country=CN/000000_0
    -rwxrwxrwt 3 root hive 5 2019-03-15 10:45 /user/hive/warehouse/test02.db/tt01/country=CN/000000_0_copy_1
  其中发现两个文件,查看其中的内容,会发现每个文件中都存了一条数据。那么,是每条数据都生成一个文件吗?

5)向tt01中插入一条新的数据,分区为“CN”:

    hive> insert into tt01 partition(country='CN') values(5,'WW');
  到tt01文件夹下,country=CN中查看文件,会发现多出了一个新文件,查看这个新文件,发现其中存储的正是我们新插入的数据:
    [root@DataCenter2 aos_dic]# hadoop fs -cat /user/hive/warehouse/test02.db/tt01/country=CN/000000_0_copy_2
    5WW

3. 创建一个外部分区表
  接下来,尝试在test02库中建立一个新的外部外部表,并且为其指定分区。
  如何建立一个外部分区表呢?
  最初的想法是,按照文件的格式新建一个表,然后指定分区的名称和文件的位置,这样建立的表应该是包含了我所有的数据的。但是在尝试了多次以后发现,Hive并不能自动识别已经建立好的分区。

  经过查询得知,Hive分区表如果要载入外部分区数据,有两种方式:

  1)手动指定分区并载入数据,如:
    hive> alter table tt02 add partition (birth='1997') location '/hive> msck repair table tt02;

  2)修复分区信息,如:
    hive> msck repair table tt02;
    Partitions not in metastore: tt02:birth=1998 tt02:birth=1999
    Repair: Added partition to metastore tt02:birth=1998
    Repair: Added partition to metastore tt02:birth=1999

  但是以上两种方式并不包含直接建立表载入分区。
  因此,建立一个外部分区表的步骤是:
  1)按照文件数据的格式建立字段,并指定分区字段:
    hive> create external table tt02(id int,name string,gender string) partitioned by (birth string) row format delimited fields terminated by ' ' location '/user/hive/warehouse/test02.db/tt02';

  2)新增分区,或 修复分区:
    hive> alter table tt02 add partition (birth='1997') location '/'
    hive> msck repair table tt02;
    Partitions not in metastore: tt02:birth=1998 tt02:birth=1999
    Repair: Added partition to metastore tt02:birth=1998
    Repair: Added partition to metastore tt02:birth=1999

  3)查看数据:
    hive> select from tt02;
    1 LS m 1997
    2 ZQ m 1997
    3 LG f 1997
    4 ST f 1997
    5 SD m 1997
    …… ……

Hive分区表的导入与导出的更多相关文章

  1. Hive中数据的导入与导出

    最近在做一个小任务,将一个CDH平台中Hive的部分数据同步到另一个平台中.毕竟我也刚开始工作,在正式开始做之前,首先进行了一段时间的练习,下面的内容就是练习时写的文档中的内容.如果哪里有错误或者疏漏 ...

  2. 2.7-2.8 导入、导出数据(进/出)hive表的方式

    一.导入数据进hive表 1.语法 LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (p ...

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

    hive表的数据源有四种: hbase hdfs 本地 其他hive表 而hive表本身有两种: 内部表和外部表. 而hbase的数据在hive中,可以建立对应的外部表(参看hive和hbase整合) ...

  4. Hive 导入、导出数据

    <------ 导入 ------> 从本地目录文件导入Hive表 语法:LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABL ...

  5. hive数据的导入导出方式

    导入方式 1.load方式 load data local inpath 'local_path' into table tb_name; 从本地复制了文件到表的路径下 应用场景:大部分的使用,文件几 ...

  6. Sqoop_具体总结 使用Sqoop将HDFS/Hive/HBase与MySQL/Oracle中的数据相互导入、导出

    一.使用Sqoop将MySQL中的数据导入到HDFS/Hive/HBase watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWFyb25oYWRvb3A=/ ...

  7. hive之数据导入导出

    hive数据导入导出 一.导入数据4种方式 建表语句 create table test( name string, friends array, children map<string, in ...

  8. hive数据库导入与导出

    原文连接:https://www.cnblogs.com/654wangzai321/p/9970321.html 把Hive表数据导入到本地 table->local file insert ...

  9. 将Hive统计分析结果导入到MySQL数据库表中(一)——Sqoop导入方式

    https://blog.csdn.net/niityzu/article/details/45190787 交通流的数据分析,需求是对于海量的城市交通数据,需要使用MapReduce清洗后导入到HB ...

随机推荐

  1. localStorage,sessionStorage和cookie的区别

    sessionStorage 和 localStorage 是HTML5 Web Storage API 提供的,可以方便的在web请求之间保存数据.有了本地数据,就可以避免数据在浏览器和服务器间不必 ...

  2. C#winform窗体利用系统抓取关闭按钮事件

    const int WM_SYSCOMMAND = 0x112;        const int SC_CLOSE = 0xF060;        const int SC_MINIMIZE = ...

  3. python 2 和 python 3 的区别

    p2:重复代码语言不统一不支持中文input() 输入数字 获取数字输入字符串必须自己手动写引号raw_input 和p3中的 input 一样print可以加括号 也可以不加括号p2 中除法获取到的 ...

  4. MQ(队列消息的入门)

    消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成,通过提供消息传递和消息排队模型,它可以在分布式环境下拓展进程间的通信,对于消息中间件,常见的角色大致也 ...

  5. zabbix_agentd重装后启动时IPC和共享内存段问题

    zabbix_agentd不知为啥被干掉后重装了zabbix,zabbix用户组id也变了. 重装zabbix后导致zabbix_agentd无法启动,两个问题 问题1: zabbix_agentd ...

  6. Vue 组件&组件之间的通信 之 子组件向父组件传值

    子组件向父组件传值:子组件通过$.emit()方法以事件形式向父组件发送消息传值: 使用步骤: 定义组件:现有自定义组件com-a.com-b,com-a是com-b的父组件: 准备获取数据:父组件c ...

  7. 2600 Phrases for Effective Performance Reviews

    Adaptability and Change Management Skills 适应与变革管理技能能够接受频繁的任务转换.员工适应经常在不停的切换于不同的任务中,就是正常的,就是能够正常切换自己分 ...

  8. 对Activity的DecorView的包装(二)

    看了下公司的系统代码对于根布局decor_layout.xml的修改, 有所获. 前些时候才开始做系统开发的时候, 总想改改系统的源码, 至于原因: 人总是想装装, 在踩过几个别人修改的坑后, 还是觉 ...

  9. 容器中的诊断与分析2——live diagnosis——perf

    Linux下的内核测试工具——perf使用简介 系统级性能分析工具 — Perf linux perf - 性能测试和优化工具:示例&应用 从2.6.31内核开始,linux内核自带了一个性能 ...

  10. springboot2.0 JPA配置自定义repository,并作为基类BaseRepository使用

    springboot2.0 JPA配置自定义repository,并作为基类BaseRepository使用 原文链接:https://www.cnblogs.com/blog5277/p/10661 ...