博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hive 实战(1)--hive数据导入/导出基础
阅读量:7255 次
发布时间:2019-06-29

本文共 2111 字,大约阅读时间需要 7 分钟。

 前沿:

  Hive也采用类SQL的语法, 但其作为数据仓库, 与面向OLTP的传统关系型数据库(Mysql/Oracle)有着天然的差别. 它用于离线的数据计算分析, 而不追求高并发/低延时的应用场景. 最显著的特别是, Hive的数据是Schema On Read, 对数据的写入非常的自由和松散, 而对数据的读取则作了各种限制. 而RMDBS则是Schema On Write, 对数据写入限制非常的严苛.

*). 数据导入/导出

  让我们体验以下Hive中数据如何导入:
  1). 创建数据库 db_hive_test;
  CREATE DATABASE db_hive_test;
  则在HDFS的目录/user/hive/warehouse下
  [<username>@<hostname> ~]# sudo -u hdfs hdfs dfs -ls /user/hive/warehouse
  drwxrwxrwt - root hive 0 2014-07-02 10:49 /user/hive/warehouse/db_hive_test.db
  

  2). 创建数据表 tb_user

  CREATE TABLE tb_user (    user_id int,    username string,    age int,    phone string  ) ROW FORMAT DELIMITED   FIELDS TERMINATED BY '\t'   STORED AS TEXTFILE;

  3). 数据准备

  在本地编辑data.txt, 内容如下所示:

  [
@
~]# cat data.txt   1001 lilei 17 13800001111  1002 hanmm 16 13800001112  1003 lily 16 13800001113  1004 lucy 16 13800001114

  4). 导入数据入hive

  LOAD DATA LOCAL INPATH '/path/to/data.txt' INTO TABLE db_hive_test.tb_user;

  5). 数据验证

  select * from tb_user;
  
  是不是很简单? 但为何不使用Insert Into单行插入数据, 实际上hive的定位, 其并不支持单行的数据插入(insert)和修改(update).
  数据的导入可以借助
  #) LOAD DATA语法
  LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]
  #) INSERT SELECT语法
  INSERT OVERWRITE/INTO TABLE <table_name> [PARTITION(partcol1=val1, partclo2=val2 ...)] SELECT_STATEMENT
  注: OVERWRITE重写,INTO追加。

  6). 创建数据表tb_newuser;

  CREATE TABLE tb_newuser (     user_id int,    username string,    age int,    phone string  ) ROW FORMAT DELIMITED   FIELDS TERMINATED BY '\t'   STORED AS TEXTFILE;

  7). INSERT SELECT

  INSERT INTO TABLE tb_newuser SELECT * FROM tb_user;

  8). 数据验证

  SELECT * FROM tb_newuser;
  

  数据表结构复制

  CREATE TABLE tb_newuser02 LIKE tb_user;

  创建表时导入

  CREATE TABLE tb_newuser01 SELECT * FROM tb_user;

  数据如何导出

  导出语法: INSERT OVERWRITE/INTO LOCAL DIRECTORY '<directory>' SELECT_STATEMENT  

  INSERT OVERWRITE LOCAL DIRECTORY '/path/to/data' SELECT * FROM tb_user;

  cat /path/to/data/000000_0
  

  INSERT OVERWRITE DIRECTORY '/path/to/data' SELECT * FROM tb_user;

  

  Local的有无, 其区别在于, 一个存放在本地, 另一个存放在hdfs上

 

转载地址:http://dykdm.baihongyu.com/

你可能感兴趣的文章
iptables应用
查看>>
1011 C语言程序设计教程(第三版)课后习题6.1
查看>>
[CoreOS 转载] CoreOS实践指南(三):系统服务管家Systemd
查看>>
【转载】systemctl命令完全指南
查看>>
[LeetCode]: 83: Remove Duplicates from Sorted List
查看>>
0316-关于js 注意事项
查看>>
算法笔记
查看>>
静态代理设计与动态代理设计
查看>>
PHP 中如何使用 Mongodb
查看>>
cookie和session
查看>>
上海证券交易所-债券品种介绍
查看>>
easyuI企业管理系统-实战七 导航二
查看>>
关于StringBuffer和StringBuilder
查看>>
跟layout_weight说88,轻松搞定百分比布局
查看>>
蓝绿部署、红黑部署、AB测试、灰度发布、金丝雀发布、滚动发布的概念与区别...
查看>>
mysql insert语句
查看>>
POJ 3169 Layout 差分约束系统
查看>>
JS部分
查看>>
history.back(-1)和history.go(-1)的区别
查看>>
zoj3640(概率dp)
查看>>