Hive_パーティションテーブル

パーティションテーブルは、実際のファイルシステムHDFSフォルダ上の別のファイルに対応している、フォルダにはすべてのデータファイルのパーティションです。ハイブのパーティションを分割ディレクトリでは、サービスに応じた小さなデータセットに大きなデータセットを必要としています。クエリクエリは、WHERE句の式で必要とされる指定されたパーティションを選択すると、このような問合せの効率は多くのことを改善します。

パーティションテーブルの基本的な操作

1。パーティションテーブルの導入(日付に従って、ログ管理の必要性)

/ユーザ/ハイブ/倉庫/ log_partition / 20170702 / 20170702 の.log
 /ユーザ/ハイブ/倉庫/ log_partition / 20170703 / 20170703 の.log
 /ユーザ/ハイブ/倉庫/ log_partition / 20170704 / 20170704の.log

2。パーティションテーブルの構文を作成します。

ハイブ(デフォルト)> 表dept(作成
DEPTNO int型、DNAME 、LOC の文字列を
(ヶ月で仕切られた文字列
で終了した行形式区切られたフィールド' \ tの' ;

注意:パーティションフィールドがすでにテーブルのデータに存在しない、あなたはリストにダミーのパーティションフィールドとして考えてもよいです。

3。パーティション表にデータをロードします

ハイブ(デフォルト)>ロード・データのローカルINPATH ' /opt/module/datas/dept.txt 'テーブルにデフォルトの .deptパーティション(月= ' 201709 ' ); 
ハイブ(デフォルト)>ロード・データのローカルINPATH ' /opt/module/datas/dept.txt 'テーブルにデフォルトの .deptパーティション(月= ' 201708 ' ); 
ハイブ(デフォルト)>ロード・データのローカルINPATH ' /opt/module/datas/dept.txt 'テーブルにデフォルトの .deptパーティション(月= ' 201707');

注意:パーティションテーブルのデータがロードされると、パーティションを指定する必要があります。

 

 

 

 

4。クエリデータパーティションテーブル

単一パーティションのクエリ

ハイブ(デフォルト)> を選択 * から dept_partition 月= ' 201709 ' ;

マルチパーティション共同問い合わせ

ハイブ(デフォルト)> を選択 * から dept_partition 月= 201709 
              組合選択 * から dept_partition 月= 201708 
              組合選択 * から dept_partition 月= 201707 ; 
_u3.deptno _u3.dname _u3.loc _u3.month 10       会計NEW YORKは         201707 10は、       NEW YORK会計します        
              
              


201708 
10       NEW YORK会計         201709 
20       RESEARCH DALLAS   201707 
20       RESEARCH DALLAS   201708 
20       RESEARCH DALLAS   201709 
30       SALES CHICAGO 201707 
30       SALES CHICAGO 201708 
30       SALES CHICAGO 201709 
40       OPERATIONSボストン   201707 
40       OPERATIONSボストン   201708 
40       OPERATIONSボストン   201709

5。地区を追加

単一のパーティションを作成します。

ハイブは、(デフォルト)> ALTER TABLEのdept_partition(=月パーティションを追加' 201706 ');

複数のパーティションを作成します。

ハイブは、(デフォルト)> ALTER TABLEのdept_partitionパーティション(月=追加' 201705 ')パーティションを(月= ' 201704 ');

6。パーティションを削除

単一のパーティションを削除するには

ハイブ(デフォルト)>テーブルdept_partitionドロップパーティション(月=変える' 201704を');

複数のパーティションを削除します。

ハイブは、(デフォルトでは)>(=月表dept_partitionドロップパーティションを変更' 201705 '(月=)、パーティション' 201706 ');

7。どのように多くのパーティションのパーティションテーブルを見ます

ハイブ>ショーパーティションのdept_partition。

8。パーティションテーブルの構造を見ます

ハイブ> DESCフォーマットさdept_partition。

#パーティション情報           
#1 COL_NAME DATA_TYPEコメント              
月の                    文字列    

パーティションテーブルノート

1。セカンダリ・パーティション表の作成

ハイブ(デフォルト)> テーブルdept_partition2(作成
               DEPTNO int型、DNAME 、LOC の文字列を
               (ヶ月で仕切られた文字列、日の文字列
               で終了した行形式区切られたフィールド\ tの ;

2。通常のデータのロード

(1)二次パーティションテーブルにデータをロードするの

ハイブ(デフォルト)>ロード・データのローカルINPATH ' /opt/module/datas/dept.txt ' テーブルに
  デフォルトの .dept_partition2パーティション(月= ' 201709 '、日= ' 13 ');

(2)データのクエリを分配

ハイブ(デフォルト)> を選択 * から dept_partition2 どこヶ月= ' 201709 'と日= ' 13 ' ;

3。データは直接、ディレクトリパーティションにアップロードされるので、パーティションテーブルと3通りの方法で生成された関連するデータ

(1)一つの方法:データ復旧をアップロードした後

       データをアップロード

ハイブ(デフォルト)> DFS -mkdir - P
  /ユーザー/ハイブ/倉庫/ dept_partition2 /月= 201709 /日= 12 ; 
ハイブ(デフォルト)> DFS -put /opt/module/datas/dept.txt /ユーザー/ハイブ/倉庫/ dept_partition2 /月= 201709 /日= 12 ;

       クエリデータ(クエリデータだけでアップロードすることはできません)

ハイブ(デフォルト)> を選択 * から dept_partition2 どこヶ月= ' 201709 'と日= ' 12 ' ;

  修理オーダーを実行

ハイブ> MSCK修理テーブルdept_partition2。

  再びデータを照会

ハイブ(デフォルト)> を選択 * から dept_partition2 どこヶ月= ' 201709 'と日= ' 12 ' ;

(2)第二の方法:データ・パーティションをアップロードした後に添加します

       データをアップロード

ハイブ(デフォルト)> DFS -mkdir - P
  /ユーザー/ハイブ/倉庫/ dept_partition2 /月= 201709 /日= 11 ; 
ハイブ(デフォルト)> DFS -put /opt/module/datas/dept.txt /ユーザー/ハイブ/倉庫/ dept_partition2 /月= 201709 /日= 11 ;

       パーティションの実行を追加

ハイブ(デフォルト)>パーティションを追加dept_partition2テーブルを変更(月= ' 201709 ' 、日 = ' 11 ');

       クエリデータ

ハイブ(デフォルト)> を選択 * から dept_partition2 どこヶ月= ' 201709 'と日= ' 11 ' ;

(3)3つの方法:あなたは、データパーティションをロードするためにフォルダを作成した後、

       ディレクトリを作成します

ハイブ(デフォルト)> DFS -mkdir - P
  /ユーザー/ハイブ/倉庫/ dept_partition2 /月= 201709 /日= 10 ;

  データをアップロード

ハイブ(デフォルト)>ロード・データのローカルINPATH ' /opt/module/datas/dept.txt ' テーブルに
 dept_partition2パーティション(月 = ' 201709 '、日= ' 10 ');

  クエリデータ

ハイブ(デフォルト)> を選択 * から dept_partition2 どこヶ月= ' 201709 'と日= ' 10 ' ;

 

おすすめ

転載: www.cnblogs.com/Tunan-Ki/p/11795782.html