Hive 实战(1)--hive数据导入/导出基础

 前沿:

  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

1
2
3
4
5
6
7
8
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, 内容如下所示:

1
2
3
4
5
[<username>@<hostname> ~]# 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;

1
2
3
4
5
6
7
8
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上

 

posted on   mumuxinfei  阅读(1226)  评论(0编辑  收藏  举报

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示