《hive编程指南》阅读笔记摘要(四)

第5章 HiveQL:数据操作
既然hive没有行级别的增删改操作,那么往表中装载数据的唯一途径就是“大量”的数据装载操作,或者通过其他方式仅仅将文件写到正确的目录下。
一、装载数据
LOAD DATA LOCAL INPATH '${env:HOME}/california-employees'
OVERWRITE INTO TABLE employees
PARTITION (country='US', state='CA');
1、如果分区目录不存在,会先创建分区目录,然后再将数据拷贝到该目录下;
2、如果目标表不是分区表,省略partition子句;
3、load data local...是拷贝本地目录中的数据到hdfs上的目标位置,load data...是转移hdfs上的数据到目标位置(inpath后的路径就是hdfs上的路径),目标位置都是一个hdfs目录。
4、overwrite关键字表示先删除目标文件夹中已经存在的数据,然后再拷贝新数据进来。如果不使用这个关键字,就不会删除已有的数据,即使有同名文件,会使用文件名_序列号的方式拷贝。
5、inpath子句中的文件路径下,不能再有文件夹。
二、通过查询语句向表中插入数据
insert overwrite/into table employees
partition (country='US', state='CA')
select * from staged_employees se
where se.cnty='US' and se.st='OR';
1、overwrite关键字表示先删除目标目录下已有的数据。
2、into关键字表示追加数据,不会删除数据;
3、 如果要向50个州分区中插入数据,就要执行50次操作,就会对staged_employees 表扫描50次

from staged_employees se
insert overwrite/into table employees
    partition (country='US', state='OR')
    select * where se.cnty='US' and se.st='OR'
insert overwrite/into table employees1
    partition (country='US', state='CA')
    select * where se.cnty='US' and se.st='CA'
insert overwrite/into table employees2
    partition (country='US', state='IL')
    select * where se.cnty='US' and se.st='IL'

1、以上操作只会对staged_employees表扫描一次;
2、这些并列的insert子句不是非此即彼的关系,所以一条数据可能同时满足多个insert从而被插入表中;

动态分区:基于查询参数推断出需要创建的分区名称,自动创建分区。
insert overwrite/into table employees
partition (country,state)
select ......,se.cnty,se.st
from stated_employees se;
根据位置匹配分区字段:country,state匹配select子句的最后两个字段

混合使用动态和静态分区
insert overwrite/into table employees
partition (country = 'US',state)
select ......,se.cnty,se.st
from stated_employees se
where se.cnty='US';
country是静态分区,state是动态分区

动态分区功能默认是关闭的,开启后,默认是strict模式执行(避免因设计错误导致生成大量分区):至少有一列分区是静态的,即必须是动态和静态混合使用。

三、通过查询语句创建表,同时插入数据
create table ca_employees
as select name,salary,address
from employees
where se.state = 'CA';
主要应用场景是从一个大的宽表中选取部分需要的数据。
这个功能不能用于外表:外表本身就可以直接location到不同的文件。

四、导出数据
1、完整的拷贝文件
hadoop fs -cp source_path target_path
2、导出部分字段
insert overwrite/into [local] directory '/.....'
select name,salary,address
from employees
where state='CA';
3、类似导入到多个表,导出数据也可以导出到多个文件
from staged_employees se
insert overwrite/into directory '/...../or_employees'
    select * where se.cty='US' and se.st='OR'
insert overwrite/into directory '/...../ca_employees'
    select * where se.cty='US' and se.st='CA'
insert overwrite/into directory '/...../il_employees'

    select * where se.cty='US' and se.st='IL';


--------------------------
微信公众号:IT人成长关注
大数据技术QQ群:485681776

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hive SQL开发指南是指针对Hive SQL编程的一份指南或指导手册。Hive是一个基于Hadoop的开源数据仓库工具,它使用Hive Query Language(HiveQL)进行数据查询和分析。以下是关于Hive SQL开发指南的一些重要内容。 首先,指南介绍了Hive SQL的基本语法和语义。Hive SQL与传统的关系型数据库SQL有一些差别,指南会详细说明这些差异并提供相应的示例。 其次,在指南中会介绍如何连接到Hadoop集群中的Hive服务并执行SQL查询。这包括配置Hive客户端和服务器的相关参数,并了解如何使用Hive的内置函数和操作符。 指南还会提供如何优化Hive SQL查询性能的建议。Hive查询可能涉及大规模数据处理,因此如何设计和优化查询是非常关键的。指南中会介绍如何使用Hive的分区、索引和优化技巧来提高查询性能。 此外,指南还会涵盖Hive SQL中的数据导入和导出操作。Hive支持从不同的数据源导入和导出数据,指南将介绍如何使用Hive的LOAD、INSERT和EXPORT命令来实现这些操作。 最后,指南还会包含一些常见的Hive SQL开发技巧和实践经验。这些技巧可能包括如何处理复杂查询、如何使用Hive的UDF(用户自定义函数)以及如何利用Hive的可扩展性和容错性等特性。 总之,Hive SQL开发指南提供了关于Hive SQL编程的详细指导,帮助开发者掌握Hive SQL的语法、优化查询性能、实现数据导入导出等操作,并提供一些实际项目中的技巧和经验。这对于想要学习和使用Hive SQL的开发人员来说是一份非常有价值的参考资料。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值