Hive基础编程入门(一)

设置查询时显示字段名称
hive> set hive.cli.print.header=true;

设置cli模式下显示当前所在的数据库名称
hive> set hive.cli.print.current.db=true;

设置hive的安全措施为"strict(严格)"模式(如果对分区表查询的WHERE子句中没有加分区过滤的话,将禁止提交这个任务)
hive> set hive.mapred.mode=strict;

默认的数据库文件目录是/user/hive/warehouse/hivedb.db,如修改默认存放路径,可通过如下命令:
hive> create database hivedb
	> location '/data1/metadatadb

为创建的数据库增加描述信息
hive> create database hivedb
	> comment 'this is a test database';

从文件导入数据到hive表
ECHO "one row" > /tmp/tmpfile
hive -e "LOAD DATA LOCAL INPATH '/tmp/myfile'" INTO TABLE src; 

拷贝一张已经存在的表的结构(不拷贝数据)
hive> create table if not exists hivedb.copiedtable like hivedb.templatetable;

查看某张表的详细表结构信息(包括tableName:copiedtable, dbName:hivedb, owner:binguo, createTime:1488883326等信息)
hive> describe extended copiedtable;

格式化查看某张表的详细表结构信息(提供更高可读性的详细输出信息,实际使用情况也是FORMATTED更多些)
hive> describe formatted copiedtable;

hive中创建外部表(读取所有位于/data1/extdirectory目录下以逗号分隔的数据)
create external table if not exists requiretable_ext(
id INT,
name STRING,
info STRING
) ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION '/data1/extdirectory';

hive中查看某张表是否是外部表(通过末尾的详细表信息输出可以看到 ...TableType:MANAGED_TABLE视为管理表 ...TableType:EXTERNAL_TABLE视为外部表)
hive> describe formatted target_user_table;

hive中创建分区表(对数据进行分区,最重要的原因就是为了更快的查询)
create table bigtable(
province STRING,
city STRING,
info STRING
)
PARTITIONED BY(province STRING,city STRING);

查看hive表中所有存在的分区
hive> show partitions target_user_table;

查看hive表中指定了一个或多个分区字段值的PARTITION子句,进行过滤查询
hive> show partitions target_user_table PATITION(province='anhui',city='bozhou')

在管理表中可以通过载入数据的方式创建分区(Ps.HiveSQL中通过${env:HOME}方式引用HOME环境变量),eg:
hive> load data local inpath '${env:HOME}/loadfiles-dirctory'
	> into table target_user_table
	> partition(province='anhui',city='bozhou')
其实就是hive创建了分区对应的目录 .../loadfiles-dirctory/province=anhui/city=bozhou

hive创建外部分区表(alter table 语句可以单独对这个外部分区表增加分区)
create external table if not exists target_user_table_ext
(
provice string,
recordid int,
city string,
info string
)
partitioned by(year int,month int,day int)
row format delimited fields terminated by '\t';

对hive外部分区表增加分区
alter table target_user_table_ext add partition(year=2017,month=7,day=31)
location 'hdfs://.../2017/07/31';

使用hadoop fs -rmr命令删除HDFS下的某个分区
hadoop fs -rmr /.../2017/07/31';

文献语录:
	Hive不关心一个分区对应的分区目录是否存在或分区目录下是否有文件。如果分区目录不存在或分区目录下没有文件,则对于这个
	过滤分区的查询将没有返回结果。当用户想在另外一个进程开始往分区中写数据之前创建好分区时,这样做是很方便的。
	数据一旦存在,对于这份数据的查询就会有结果返回。
	和非分区外部表一样,Hive并不控制这些数据。即使表被删除,数据也不会被删除。

查看分区数据实际存在的路径
describe formatted target_user_table_ext partition(year=2017,month=7,day=31);

hive删除表(对于管理表,表的元数据信息和表内的数据都会被删除)
drop table if exists target_user_table;

文献语录:
	事实上,如果用户开始了Hadoop的回收站功能(这个功能默认是关闭的),那么数据将会被转移到用户在分布式文件系统中的
	用户根目录下的.Trash目录下,也就是HDFS中的/user/@USER/.Trash目录。如果想开启这个功能,只需要将配置属性fs.trash.interval
	的值设置为一个合理的正整数即可。这个值是“回收站检查点”间的时间间隔,单位是分钟。因此如果设置值为1440,那么就
	表示是24小时。不过并不能保证所有的分布式系统以及所有的版本都支持这个功能。如果用户不小心删除了一张存储这很重要的
	管理表的话,那么可以先重建表,然后重新所需要的分区,再从.Trash目录中将误删的文件移动到正确的文件目录下
	(使用文件系统命令)来重新存储数据。
	对于外部表,表的元数据信息会被删除,但是表中的数据不会被删除。

大多数的表属性可以通过alter table语句来进行修改。这种操作会修改元数据,但不会修改数据本身。

表的重命名
hive> alter table copiedtable rename to product_fact_table;

分区表的增加、修改、删除表分区(alter table tablename add partition ...语句为表(通常为外部表)添加新分区)
hive> alter table target_user_table add if not exits 
	> partition (year=2017,month=8,day=1) location '.../2017/08/01'
	> partition (year=2017,month=8,day=2) location '.../2017/08/02';

修改分区表对应的文件目录路径
hive> alter table target_user_table partition(year=2017,month=7,day=31)
	> set location '...other_directory/2017/07/31';

删除表中的某个分区
hive> alter table target_user_table drop if exists partition(year=2017,month=7,day=31);

修改列信息(可以对某个字段重命名,并修改其位置、类型或注释)
hive> alter table target_user_table change column recordid SMALLINT
	> comment 'change recordid type int to smallint'
	> after info;

参考文献《Hive编程指南》

未完待续...

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值