2016-05-10 2 views
1

パーティションテーブルをハイブで作成する場合は、必ずパーティションカラムの最後のカラムを選択する必要があります。 パーティションとして第1列を選択した場合、フィルタデータは書き込めません。パーティションの最初の列を選択する方法はありますか?ハイブパーティションテーブルの最初のカラム

答えて

0

ハイブでは、テーブルをパーティション化する場合は、テーブル作成時に最初にパーティション列を定義する必要があります。 &あなたは次のように指定する必要があるテーブルにデータを取り込むながら:

を使用すると、最後の列に基づいて分割することができます使用して、このように

「partitioned_table PARTITION(ステータス)SELECT ID、名前、temp_tblからのステータス。INSERT INTO」のみ。最初の列に基づいてパーティションを作成する場合。あなたはそのためにMapreduceの仕事を書かなければなりません。それが利用可能な唯一のオプションです。

0

あなたが直面している問題は、ローカルシステムまたはhdfsに既にテーブル "ソース"があり、パーティションテーブルにアップロードしたいということです。また、ソース表の最初の列をハイブに分割する必要があります。ソーステーブルにヘッダーがないので、ハイブの宛先フォルダに直接ファイルをアップロードしようとすると、ここで何もできません。私が知っている唯一の代替方法は、構造がソースファイルとまったく同じハイブでパーティション化されていないテーブルを作成することです。最初に非パーティション表にソース・データをアップロードし、非パーティション表からパーティション表にデータをコピーします。 は、あなたは、パラメータの順序は、ここでの唯一のポイントですinsert overwrite table source partition(dept) select eid,ename,esal,dept from nopart; コマンドによって動的パーティションを使用 create table nopart(dept string, esal int,ename string, eid int) このようにあなたがデータをアップロードし、この create table source(eid int, ename int, esal int) partitioned by (dept string) あなた以外に分配表があるように、ソースファイルがあるとします。

関連する問題