Hadoop 如果在移动配置单元表之前移动配置单元表数据文件,会发生什么情况?

Hadoop 如果在移动配置单元表之前移动配置单元表数据文件,会发生什么情况?,hadoop,hive,hdfs,hive-partitions,hiveddl,Hadoop,Hive,Hdfs,Hive Partitions,Hiveddl,我正在尝试将表的位置移动到新目录。假设原始位置是/data/dir。例如,我正在尝试以下内容: hadoop fs -mkdir /data/dir_bkp hadoop fs -mv /data/dir/* /data/dir_bkp 然后执行配置单元命令,例如: ALTER TABLE db.mytable RENAME TO db.mytable_bkp; ALTER TABLE db.mytable_bkp SET LOCATION /data/dir_bkp; 在更改表的位置之前移

我正在尝试将表的位置移动到新目录。假设原始位置是
/data/dir
。例如,我正在尝试以下内容:

hadoop fs -mkdir /data/dir_bkp
hadoop fs -mv /data/dir/* /data/dir_bkp
然后执行配置单元命令,例如:

ALTER TABLE db.mytable RENAME TO db.mytable_bkp;
ALTER TABLE db.mytable_bkp SET LOCATION /data/dir_bkp;

在更改表的位置之前移动目录文件可以吗?运行这些命令后,表
mytable\u bkp
是否会像以前一样填充?

执行
mv
命令后,原始表将变为空。因为mv删除了数据文件

重命名表后,该表为空,因为它的位置为空

执行
ALTER TABLE SET LOCATION
后,表为空,因为分区已装入旧位置(现在为空)。很抱歉在此步骤之前误导了您。重命名表后,分区保持重命名前的状态。每个分区通常可以在表位置之外有自己的位置

如果表是托管的,则将其设置为外部:

alter table table_name SET TBLPROPERTIES('EXTERNAL'='TRUE'); 
现在,删除table并使用新位置创建table,然后运行MSCK创建分区:

MSCK [REPAIR] TABLE tablename;
如果您使用的是Amazon EMR,请运行
altertable tablename恢复分区而不是MSCK

它是分区的。因此,我只需要在末尾添加
MSCK REPAIR TABLE db.mytable_bkp
,即使先移动文件,备份表仍然会被填充?谢谢。那是一个位置错误。但是如果在位置包含数据的情况下加载表,那么如果我首先移动文件,表不是空的吗?因为在我移动表的位置之前,该位置没有数据。@leftjoin感谢您的帮助。我执行了上述命令,可以看到我的数据从
dir
移动到
dir\u bkp
,但即使在运行
msck repair table db.mytable\u bkp
之后,表仍然是空的。检查显示分区-分区是否安装到旧位置?表是外部的还是管理的?如果是外部的,您可以尝试删除并创建MSCK,然后再次运行。我想这可能是分区装载到旧位置的问题。如果该表是托管的,请在删除前将其设置为外部