パーティションテーブルは、実際のファイルシステム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 ' ;