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三种建表方式的使用详解相关推荐

  1. Mysql 创建表及添加备注详解(create table)

    文章目录 1 概述 2 语法 2.1 创建 create table 2.2 修改 alter table 2.3 清空 truncate table 2.4 删除 drop table 3 扩展 3 ...

  2. db2中create table as的建表方式

    DB2没有类似oracle的create table as select来定义表的方式,所以DB2中把SELECT查询出来的结果定义为别的表比较麻烦! DB2定义表的3种方式: 首先创建一个例子表,再 ...

  3. java中html5表格_java:HTML(table表格,ul列表)和CSS(导入.css文件,三种定义颜色方式,三种样式选择器,a标签属性顺序,)...

    样式 /*background 背景*/ /*background-color: red; = background-color : red;*/ /*background-image: url(im ...

  4. html table拓宽,excel拉长单元格_excel调整单元格大小的方法步骤详解

    excel在单元格中要输入的数据太多了,二单元格的位置又太小了,怎么办,excel单元格的大小改怎么调,那就有阿呼告诉你两个可靠的方法吧.希望对你有帮助! excel调整单元格大小的方法一 1.打开一 ...

  5. Hive建表语句详解--CREATE TABLE

    创建表的三种方法 Hive创建表的方式(默认路径/user/hive/warehouse,也可以location指定,主要针对external表) 1.使用create命令创建一个新表,带分区 CRE ...

  6. Oracle创建表语句(Create table)语法详解及示例

    Oracle创建表语句(Create table)语法详解及示例   创建表(Create table)语法详解 1. ORACLE常用的字段类型ORACLE常用的字段类型有 VARCHAR2 (si ...

  7. SQL—— Create table as select 与 使用select查询结果创建新表

    Create table as select,有以下三种方式: create table table1 as select * from table2 where 1=2; 创建一个表结构与table ...

  8. Hive - Create TableDrop Table ALTER Table(中)

    译注:书接上篇,了解过创建表以及load data后,假如发现需要更改表字段类型或者添加表字段,怎么办?这篇文章将进一步了解具体细节. This chapter explains how to alt ...

  9. mysql建表auto_increment_mysql create table auto_increment

    当插入记录时,没有为AUTO_INCREMENT明确指定值,则等同插入NULL值 把0插入AUTO_INCREMENT数据列的效果与插入NULL值一样.但不建议这样做,还是以插入NULL值为好. 如果 ...

最新文章

  1. 如何在Linux系统上部署接口测试环境
  2. 我作为一个程序员,除了写程序还会干什么?什么都不会了!
  3. android 如何监听应用前后台切换
  4. 实验——Windows常用网络测试命令
  5. 英语语音中的调核例子_英语歌曲在英语教学中扮演的重要角色
  6. ERROR1045(28000): AccessforuserODBC‘@‘ (using password: YES)
  7. 正则表达式的性能评测
  8. 单证票据识别之关键信息提取
  9. 微信小程序报Cannot read property ‘setData‘ of undefined的错误
  10. MySQL5.5的安装步骤
  11. css属性的书写顺序
  12. jquery 读取 mysql_jquery 读取数据库
  13. 读 《异类》—马尔科姆·格拉德威尔 文摘
  14. 晶体(晶体谐振器)和晶振(晶体振荡器)的区别
  15. MySQL提权——udf提权
  16. 考驾照自我总结(待更新修正)
  17. 博客网站的选择兼开博通文
  18. 可!!Win10禁用驱动程序强制签名
  19. 使用python实现地理位置查询经纬度
  20. 如何利用Python强势破解今日头条(巨量)滑块验证码!

热门文章

  1. android智能手机推荐,强悍性能 7款Android高端智能手机推荐
  2. executeBatch()详解
  3. switchyomega 下载地址及列表
  4. MRTG流量监控图配置说明
  5. Python学习之费波纳茨数列
  6. 如何实施企业采购战略?
  7. Mysql学习笔记day1 --三天学完mysql所有知识点
  8. 浏览网页时出现的错误代码
  9. 自制电吉他效果器 DIY PCB(一)前言
  10. 音调识别 php,php 实现 汉字转拼音