3

このApacheHiveコードの背後にある本当の意味を理解するのに問題があります。誰かが、このコードが本当に何かをしているのかどうか説明してもらえますか?

ALTER TABLE a RENAME TO a_tmp;
DROP TABLE a;
CREATE TABLE a AS SELECT * FROM a_tmp;
4

1 に答える 1

4
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 tablesafterを実行すると、それ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

于 2013-01-21T21:49:47.020 に答える