web-dev-qa-db-ja.com

hive-データと一緒に外部Hiveテーブルを削除する方法

使ってます

drop table <table_name>

同じスキーマと名前でテーブルを再作成すると、古いデータが返されます。 hdfsファイルシステムからテーブルディレクトリを削除して、データを完全に削除する必要がありますか?

12
amrk7

削除する前に、外部テーブルを内部テーブルに変更する必要があります。

beeline> ALTER TABLE $tablename SET TBLPROPERTIES('EXTERNAL'='False'); // make the table as internal

その後:

beeline> drop table $tablename; //if you drop the table data will be dropped as well.
2
HISI

Penszに同意しますが、若干の変更はありますが、ドロップする必要はありませんテーブルです。外部のhdfsファイルを新しいファイルで置き換えます(置き換えられたファイルの構造は同じである必要があります)。前の表のselect *を実行すると、古いデータではなく新しいデータが含まれていることがわかります。 1。

外部テーブルは基本的に、データのスキーマとファイルの場所のみを示します。多くのファイルを同じ場所に追加でき、テーブルにはこれらのファイルに関連するすべてのデータが自動的に含まれます。同様に、任意のデータを置き換えることができ、自動的にテーブルにこれが反映されます。

2
Nicole Hu

より多くのhdfsスペースが必要な場合を除いて、hdfs内のディレクトリを削除する必要はありません。

新しいデータを置き換えたい場合は、hdfsのファイルを置き換えるだけです。

他の用途にテーブル名を使用したい場合は、テーブルをドロップし、hdfs内のディレクトリを削除します。

実際、これはデータを失うことなく、テーブルのスキーマを変更できる(たとえば、フィールド名を変更したり、2つのフィールドを1つのフィールドに連結したりしたい)非常に便利な機能だと思います。

1
pensz

あなたはこのリンクをチェックすることができます、それは役立つかもしれません

https://issues.Apache.org/jira/browse/Hive-4367

1
shashaDenovo

最初に、次のコマンドを使用してテーブルのパスを取得します。

ハイブ>フォーマットされたデータベース名。テーブル名を記述してください;

次に、説明に表示される場所全体をコピーします。例:/user/Hive/warehouse/database_name.db/table_name

この後、次のコマンドを使用して、指定されたテーブルからすべてのデータを切り捨てます。

***Hive> dfs -rmr /user/Hive/warehouse/database_name.db/table_name;*** 

OR

***Hive> dfs -rm -r /user/Hive/warehouse/database_name.db/table_name;***

次に、DROP TABLEコマンドを使用して完全にワイプできます。

1
Sachin Devhade

実際、EXTERNAL TABLESを削除してもデータは削除されません。

TRUNCATE TABLEを使用して、データを取り除くことができます。

ここにドキュメント: https://cwiki.Apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-TruncateTable

次に、必要に応じてDROP TABLEを使用してスキーマを削除します

0
JohnConnor

外部テーブルの場合、テーブルを削除すると、スキームが削除されます

だからあなたは手動でHDFSからファイルを削除する必要があります

または新しいテーブルを作成し、tblプロパティで別のファイルの場所を指定します

0
Viswanath