示例数据库为 db_hive

1、 创建表 create-table.sql

create table if not exists db_hive.tb_user
(
id int,
username string comment '用户名',
age int comment '年龄',
address string comment '地址'
)
comment '用户表'
row format delimited fields terminated by ','
stored as textfile
location '/user/hive/warehouse/db_hive.db/db_user'

2、执行创建表

hive -f 'create-table.sql'

3、加载数据到 tb_user 表中

数据文件  /root/files/tb_user.txt

1001,Logan,16,shenzhen
1002,Herry potter,12,Magic school
1003,孙悟空,500,花果山

Hive交互式命令行执行命令  load data local inpath '/root/files/tb_user.txt' into table db_hive.tb_user;

如下所示:

hive (db_hive)> load data local inpath '/root/files/tb_user.txt' into table db_hive.tb_user;

如果要覆盖旧数据,可以加 overwrite,如下所示

hive (db_hive)> load data local inpath '/root/files/tb_user.txt' overwrite into table db_hive.tb_user;

4、查询数据

hive -e "select id,username from db_hive.tb_user"

5、根据已有表创建只有部分字段的子表

create table if not exists db_hive.tb_user_sub
as
select id,username from db_hive.tb_user;

6、 like 创建表

create table if not exists db_hive.tb_user_like like db_hive.tb_user;

插入数据

insert into table db_hive.tb_user_like select * from db_hive.tb_user;

7、重命名表

alter table tb_user_like rename to tb_user_rename ;

8、 创建外部表,删除时只删除元数据,不会删除表数据

create external table if not exists db_hive.tb_ext(id string);

9、创建分区表

create table if not exists db_hive.tb_logs(
ip string,
text string,
log_time string
)
partitioned by (month string)
row format delimited fields terminated by "\t";

数据文件 /root/files/tb_logs.txt

192.168.32.100  login   20190429072650
192.168.32.100 order 20190429072730
192.168.32.101 browse 20190429072812

载入数据

load data local inpath '/root/files/tb_logs.txt' into table db_hive.tb_logs partition (month = '')

查询数据

select ip,text,log_time from tb_logs where month = '';

10、手工创建分区数据及修复分区表

创建分区目录

hdfs dfs -mkdir -p /user/hive/warehouse/db_hive.db/tb_logs/month=201905

上传数据文件到分区目录下

hdfs dfs -put /root/files/tb_logs.txt /user/hive/warehouse/db_hive.db/tb_logs/month=201905

此时执行查询

select count(distinct ip) from db_hive.tb_logs where month = '';

查询结果为0。

【原因】:数据并未添加到分区中,查看配置的MySQL元数据信息

mysql> use hive_metastore;
mysql> select * from PARTITIONS;

示例配置的Hive元数据存放为MySQL数据库中的 hive_metastore 数据库

查询分区表 PARTITIONS 中的数据,发现只有一条记录,如下所示:

+---------+-------------+------------------+--------------+-------+--------+
| PART_ID | CREATE_TIME | LAST_ACCESS_TIME | PART_NAME | SD_ID | TBL_ID |
+---------+-------------+------------------+--------------+-------+--------+
| 1 | 1556494255 | 0 | month=201904 | 29 | 28 |
+---------+-------------+------------------+--------------+-------+--------+

【修复方法一】直接执行修复命令

msck repair table tb_logs

此时分区表中的数据如下:

+---------+-------------+------------------+--------------+-------+--------+
| PART_ID | CREATE_TIME | LAST_ACCESS_TIME | PART_NAME | SD_ID | TBL_ID |
+---------+-------------+------------------+--------------+-------+--------+
| 1 | 1556494255 | 0 | month=201904 | 29 | 28 |
| 2 | 1556495227 | 0 | month=201905 | 30 | 28 |
+---------+-------------+------------------+--------------+-------+--------+

执行查询命令

select count(distinct ip) from db_hive.tb_logs where month = '';

返回结果为2,数据已正常加入分区。

【修复方法二】 使用增加分区命令

操作步骤:创建新分区目录并上传数据文件,命令如下:

hive (db_hive)> dfs -mkdir -p /user/hive/warehouse/db_hive.db/tb_logs/month=201906;
hive (db_hive)> dfs -put /root/files/tb_logs.txt /user/hive/warehouse/db_hive.db/tb_logs/month=201906;

执行增加分区命令

alter table tb_logs add partition(month = '');

查询数据,测试结果正常。

此时元数据分区表中数据如下:

+---------+-------------+------------------+--------------+-------+--------+
| PART_ID | CREATE_TIME | LAST_ACCESS_TIME | PART_NAME | SD_ID | TBL_ID |
+---------+-------------+------------------+--------------+-------+--------+
| 1 | 1556494255 | 0 | month=201904 | 29 | 28 |
| 2 | 1556495227 | 0 | month=201905 | 30 | 28 |
| 3 | 1556495635 | 0 | month=201906 | 31 | 28 |
+---------+-------------+------------------+--------------+-------+--------+

查看表分区命令

show partitions db_hive.tb_logs;

11、 导出表数据

export table db_hive.tb_logs to '/user/hive/warehouse/export/db_hive/tb_logs';

12、 导入表数据

创建表

create table tb_logs_like like tb_logs;

导入数据

import table tb_logs_like from '/user/hive/warehouse/export/db_hive/tb_logs';

13、导出数据到本地文件

insert overwrite local directory '/root/files/hive_out'
row format delimited fields terminated by '\t' collection items terminated by '\n'
select * from db_hive.tb_logs;

Hive 常用命令和语句

.

Hive 常用命令和语句的更多相关文章

  1. 大数据-Hive 常用命令

    Hive 启动 ~$ hive 退出 hive>quit; --退出hive or hive> exit; --exit会影响之前的使用,所以需要下一句kill掉hadoop的进程 > ...

  2. MySQL常用命令和语句

    1.常用SQL语句 1)常用函数/*type可取值为:MICROSECONDSECONDMINUTEHOURDAYWEEKMONTHQUARTERYEARSECOND_MICROSECONDMINUT ...

  3. HIVE常用命令之MSCK REPAIR TABLE

    MSCK REPAIR TABLE命令主要是用来解决通过hdfs dfs -put或者hdfs api写入hive分区表的数据在hive中无法被查询到的问题.我们知道hive有个服务叫metastor ...

  4. Hive 常用命令

    1.hive模糊搜索表 show tables like '*name*'; 2.查看表结构信息  desc formatted table_name;  desc table_name; 3.查看分 ...

  5. MySQL常用命令与语句

    目录 Shell命令 查看系统信息 查看系统变量 设置系统变量 数据库操作 查看表信息 修改表语句 操作表 操作索引 操作约束 操作列 查询常用语句 Shell命令 mysql -uroot -p12 ...

  6. Hive常用命令

    本位为转载,原地址为:http://www.cnblogs.com/BlueBreeze/p/4232421.html #创建新表 hive> CREATE TABLE t_hive (a in ...

  7. 【mysql】工作中mysql常用命令及语句

    1.查看mysql版本号 MySQL [release_test_oa]> select version(); +------------+ | version() | +----------- ...

  8. Hive记录-Hive常用命令操作

    1.hive支持四种数据模型 • external table ---外部表:Hive中的外部表和表很类似,但是其数据不是放在自己表所属的目录中,而是存放到别处,这样的好处是如果你要删除这个外部表,该 ...

  9. Hive常用命令及作用

    1-创建表 -- 内部表 create table aa(col1 string,col2 int) partitioned by(statdate int) ROW FORMAT DELIMITED ...

随机推荐

  1. 转发 django 初探

    https://www.cnblogs.com/franknihao/p/7682914.html https://blog.csdn.net/tang_jin2015/article/details ...

  2. echarts自定义tooltip提示框内容

    1.echarts自定义tooltip提示框内容 https://blog.csdn.net/dreamsup/article/details/56667330 2.关于Echarts的formatt ...

  3. Codecraft-18 and Codeforces Round #458 (Div. 1 + Div. 2, combined) F. Substrings in a String

    http://codeforces.com/contest/914/problem/F 以前做过一个类似的,但是查询的子串长度最多是10,这个时候就是用bit + hash做了.这是因为改变一个字符, ...

  4. Murano Setup Steps

    1. Select a Linux Distribution Only Ubuntu 14.04 (Trusty), Fedora 21 (or Fedora 22) and CentOS/RHEL ...

  5. LeetCode 222.完全二叉树的节点个数(C++)

    给出一个完全二叉树,求出该树的节点个数. 说明: 完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置.若最底 ...

  6. 基于log4net自定义异步logging组件

    我们在做开发的时候,需要把一些信息记录下来,方便问题排查.数据分析和统计.通常我们使用log4net作为logging的工具,但是大部分时候需要加以封装,以便更加方便的使用,并且不妨碍主业务程序的运行 ...

  7. java 多线程 yield方法的意义

    Thread.yield( )方法: 使当前线程从执行状态(运行状态)变为可执行态(就绪状态).cpu会从众多的可执行态里选择,也就是说,当前也就是刚刚的那个线程还是有可能会被再次执行到的,并不是说一 ...

  8. Junit使用过程中需要注意的诡异bug以及处理办法

    在开发过程中我们有时会遇到狠多的问题和bug,对于在编译和运行过程中出现的问题很好解决,因为可以在错误日志中得到一定的错误提示信息,从而可以找到一些对应的解决办法.但是有时也会遇到一些比较诡异的问题和 ...

  9. Spring boot-(2) Spring Boot使用

    1. 构建系统 (1) 使用maven构建 1) 从Starter Parent继承 在项目中配置继承spring-boot-starter-parent,可以进行如下设置: <!-- Inhe ...

  10. Jersey前后端交互初体验

    一 get请求 前端 基本的GET请求 $.ajax({ type : "get", url : "../rest/api/account/delete", d ...