例如,我有一个外部表 dump_table
,按年、月、日进行分区。如果我跑了 show create table dump_table
我得到以下信息:
CREATE EXTERNAL TABLE `dump_table`
(
`col_name` double,
`col_name_2` timestamp
)
PARTITIONED BY (
`year` int,
`month` int,
`day` int)
CLUSTERED BY (
someid)
INTO 32 BUCKETS
ROW FORMAT SERDE
'org.apache.hadoop.hive.ql.io.orc.OrcSerde'
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
LOCATION
'hdfs://somecluster/test.db/dump_table'
TBLPROPERTIES (
'orc.compression'='SNAPPY',
'transient_lastDdlTime'='1564476840')
我必须将它的列改为大写,并添加新的列,这样它就会变成:
CREATE EXTERNAL TABLE `dump_table_2`
(
`COL_NAME` DOUBLE,
`COL_NAME_2` TIMESTAMP,
`NEW_COL` DOUBLE
)
PARTITIONED BY (
`year` int,
`month` int,
`day` int)
CLUSTERED BY (
someid)
option:1
作为一个选择,我可以运行 Change
(此处为ddl引用)更改列名,然后向其中添加新列。但问题是我没有这个表的任何备份,它包含了大量的数据。如果出了什么问题,我可能会丢失数据。
我可以创建一个新的外部表并从中逐分区迁移数据吗 dump_table
至 dump_table_2
? 这个迁移的查询是什么样子的?
有没有更好的方法来实现这个用例?请帮忙
1条答案
按热度按时间w41d8nur1#
您可以使用新列创建新表dump\u table\u 2并使用sql加载数据: