源表建表语句
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 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