-
問題の説明:
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として設定されています。この時点で、ディレクトリは一貫しており、データを照会でき、問題は解決されています。