Hiveは外部テーブルパーティションの名前を変更し、HDFSディレクトリ名を変更してデータを検出しません

  • 問題の説明:

Hiveによって作成された外部テーブルtable_1には、日単位で格納されるパーティションがあります。dt= '2020-04-01'

Hiveコマンドを使用してALTER TABLEパーティションの名前をdt = '2020-03-31'に変更しました。また、対応するHDFSディレクトリをdt = '2020-03-31'に変更します。

しかし、クエリデータが空であることがわかりましたか?

 

 

  • 理由:

これは外部テーブルなので、Hiveのメタデータレコードとデータレコードは別々に管理され、テーブルの実際のデータストレージはHDFS管理(NameNode)に依存します。

ここでは、ALTER TABLEを使用して外部テーブルのパーティションを変更します。ソフトリンクHDFSのdt = '2020-04-01'ディレクトリは変更されておらず、通常どおりデータをクエリできます。

HDFSディレクトリとテーブルのパーティション名dt = '2020-03-31'の名前を一貫させるために変更すると、実際には、SQLが実行されているときに、Hiveのメタデータも検索されます(レコードは依然としてdt = '2020-03-31です) 「はい」、

ただし、このソフトリンクハイブのdt = '2020-03-31'およびHDFSのdt = '2020-04-01'は無効であり、dt = '2020-04-01'は見つかりませんでした。したがって、データを照会することはできません。Hive-eを使用して実行すると、対応するエラーレポートも表示されます。

 

 

したがって、変更したパーティションがデータを正しくロードできるようにするために、元のパーティションdt = '2020-03-31を削除し、新しいdt =' 2020-03-31を作成します。前の手順では、 HDFSディレクトリのdt = '2020-04-01'をdt = '2020-03-31'に変更します。外部テーブルの特性上、テーブルの作成時にテーブルディレクトリを手動で指定したため、ソフトリンクは、Hiveの場合はdive = '2020-03-31、HDFSの場合はdt =' 2020-03-31として設定されています。この時点で、ディレクトリは一貫しており、データを照会でき、問題は解決されています。

おすすめ

転載: blog.csdn.net/u012965373/article/details/105538977