パーティションテーブルのハイブでは、サブバケットリストはそれほど一般的で、このスピーカーのパーティションテーブルではないかもしれないが、非常に一般的です。
コンセプト
パーティションテーブル
ハイブでは、テーブルを分割することができ、各ゾーンは、実際にファイルフォルダHDFSに対応するハイブ表です。
あなたは、マルチレイヤを経由して、フォルダを作成することができる多層パーティション。
データは、クリップファイルで分離されています
サブバレルテーブル
HDFSの各バケット上のファイルに対応する部品表のキット。
データファイルを分離することにより、
パーティション(サブバレル)を指定することができる場所で照会すると、クエリの効率を向上させます
パーティションテーブルの基本的な操作
1.パーティションテーブルを作成します。
指定されたパーティション、パーティションのフィールドタイプフィールドの増加の背後にある隔壁によって、複数のフィールドを追加することができるpartitoned、パスの前に親である、パスは、サブ続い
作成 テーブル student_p(IDのINT、名前ストリング、ストリングsexex、年齢INT 、DEPT列) に分配することによって(部分文字列) 終了行フォーマット区切られたフィールドによって 「」 保存されたとしてテキストファイルを。
テーブルパーティションテーブルは、フィールドを追加することに相当し、そのフィールドを異なる値に与えられ、各値は、パーティションに対応し、この値は、フォルダHDFSの名前に対応します
2.書き込みデータ
。1、zhangsan、F、30、A、
2、リージ、F、39、B、
。3、wangwu、M 26は、C、
別のパーティションを設定し、二回毎回書か
負荷データテーブルstudent_pパーティションにローカルINPATH「/usr/lib/hive2.3.6/2.csv」(部分= 321 )。
負荷データテーブルstudent_pパーティションにローカルINPATH「/usr/lib/hive2.3.6/2.csv」(部分= 456)。
長期鋸見るためにデータを書き込んだ後3.
ハイブ> SELECT * student_p;
OK
。1 zhangsan F 20は、河南321で
2リシF 30上海321
3 wangwu mの40北京321。
1 zhangsan F 20は、河南456である。
2リシF 30上海456
3 wangwu M 40北京456。
要した時間:0.287秒フェッチされた:6行(複数可)
4. HDFS上の長い鋸を見てください
5.パーティションを見ます
ハイブ> セレクト * から student_p 一部= 321。
6.データベースのメタデータ情報を見てみましょう
パーティションテーブルに格納されたパーティション情報
関連する他のパーティションテーブルがありますが、あなたが見ることができます
要約:各フォルダのパーティション、フォルダ、メタデータに格納されなければなりません。
このファイルは、メタデータにない場合、彼が存在していても、テーブルでパーティションのパーティションテーブルではありません以下に見えます
地区を追加
自動的にデータがロードされているパーティションを増やすだろう、あなたは、データをロードする別のパーティションを作成することはできません
パーティションを追加します。
ハイブ> 変更 テーブルを student_p 追加パーティションを(部分= 999)。
複数のパーティションを追加します。
ハイブ> 変更 テーブルを student_p 追加パーティションを(部分= 555)のパーティション(一部= 666)。
パーティションを削除
パーティションを削除
ハイブ> 変更 テーブル student_p ドロップパーティションを(部分= 555 )。 ドロップされた仕切り部= 555 OK の時間が取ら:0.675秒
複数のパーティションを削除します。
ハイブ> 変更 テーブル student_p ドロップパーティションを(部分= 666)、パーティション(部分= 999 )。 仕切り部落下= 666が 仕切り部ドロップ= 999 OK の時間が取ら:0.464秒
パーティションの数を見ます
ハイブ> ショーパーティションのstudent_p。 OK 一部= 321 部= 456 要した時間:0.28秒、フェッチされた:2行(複数可)
パーティションテーブルの構造を見ます
ハイブ> DESC フォーマットさstudent_p。 OK #のCOL_NAME DATA_TYPEコメント ID int型 名の文字列 sexex列 年齢 int型の DEPT列 #パーティション情報 #1 COL_NAMEの DATA_TYPEコメント 部分文字列 #詳細な表情報 データベース:hive1101 所有者:ルート CREATETIME:11月〜金01 02:00:25 PDT 2019 LastAccessTime:UNKNOWN 保持: 0 場所:HDFS:// hadoop10:9000 / USR / hive_test / student_pの 表の種類:MANAGED_TABLE
テーブルに関連付けられたデータ
私たちは、ディレクトリテーブルではなく、メタデータ内のフォルダであればの話の前に、その表は、このデータを見つけることです。
次に、どのように読み出され、このデータテーブルを置きますか?彼らは関連付けるために持っている、3つの方法があります
データ復旧をアップロードした後
1.直接HDFSにデータをアップロード
ハイブ> DFS - MKDIR - P / USR / hive_test / student_p /一部= 888 。 ハイブ> DFS -入れ/ USR / libに/ hive2。3.6 / 2の.csv / USR / hive_test / student_p /一部= 888。
HDFSは、ディレクトリリスト内のディレクトリとディレクトリに直接構築され、その後、このディレクトリにファイルをアップロード
2.クエリ無駄にデータパーティション、
3.修理テーブル
ハイブ> MSCK修理テーブルstudent_p。 OK パーティションない でメタストア:student_p:部分が= 888 修理:追加パーティションする student_pをメタストア:パート= 888 要した時間:0.502秒、フェッチされた:2行(複数可)
これは、メタデータにパーティションを追加することです
4.クエリデータを見つけることができます
データをアップロードするパーティションを追加した後
図12は、第1の上記の手順を実行します。
次に、パーティションテーブルに追加し、新しいフォルダがパーティションテーブルを作成するために追加されます
ハイブ> 変更 テーブルを student_p 追加パーティションを(部分= 888)。
あなたは、データパーティションをロードするためのフォルダを作成した後、
私たちは、この確かに負荷が自動的にパーティションを作成します知っているので、
2つのパーティションを作成します。
2つのパーティション、すなわち多層パーティション、すなわち多層パス
マルチレベルのパーティションテーブルを作成します。
作成 、テーブル student1102(IDのint型、名前文字列、sexex文字列、年齢int型、DEPT列) 分割により(月の文字列、日 INT ) 終了行形式区切られたフィールドで 「」 保存としてテキストファイルを。
月、日は月
負荷データ
ロード・データのローカルINPATH ' /usr/lib/hive2.3.6/2.csv ' に テーブル student1102パーティション(月= ' 11 '、日= 2)。
HDFSでは1は、どのように物語を伝えることができます
クエリデータ
ハイブ> を選択 * から student1102 月= 11 と日= 2 ;
そして、それを追加
データのロード
負荷データINPATH ' /ユーザ/ tuoming /試験/試験' に テーブル part_test_3パーティション(MONTH_ID = ' 201805 '、day_id = ' 20180509 ' )。追加 負荷データINPATH ' /ユーザ/ tuoming /試験/試験'上書きに テーブル part_test_3パーティション(MONTH_ID = ' 201805 '、day_id = ' 20180509 ' )。覆盖 挿入上書きテーブル part_test_3パーティション(MONTH_ID = '201805 'day_id = ' 20180509 ")を選択 * からpart_test_temp。覆盖 挿入 に part_test_3パーティション(MONTH_ID = ' 201805 '、day_id = ' 20180509 ')を選択 * から part_test_temp。追加
動的なパーティショニング
下記の参考資料
参考文献:
https://blog.csdn.net/afafawfaf/article/details/80249974