HIVE:直接建表,like建表,as 建表小结

       工作中,根据场景不同,可能建表方式不同,有时候用like、as方式建表会达到事半功倍的效果,下面是小白总结的三种创建表的方式。

1、使用create命令创建一个新表

create命令建表,参数不同,也有些许的区别,下面来看一下,创建一个带有分区的表,分区按天,取名为d

可以看到分区是用partitioned by方式,指定分区的参数,另外下面的stored as是用来指定存储的方式,这里不止有orc方式,也可以用txtfile方式,但是orc方式是对数据进行压缩的,占很少内存,现在大多数选择这种方式存储,不过也有一些情景下使用txtfile,并且该方式的数据是行式存储,而orc是列式存储。

当然,也可以不创建分区表,那么去掉partitioned的指定就可以。

USE database;
CREATE TABLE tablename(
     orderid bigint	comment '订单号',
     uid string	comment '用户id',
     orderdate date comment '预订日期'
	 )
 COMMENT 'table comment'
 PARTITIONED BY(d STRING COMMENT 'date')
 STORED AS ORC;

2、使用like创建表

这种方式实质就是复制表结构。在工作中,如果你有一个已经存在的表,现在想创建一个一模一样的表,这个时候这个方法就很省时省力了。复制时,只会复制表结构,不会复制表中属性值(包扣表的分区以及存储格式之类的)

use database;
create table tablename1 like  tablename;

3、使用as创建表

这种方式是把一张表的某些字段抽取出来,创建成一张新表。

这种方式需要注意以下几点:

1.as只会复制属性以及属性值到新的表中

2.使用as创建的表,并不会带原表的分区(分区丢失),并且分区的字段变成一个正常的字段,没有分区的效用,还有一些字段的约束等(可以通过describe formatted查看)

use database;
create table tablename1 as   
select *  from tablename
 where d = '2019-01-01'
;

      以上就是三种建表方式啦,各有各的好处吧,可以视情况而定,而不是一直用第一种建表方式~

你可能感兴趣的:(技术,数据库)