设为首页 加入收藏

TOP

Hive最新数据操作详解(超级详细)(一)
2015-07-24 09:36:55 来源: 作者: 【 】 浏览:1
Tags:Hive 最新 数据 操作 详解 超级 详细
??数据操作能力是大数据分析至关重要的能力。数据操作主要包括:更改(exchange),移动(moving),排序(sorting),转换(transforming)。Hive提供了诸多查询语句,关键字,操作和方法来进行数据操作。 一、 数据更改 数据更改主要包括:LOAD, INSERT, IMPORT, and EXPORT 1. LOAD DATA load关键字的作用是将数据移动到hive中。如果是从HDFS加载数据,则加载成功后会删除源数据;如果是从本地加载,则加载成功后不会删除源数据。
数据:employee_hr.txt http://pan.baidu.com/s/1c0D9TpI
例:
hive>(不用输入,在此表示在Hive的shell输入以下命令,下同) CREATE TABLE IF NOT EXISTS employee_hr( name string, employee_id int, sin_number string, start_date timestamp ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' STORED AS TEXTFILE;
例: hive> LOAD DATA LOCAL INPATH '/apps/ca/yanh/employee_hr.txt' OVERWRITE INTO TABLE employee_hr; \ 注1:在指令中LOCAL关键字用于指定数据从本地加载,如果去掉该关键字,默认从HDFS进行加载! OVERWRITE关键字指定使用覆盖方式进行加载数据,否则使用附加方式进行加载。
注2:如果数据加载到分区表,则必须指定分区列。
\ \ 2. INSERT 同RDBMS一样,Hive也支持从其他hive表提取数据插入到指定表,使用INSERT关键字。INSERT操作是Hive数据处理中最常用的将已有数据填充进指定表操作。在Hive中,INSERT可以和OVERWRITE一起使用实现覆盖插入,可以进行多表插入,动态分区插入以及提取数据至HDFS或本地。
例: hive> CREATE TABLE ctas_employee AS SELECT * FROM employee; TRUNCATE TABLE employee; //删除employee中的数据,保留表结构 \
例:
hive> INSERT INTO TABLE employee SELECT * FROM ctas_employee; \ \ 注:这里使用Hive提供的beeline工具进行连接,以便清晰的显示数据表。
例:从CTE插入数据 hive> WITH a AS (SELECT * FROM ctas_employee) FROM a INSERT OVERWRITE TABLE employee SELECT *; //效果和上例相同 注:Hive从0.13.0版本开始支持CTE
例:多表插入 hive> CREATE TABLE employee_internal LIKE employee; FROM ctas_employee INSERT OVERWRITE TABLE employee SELECT * INSERT OVERWRITE TABLE employee_internal SELECT *; SELECT * FROM employee_internal; \
Hive除了支持向静态分区插入静态数据,还支持插入动态数据,如日期
例:动态分区插入 动态分区默认是关闭的,可通过以下设置开启:SET hive.exec.dynamic.partition=true; Hive默认至少需要一个partition列是静态的,可以通过以下设置关闭:SET hive.exec.dynamic.partition.mode=nonstrict; hive> INSERT INTO TABLE employee_partitioned PARTITION(year,month) SELECT name,array('Toronto') AS work_place, named_struct("sex","Male","age",30) AS sex_age, map("Python",90) AS skills_score, map("R&D",array('Developer')) AS depart_title, year(start_date) AS year, month(start_date) AS month FROM employee_hr eh WHERE eh.employee_id = 102;
例:
hive> SELECT * FROM employee_partitioned; \
例:提取数据至本地(默认使用^A分离列,换行符分离行) 注:Hive提取数据只能使用OVERWRITE, 不能使用INTO。 注:在一些Hadoop版本中目录深度只支持到2层,可以使用以下设置修复:SET hive.insert.into.multilevel.dirs=true; hive> INSERT OVERWRITE LOCAL DIRECTORY '/apps/ca' SELECT * FROM employee; \ \ 注:默认下Hive会将数据按reducer数量生成多个输出文件,可以使用以下命令进行合并: hdfs dfs -getmerge hdfs:// :port/user/output/directory

例:使用特定分隔符分隔行 hive> INSERT OVERWRITE LOCAL DIRECTORY '/apps/ca/yanh/data' ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' SELECT * FROM employee; \

例:Hive同样能多目录输出文件 hive> FROM employee INSERT OVERWRITE LOCAL DIRECTORY '/apps/ca/yanh/data1' SELECT * INSERT OVERWRITE LOCAL DIRECTORY '/apps/ca/yanh/data2' SELECT * ; \

3. EXPORT and IMPORT 这两条命令是Hive用来和HDFS进行数据迁移或者进行数据备份的,从Hive0.8.0开始可用。EXPORT可以导出数据以及元数据到HDFS,元数据被命名为_metadata. 数据被放在命名为data的目录下

例: hive>

EXPORT TABLE employee TO '/apps/ca/yanh/data'; \ \ 注:输出目录不能已存在

例:将输出的数据导入Hive(将数据导入到已有的表将报错) hive>

IMPORT FROM '/apps/ca/yanh/data'; \

例:导入到新表(也可以是EXTERNAL表) hive>

IMPORT TABLE employee_imported FROM '/apps/ca/yanh/data'; \ \

例:partition表导入导出 hive>

EXPORT TABLE employee_partitioned PARTITION (year=2015,month=05) TO '/apps/ca/yanh/data1'; \

例:

hive>

IMPORT TABLE employee_p
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Oracle基础(二):用户及权限管理 下一篇关于OGG"Loadingdatafromfil..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·如何从内核协议栈到 (2025-12-27 03:19:09)
·什么是网络协议?有哪 (2025-12-27 03:19:06)
·TCP/ IP协议有哪些 (2025-12-27 03:19:03)
·怎样用 Python 写一 (2025-12-27 02:49:19)
·如何学习python数据 (2025-12-27 02:49:16)