ハイブパーティション

https://www.cnblogs.com/yongjian/p/6640951.html

別の従来のリレーショナルデータベース・パーティションを持つハイブゾーニング概念。

従来のデータベース・パーティション:パーティションが実際のデータを格納するセグメントに独立して存在Oracleで、それは自動的に挿入されたパーティションデータの時に割り当てられます。

ハイブパーティションは:ハイブが実際HDFSの抽象的に格納されているので、ハイブは、ディレクトリ名にパーティション名相当する、サブパーティション名は、サブディレクトリ名ではなく、実際のフィールドです。

 

データを挿入するときに我々は、パーティションを指定する場合、実際には、新しいディレクトリまたはサブディレクトリを作成することを理解し、または元のディレクトリ内のデータファイルを追加することができます。

 

ハイブは、パーティションを作成します

 

なぜなら彼らハイブは、によって定義されたキーワードのパーティション分割されているが、あなたは、テーブルを作成するときに注意してください、句の列によって仕切らは正式な表の列に定義されていますが、データファイルは、これらの列にハイブが含まれていませんディレクトリの名前です。

 

静的パーティション

静的パーティションテーブルpar_tab、単一のパーティションを作成します

「」によって終了(セックスの文字列)行形式区切られたフィールドで仕切られたテーブルpar_tab(名前文字列、国文字列)を作成します。

次のように降順参照テーブル構造によるこの時間はあります

コードをコピー
ハイブ> DESC par_tab。
OK 
名の文字列                                       
国民列                                       
セックス列                                       
          
#パーティション情報           
#1 COL_NAMEのDATA_TYPEコメント              
          
のセックス列                                       
の時間が取ら:0.038秒、フェッチ:8行(複数可)
コードをコピー

、ローカルデータファイルのpar_tab.txt、「名前/国籍」の内容を準備するパーティションとして性別(男女)になります

1月、中国の
メアリー、アメリカ
Lilei、中国
heyong、中国
yiku、日本
絵文字、日本

テーブルにデータを挿入する(実際には、ロード操作は、HDFSハイブディレクトリにファイルを移動することと等価です)

テーブルpar_tabパーティションにデータをロードし、ローカルINPATH「/home/hadoop/files/par_tab.txt」(性別=「男」);

今回は3になっハイブpar_tabテーブル、クエリ、注意を払います。

コードをコピー
ハイブ> par_tabから選択*; 
OK 
1月の中国の男
メアリーアメリカ人
の中国の男はlilei 
中国の男性heyong 
yiku日本の男を
日本の男絵文字
時間取ら:0.076秒、フェッチされた:6行(複数可)
コードをコピー

ビューpar_tabディレクトリ構造

[Hadoopの@ hadoop001ファイル] $ HadoopのDFS -lsr /ユーザー/ハイブ/倉庫/ par_tab 

drwxr-XR-X - Hadoopのスーパーグループ0 2017年3月29日8時25分/ユーザー/ハイブ/倉庫/ par_tab /性別=男性
-rwxr -X-R-X 1つのHadoopのスーパーグループ71 2017年3月29日午前8時25 /user/hive/warehouse/par_tab/sex=man/par_tab.txt

これは、新しいパーティションテーブルで見ることができ、システムは、最終的には、ディレクトリ(テーブル名)を作成するために、ハイブの下にパス/ユーザー/ハイブ/倉庫/データウェアハウスをデフォルトして、性別=男(パーティション名)のサブディレクトリを作成し、されますパーティションの名前で、実際のデータファイルを格納します。

あなたは、ファイルなど、他のデータファイルのデータを挿入した場合

ユリ、中国の
ナンシー、中国
hanmeimei、アメリカ

挿入データ

負荷データテーブルpar_tabパーティション(性別=「女性」)にローカルINPATH「/home/hadoop/files/par_tab_wm.txt」。

ビューpar_tabテーブルのディレクトリ構造

[Hadoopの@ hadoop001ファイル] $ HadoopのDFS -lsr /ユーザー/ハイブ/倉庫/ par_tab 
drwxr-XR-X - Hadoopのスーパーグループ0 2017年3月29日8時25分/ユーザー/ハイブ/倉庫/ par_tab /性別=男性
-rwxr -X-R-X 1つのHadoopのスーパーグループ71 2017年3月29日8:25 /user/hive/warehouse/par_tab/sex=man/par_tab.txt 
drwxr-XR-X - Hadoopのスーパーグループ0 2017年3月29日8時35 /ユーザ/ハイブ/倉庫/ par_tab /性別=女性
-rwxr-XR-X 1 Hadoopのスーパーグループ41 2017年3月29日午前8時35 /user/hive/warehouse/par_tab/sex=woman/par_tab_wm.txt

男性と女性を含め、挿入の最後の2つの結果を見ます

コードをコピー
ハイブ> par_tabから選択*; 
OK 
1月の中国の男
メアリーアメリカ人は
中国の男lilei 
中国の男性heyong 
yiku日本の男を
日本絵文字男
ユリ中国の女性
ナンシー中国の女性
hanmeimeiアメリカ女性
の時間が取ら:0.136秒、フェッチ:9行(複数可)
コードをコピー

パーティションテーブルの列は、列の実際の定義されているため、クエリのパーティションデータ

ハイブ> par_tabから選択*どこ性別=「女性」; 
OK 
ユリ中国の女性
ナンシー中国の女性
hanmeimeiアメリカ女性
の時間が取ら:0.515秒、フェッチされた:3行(複数可)

 

par_tab_muilt以下の静的パーティションテーブルを作成し、複数のパーティション(性別+日付)

コードをコピー
ハイブ>テーブルpar_tab_muilt(名前文字列、国文字列)を作成する(性別文字列、DTの文字列)で仕切られた行形式区切り「」で終わるフィールド。
ハイブ>テーブルpar_tab_muiltパーティションにデータをロードし、ローカルINPATH '/home/hadoop/files/par_tab.txt'(性別= '男'、DT = '2017年3月29日'); 


[Hadoopの@ hadoop001ファイル] $ HadoopのDFS -lsr /ユーザー/ハイブ/倉庫/ par_tab_muilt 
drwxr-XR-X - Hadoopのスーパーグループ0 2017年3月29日午前8時45分/ユーザー/ハイブ/倉庫/ par_tab_muilt /性別=男
drwxr- XR-X - Hadoopのスーパーグループ0 2017年3月29日8時45分/ユーザ/ハイブ/倉庫/ par_tab_muilt /性別=男性/ DT = 2017年3月29日
-rwxr-XR-X 1つのHadoopスーパーグループ71 2017年3月29日午前8時45 /user/hive/warehouse/par_tab_muilt/sex=man/dt=2017-03-29/par_tab.txt
コードをコピー

目に見える、新しいテーブルに定義されたパーティションの順序は、ファイルディレクトリの順からこそ、この階層の、(サブディレクトリである父であるディレクトリ)、私たちはすべての人を照会判断した場合場合は、以下のすべての日付の男データはチェックアウトされます。もし唯一のクエリの日付パーティションが、親ディレクトリのセックス=男とセックス=女性がその日付のデータを持って、その後、ハイブは唯一のパーティションスキャン日付、フィルタなし性別パーティション(すなわち、クエリ結果がすべての性別を含めるようにトリミングされたパスを入力します)。

 

 

動的なパーティショニング

上記の静的パーティション場合は、まずどのようなパーティションの種類、および負荷データを書き込むための各パーティション、あまりにも迷惑を知るために時間を挿入する必要があります。使用動的パーティショニングは、上記の問題を解決するには、動的にクエリからのデータに基づいて、パーティションに割り当てることができます。実際には、動的および静的パーティションのパーティションの違いは、システム自体が選択したディレクトリパーティションを、指定しないことです。

まず、動的パーティショニング機能を開始

ハイブ>セットhive.exec.dynamic.partition =はtrue。

テーブルが2つの前者は、二つの列がパーティション化された後、性別、性別、日付DT、次のデータの名前と国籍国の名で、par_tabされていると仮定

コードをコピー
ハイブ> par_tabから選択*; 
OK 
ユリ中国の男性2013年3月28日
ナンシー中国の男2013年3月28日
hanmeimeiアメリカ人2013年3月28日
1月中国の男2013年3月29日
メアリーアメリカ人2013年3月29日
lilei中国の男2013年3月29日
heyong中国の男2013年3月29日
yiku日本の男2013年3月29日
絵文字日本の男2013年3月29日
かかった時間:1.141秒、フェッチ:9行(複数可)
コードをコピー

今私は、この表の内容は、内の別のテーブルpar_dnmに直接挿入されている、とリアライズのセックスは、静的なパーティションです入れ、DTダイナミック・パーティショニング(終了日に指定されていない、自分の配分の決定にシステムを許可します)

ハイブ>挿入上書きテーブルpar_dnmパーティション(性別= '男'、DT)
    >名前を選択し、国家、par_tabからDT;

ディレクトリ構造の外観を挿入した後

drwxr-XR-X - Hadoopのスーパーグループ0 2017年3月29日10時32 /ユーザ/ハイブ/倉庫/ par_dnm /性別=男性
drwxr-XR-X - Hadoopのスーパーグループ0 2017年3月29日10時32 /ユーザ/ハイブ/倉庫/ par_dnm /性別=男性/ DT = 2013年3月28日
-rwxr-XR-X 1のHadoopスーパーグループ41 2017年3月29日10:32 /ユーザ/ハイブ/倉庫/ par_dnm /性別=男性/ DT = 2013 -03-28 / 000000_0 
drwxr-XR-X - Hadoopのスーパーグループ0 2017年3月29日10時32分/ユーザ/ハイブ/倉庫/ par_dnm /性別=男性/ DT = 2013年3月29日
-rwxr-XR-X 1 Hadoopのスーパーグループ71 2017-03-29午前10時32分/ユーザ/ハイブ/倉庫/ par_dnm /性別=男性/ DT = 2013年3月29日/ 000000_0

パーティションの数を見ます

ハイブ>パーティションpar_dnmを示し; 
OK 
性別=男/ DT = 2013年3月28日
性別=男/ DT = 2013年3月29日
かかった時間:0.065秒、フェッチ:2行(複数可)

動的パーティショニングは、成功を収めました。

 

動的分割はプライマリパーティションおよびサブパーティション静的カラム動的カラムの使用を許可しないので、作成するプライマリパーティションの全て、静的列に定義されている副パーティションを引き起こすことに注意してください。

動的なパーティショニングは、すべてのパーティション化列は動的なパーティション化列ですが、最初のパラメータhive.exec.dynamic.partition.modeを設定する必要がありますできます。

ハイブ>セットhive.exec.dynamic.partition.mode。
hive.exec.dynamic.partition.mode =厳格な

デフォルト値は、すべてのパーティション化列は、ユーザの意図が唯一のサブパーティションに動的パーティショニングを構築することです防止することができ、ダイナミックですが、不注意プライマリパーティション列の値を指定するのを忘れて、その意志を許可しないストリックであり、 DMLステートメントの多くをもたらすことは、短時間でシステムパフォーマンスに影響を与える(新しいフォルダの数に対応する)新しいパーティションを作成します。
だから我々は、設定したいです:

ハイブ>セットhive.exec.dynamic.partition.mode = nostrick。

 

 

すべてのエラーは、正しい通知してください。

おすすめ

転載: www.cnblogs.com/zourui4271/p/12198466.html