create table ,create table as 与create like三种建表方式的使用详解
Hive的hql是基于sql而来,而sql中关于表的创建有几种方式。同样,hive也支持这些表的创建方式。
官网文档关于建表的地址:hive常见建表方式官网文档
1.自主创业方式create table
使用create table从无到有,按照建表的格式和要求实现建表。实际开发中较常用的方式,主要可以定制化建表。
具体参考博客: https://blog.csdn.net/qq_26442553/article/details/79747906
https://blog.csdn.net/qq_26442553/article/details/78805443
CREATE TABLE DEDUCT_SIGN_D`(`id` bigint COMMENT '主键ID',`sign_no` string COMMENT '签约协议号',`bp_no` string COMMENT '商户号',`comments` string COMMENT '备注',`etl_create_time` string COMMENT 'ETL创建日期',`etl_update_time` string COMMENT 'ETL更新日期')
COMMENT '代扣签约表'
PARTITIONED BY (`statis_date` string COMMENT '时间分区')
2.懒人模式create table ...as select..(CTAS)
create table ......as 这种方式建表,很常用。主要是在hive项目开发中,会有很多逻辑聚合,以及临时表等情况的时候。
2.1使用CTAS创建表的好处
1.CTAS语句中使用查询的结果创建和填充表。由CTAS创建的表是原子的,这意味着在填充所有查询结果之前,其他用户不会看到该表。因此,其他用户要么看到带有完整查询结果的表,要么根本看不到表。
2.在CTAS中有两个部分,select选择部分可以是HiveQL支持的任何选择语句。CTAS的create创建部分从select选择部分获取结果模式,并可以使用SerDe和存储格式等其他表属性创建指定的目标表。比如指定行列切分格式等属性。
但是使用CTAS建表会有表结构的变化,以及使用CTAS建表的缺陷和限制,尤其要注意。具体参考博客:使用create table ...as创建表时要注意的问题
2.2使用CTAS创建表的演示
1.直接使用CTAS创建表,不指定创建部分的约束
create table finance.tmp_dm_rpt_110015_fsa_app_d_23
as
select a.stat_date as stat_date ,a.intfc_tp as intfc_tp,a.trmnl_tp_id as trmnl_tp_id,a.app_version as app_version ,a.clnt_chnl as clnt_chnl,a.trmnl_clnt as trmnl_clnt
from finance.tmp_dm_rpt_110015_fsa_app_d_20_04 a
inner join finance.tmp_dm_rpt_110015_fsa_app_d_22 b
on b.trmnl_clnt=concat(a.trmnl_tp_id,a.clnt_id);2.在create创建部分指定表的存储格式等属性,比如指定新表的行列分隔符,存储格式等。
CREATE TABLE T_DEDUCT_SIGN_D_CTASROW FORMAT DELIMITED FIELDS TERMINATED BY '&'STORED AS ORC
AS
SELECT * FROM T_DEDUCT_SIGN_D WHERE STATIS_DATE IS NOT NULL;查看使用CTAS建表后的表结构:
hive (fdm_sor)> SHOW CREATE TABLE T_DEDUCT_SIGN_D_CTAS;
OK
CREATE TABLE `T_DEDUCT_SIGN_D_CTAS`(`id` bigint, `sign_no` string, `bp_no` string, `statis_date` string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '&'
STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
LOCATION'hdfs://SuningHadoop2/user/finance/hive/warehouse/fdm_sor.db/t_deduct_sign_d_ctas'
TBLPROPERTIES ('transient_lastDdlTime'='1546422100')查看表中的数据
hive (fdm_sor)> hive (fdm_sor)> select count(*) from T_DEDUCT_SIGN_D_CTAS;
438
总结:如上使用CTAS创建的表也可以指定存储格式,字段名等。比如在select的时候给列指定别名,则在新表中就会将源表的列实现了重命名。此外在创建表时给目标表指定特定存储格式,也可以完成数据从源表的存储格式到目标表存储格式的转换。这是hive一个很强大的功能,数据存储格式的转换。后面也可以通过insert实现。
3.半自动化模式create table like.....
使用这种方式创建的表用官网的话来说就是:The LIKE form of CREATE TABLE allows you to copy an existing table definition exactly (without copying its data). In contrast to CTAS, the statement below creates a new empty_key_value_store table whose definition exactly matches the existing key_value_store in all particulars other than table name. The new table contains no rows.大致意思就是:CREATE TABLE创建表的形式允许您精确地复制现有表定义(不复制其数据),其创建的表除了表名和源表不一样外,其余所有的细节都是一样的。但是没有源表的数据。所以这种create table like的形式非常适合对源表模式的复制。实际开发中其实用的也不是太多。
create table t__sign_d_like like T_DEDUCT_SIGN_D
#查看目标表结构
hive (fdm_sor)> show create table t__sign_d_like;
OK
CREATE TABLE `t__sign_d_like`(`id` bigint COMMENT '主键ID', `sign_no` string COMMENT '签约协议号', `bp_no` string COMMENT '商户号')
PARTITIONED BY ( `statis_date` string COMMENT '时间分区')
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.columnar.LazyBinaryColumnarSerDe'
STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.RCFileInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.RCFileOutputFormat'
LOCATION'hdfs://SuningHadoop2/user/finance/hive/warehouse/fdm_sor.db/t__sign_d_like'
TBLPROPERTIES ('transient_lastDdlTime'='1546420764')#查看源表结构:
hive (fdm_sor)> show create table T_DEDUCT_SIGN_D;
CREATE TABLE `T_DEDUCT_SIGN_D`(`id` bigint COMMENT '主键ID', `sign_no` string COMMENT '签约协议号', `bp_no` string COMMENT '商户号')
COMMENT '代扣签约表'
PARTITIONED BY ( `statis_date` string COMMENT '时间分区')
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.columnar.LazyBinaryColumnarSerDe'
STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.RCFileInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.RCFileOutputFormat'
LOCATION'hdfs://SuningHadoop2/user/finance/hive/warehouse/fdm_sor.db/t_deduct_sign_d'
TBLPROPERTIES ('transient_lastDdlTime'='1546417837')
create table ,create table as 与create like三种建表方式的使用详解相关推荐
- Mysql 创建表及添加备注详解(create table)
文章目录 1 概述 2 语法 2.1 创建 create table 2.2 修改 alter table 2.3 清空 truncate table 2.4 删除 drop table 3 扩展 3 ...
- db2中create table as的建表方式
DB2没有类似oracle的create table as select来定义表的方式,所以DB2中把SELECT查询出来的结果定义为别的表比较麻烦! DB2定义表的3种方式: 首先创建一个例子表,再 ...
- java中html5表格_java:HTML(table表格,ul列表)和CSS(导入.css文件,三种定义颜色方式,三种样式选择器,a标签属性顺序,)...
样式 /*background 背景*/ /*background-color: red; = background-color : red;*/ /*background-image: url(im ...
- html table拓宽,excel拉长单元格_excel调整单元格大小的方法步骤详解
excel在单元格中要输入的数据太多了,二单元格的位置又太小了,怎么办,excel单元格的大小改怎么调,那就有阿呼告诉你两个可靠的方法吧.希望对你有帮助! excel调整单元格大小的方法一 1.打开一 ...
- Hive建表语句详解--CREATE TABLE
创建表的三种方法 Hive创建表的方式(默认路径/user/hive/warehouse,也可以location指定,主要针对external表) 1.使用create命令创建一个新表,带分区 CRE ...
- Oracle创建表语句(Create table)语法详解及示例
Oracle创建表语句(Create table)语法详解及示例 创建表(Create table)语法详解 1. ORACLE常用的字段类型ORACLE常用的字段类型有 VARCHAR2 (si ...
- SQL—— Create table as select 与 使用select查询结果创建新表
Create table as select,有以下三种方式: create table table1 as select * from table2 where 1=2; 创建一个表结构与table ...
- Hive - Create TableDrop Table ALTER Table(中)
译注:书接上篇,了解过创建表以及load data后,假如发现需要更改表字段类型或者添加表字段,怎么办?这篇文章将进一步了解具体细节. This chapter explains how to alt ...
- mysql建表auto_increment_mysql create table auto_increment
当插入记录时,没有为AUTO_INCREMENT明确指定值,则等同插入NULL值 把0插入AUTO_INCREMENT数据列的效果与插入NULL值一样.但不建议这样做,还是以插入NULL值为好. 如果 ...
最新文章
- 如何在Linux系统上部署接口测试环境
- 我作为一个程序员,除了写程序还会干什么?什么都不会了!
- android 如何监听应用前后台切换
- 实验——Windows常用网络测试命令
- 英语语音中的调核例子_英语歌曲在英语教学中扮演的重要角色
- ERROR1045(28000): AccessforuserODBC‘@‘ (using password: YES)
- 正则表达式的性能评测
- 单证票据识别之关键信息提取
- 微信小程序报Cannot read property ‘setData‘ of undefined的错误
- MySQL5.5的安装步骤
- css属性的书写顺序
- jquery 读取 mysql_jquery 读取数据库
- 读 《异类》—马尔科姆·格拉德威尔 文摘
- 晶体(晶体谐振器)和晶振(晶体振荡器)的区别
- MySQL提权——udf提权
- 考驾照自我总结(待更新修正)
- 博客网站的选择兼开博通文
- 可!!Win10禁用驱动程序强制签名
- 使用python实现地理位置查询经纬度
- 如何利用Python强势破解今日头条(巨量)滑块验证码!