このApacheHiveコードの背後にある本当の意味を理解するのに問題があります。誰かが、このコードが本当に何かをしているのかどうか説明してもらえますか?
ALTER TABLE a RENAME TO a_tmp;
DROP TABLE a;
CREATE TABLE a AS SELECT * FROM a_tmp;
ALTER TABLE a RENAME TO a_tmp;
a
これにより、テーブルの名前をに変更できますa_tmp
。
a
テーブルが最初にを指しているとしましょう。/user/hive/warehouse/a
このコマンドを実行すると、データはに移動され/user/hive/warehouse/a_tmp
、のコンテンツは/user/hive/warehouse/a
存在しなくなります。HDFSディレクトリを移動するこの動作は、Hiveの最新バージョンにのみ存在することに注意してください。それ以前は、RENAME
コマンドはメタストアを更新するだけで、HDFSのディレクトリを移動していませんでした。
同様に、show tables
afterを実行すると、それa
はもう存在しませんが、存在していることがわかりa_tmp
ます。a
メタストアに登録されていないため、その時点でクエリを実行できなくなります。
DROP TABLE a;
a
すでに名前を変更しているため、これは基本的に何もしませんa_tmp
。したがってa
、メタストアにはもう存在しません。何もすることがないので、これでも「OK」と表示されます。
CREATE TABLE a AS SELECT * FROM a_tmp;
と呼ばれる新しいテーブルを作成し、a
それをメタストアに登録するように求めています。また、(以前にa_tmp
コピーした)と同じデータを入力するように求めています。a
つまり、最初のテーブルを新しいテーブルに移動してから、新しいテーブルを元のテーブルにコピーして戻すので、これらのクエリが行うのは、最初のデータをとの両方に複製することだけa
ですa_tmp
。