create table ...as备份表和create table xxx like xxx 复制表结构

使用create table …as备份表

源表建表语句

CREATE TABLE dc_ods.miu_company_member_acct_itme_info_ods (
  acctitemid STRING,
  memberid STRING,
  acct_type_code STRING,
  total_amount DECIMAL(10,0),
  freeze_amount DECIMAL(10,0),
  overdue_amount DECIMAL(10,0),
  expired_amount DECIMAL(10,0),
  valid_amount DECIMAL(10,0),
  data_version DECIMAL(10,0),
  acct_item_state STRING,
  oper_id STRING,
  create_time STRING,
  update_time STRING,
  brand_code STRING,
  brand_name STRING,
  used_amount DECIMAL(10,0) COMMENT '已使用积分',
  ods_update_time STRING COMMENT 'ODS 入库时间'
)
PARTITIONED BY (
  partition_date INT
)
WITH SERDEPROPERTIES ('serialization.format'='1')
STORED AS PARQUET

备份源表语句 CTAS

create table miu_company_member_acct_itme_info_ods_0619 as select * from  miu_company_member_acct_itme_info_ods;

备份表建表语句

CREATE TABLE dc_ods.miu_company_member_acct_itme_info_ods_0619 (
  acctitemid STRING,
  memberid STRING,
  acct_type_code STRING,
  total_amount DECIMAL(10,0),
  freeze_amount DECIMAL(10,0),
  overdue_amount DECIMAL(10,0),
  expired_amount DECIMAL(10,0),
  valid_amount DECIMAL(10,0),
  data_version DECIMAL(10,0),
  acct_item_state STRING,
  oper_id STRING,
  create_time STRING,
  update_time STRING,
  brand_code STRING,
  brand_name STRING,
  used_amount DECIMAL(10,0),
  ods_update_time STRING,
  partition_date INT
)
STORED AS TEXTFILE

hive中用CTAS创建表时要注意如下事项:

1.hive中用CTAS 创建表,所创建的表统一都是非分区表,不管源表是否是分区表。所以对于分区表的创建使用create table …as一定要注意分区功能的丢失。当然创建表以后可以添加分区,成为分区表。注意如果源表是非分区表则没有这个问题。

2.如果使用create table as select * 创建表时源表是分区表,则新建的表会多字段,具体多的字段个数和名称就是源表分区的个数和名称。当然如果select选择的是指定的列则不会有这种问题。

3.如果源表的存储格式不是TEXTFILE。则使用CTAS创建的表存储格式会变成默认的格式textfile。比如这里源表是RCFILE。而新建的表则是TEXTFILE。当然可以在使用create table …as创建表时指定存储格式和解析格式,甚至是列的名称等属性。

4.使用CTAS方式创建的表不能是外部表。

5.使用CTAS创建的表不能分桶表。

使用 create table xxx like xxx 复制表结构

复制表结构语句 create table xxx like xxx

create table miu_company_member_acct_itme_info_ods_0620 like miu_company_member_acct_itme_info_ods;

复制表的建表语句

CREATE TABLE dc_ods.miu_company_member_acct_itme_info_ods_0620 (
  acctitemid STRING,
  memberid STRING,
  acct_type_code STRING,
  total_amount DECIMAL(10,0),
  freeze_amount DECIMAL(10,0),
  overdue_amount DECIMAL(10,0),
  expired_amount DECIMAL(10,0),
  valid_amount DECIMAL(10,0),
  data_version DECIMAL(10,0),
  acct_item_state STRING,
  oper_id STRING,
  create_time STRING,
  update_time STRING,
  brand_code STRING,
  brand_name STRING,
  used_amount DECIMAL(10,0) COMMENT '已使用积分',
  ods_update_time STRING COMMENT 'ODS 入库时间'
)
PARTITIONED BY (
  partition_date INT
)
WITH SERDEPROPERTIES ('serialization.format'='1')
STORED AS PARQUET

create table xxx like xxx 的建表语句和 源表的建表语句除了表名不一致,其余一致。

Hive备份表最好先使用 使用 create table xxx like xxx 复制表结构,再使用 insert overwrite插入数据到备份表.

# 若源表是动态分区表,需要指定动态分区

insert overwrite table dc_ods.miu_company_member_acct_itme_info_ods_0620 partition (partition_date) select * from dc_ods.miu_company_member_acct_itme_info_ods;

参考博客:https://blog.csdn.net/qq_26442553/article/details/79593504


Shylin

你可能感兴趣的:(大数据,Hive)