ハイブ他の4つのテーブル、パーティションテーブル、内部、外部のテーブル、テーブルバレル

ハイブ4つのテーブル型内部テーブル、外部のテーブル、パーティションテーブルと浴槽表

I.概要

全体的にハイブ4つのテーブルがあります:外部テーブル、内部テーブル(管理表)、パーティションテーブル、バレルのテーブルが。さまざまな要件に対応します。ここでは主に、各種の除外テーブルの作成、およびロード・データ方法。

第二に、特定のコンテンツ

1.内部表

内部テーブルと負荷データを作成します。

  1.  
    作成(テーブルemp_innerを
  2.  
    EMPNO int型、
  3.  
    ENAMEの 文字列、
  4.  
    仕事の 文字列、
  5.  
    MGRの int型、
  6.  
    HIREDATE 文字列、
  7.  
    SAL 、ダブル
  8.  
    COMMの ダブル、
  9.  
    DEPTNO のint
  10.  
  11.  
    形式区切りフィールド終端は「\ t」の
  12.  
    LOCATION '/user/hive/warehouse/hadoop.db/emp';

2.外部表

(1)概要:

  ログ分析が一緒に複数のチームを必要とする場合には、分析が行われた後に作成されたテーブルを削除することができます。しかし、通常のテーブルの削除は、他のチームの分析に影響を与える可能性があり、データを削除して、データを簡単に削除することはできませんログに記録されます。そのため、外部表の必要性は、それが対応するHDFS上のデータを削除しない、外部表を削除します。

(2)外部のテーブルを作成します

  1.  
    作成EXTERNAL (テーブルdept_extを
  2.  
    DEPTNO int型、
  3.  
    DNAME 文字列、
  4.  
    LOC の文字列
  5.  
  6.  
    行の形式は、区切られたフィールドの終了により、「\ tを」;
  7.  
    ロード・データのローカルINPATH 「/opt/datas/dept.txt」テーブルdept_ext。

(3)は、外側テーブルと内側テーブルとの間の差を比較し
    、外部テーブルを削除するために、データが変更されない、単にメタデータのMySQLを変更するが、内部テーブル(管理テーブル)を削除され、データは削除されます。

    要約:の内部と外側テーブルハイブ差
        1時)テーブルを作成する:あなたが内部テーブルを作成すると、データウェアハウスのデータポイントのパスに移動します。あなたは、外部表を作成した場合、レコードのみデータ・パス、データが任意の位置にありません変更。
        2)あなたは、テーブルを削除する場合:削除されたテーブルでは、内部テーブルおよびデータのためのメタデータが一緒に削除され、外部のテーブルデータのみを削除しないでください、メタデータを削除します。ソース・データの共有を容易にするために、データのような外部のテーブル比較的安全で、より柔軟な組織

3、一時テーブル

(1)それは何ですか

中間解析は、ハイブクライアントを閉じた後、一時テーブルが消えます。主に設定された中間結果を格納するために重要な、重要でないテーブルではありません。

(2)一時テーブルを作成し、データをロードします

  1.  
    作成TEMPORARY (テーブルdept_tmpを
  2.  
    DEPTNO int型、
  3.  
    DNAME 文字列、
  4.  
    LOC の文字列
  5.  
  6.  
    行の形式は、区切られたフィールドの終了により、「\ tを」;
  7.  
     
  8.  
    ロード・データのローカルINPATH 「/opt/datas/dept.txt」テーブルdept_tmp。

(3)表示位置情報

  1.  
    DESCフォーマットさdept_tmp。
  2.  
    場所:HDFS:/ /172.19.199.187:8020/tmp /ハイブ/ Hadoopの/68174383-f427-4629-9707-0ab1c9b07726/_tmp_space.db/d872efec- 1294- 48bは0- 9071- 31cf98d4640 0
  3.  
    表の 種類:MANAGED_TABLE

図4に示すように、パーティションテーブル[***]

(1)それは何ですか

共通テーブル:日付=「20171209」ログから*を選択し、プロセスが実行されます。データクエリの完全なテーブルを、フィルタリング操作の前に。

パーティションテーブルは:日付=「20171209」ログから選択*、プロセスは実行されます、対応するファイル内のデータパスが直接ロード。大量のデータに適した、あなたはすぐにデータがパーティションによって照会されるように見つけることができ、パーティションテーブルの主な役割は、クエリの効率を改善することです。

(2)パーティションと負荷データを作成します

  1.  
    作成(テーブルemp_partを
  2.  
    EMPNO int型、
  3.  
    ENAMEの 文字列、
  4.  
    仕事の 文字列、
  5.  
    MGRの int型、
  6.  
    HIREDATE 文字列、
  7.  
    SAL 、ダブル
  8.  
    COMMの ダブル、
  9.  
    DEPTNO のint
  10.  
    )パーティション (で`datetime`の文字列)
  11.  
    行の形式は、区切られたフィールドの終了により、「\ tを」;
  12.  
     
  13.  
    ロード・データのローカルINPATH '/opt/datas/emp.txt' テーブルemp_partのパーティション(`datetime` = '20171209')。
  14.  
    ロード・データのローカルINPATH '/opt/datas/emp.txt' テーブルemp_partのパーティション(`datetime` = '20171208')。
  15.  
    [フォルダは、二つのHDFSに形成され、emp.txt内部に格納されています]
  16.  
    /user/hive/warehouse/hadoop.db/emp_part/datetime=20171208
  17.  
    /user/hive/warehouse/hadoop.db/emp_part/datetime=20171209
  18.  
     
  19.  
    クエリ結果:
  20.  
    *選択emp_partからどこ`datetime` = '20171209';

(3)パーティションと2つのロードデータを作成します

  1.  
    作成(テーブルemp_part2を
  2.  
    EMPNO int型、
  3.  
    ENAMEの 文字列、
  4.  
    仕事の 文字列、
  5.  
    MGRの int型、
  6.  
    HIREDATE 文字列、
  7.  
    SAL 、ダブル
  8.  
    COMMの ダブル、
  9.  
    DEPTNO のint
  10.  
    )分割 により(`datetime` 文字列、時間の文字列)
  11.  
    行の形式は、区切られたフィールドの終了により、「\ tを」;
  12.  
     
  13.  
    ロード・データのローカルINPATH '/opt/datas/emp.txt' テーブルemp_part2のパーティション(`datetime` = '20171209'、時間= '01')。
  14.  
     
  15.  
    ロード・データのローカルINPATH '/opt/datas/emp.txt' テーブルemp_part2のパーティション(`datetime` = '20171209'、時間= '02')。
  16.  
    [HDFSには、ディレクトリを形成します]
  17.  
    /user/hive/warehouse/hadoop.db/emp_part2/datetime=20171209/hour=01
  18.  
    /user/hive/warehouse/hadoop.db/emp_part2/datetime=20171209/hour=02

クエリ結果:

  1.  
    - " 選択* emp_part2から` datetime` = '20171209';
  2.  
    /user/hive/warehouse/hadoop.db/emp_part2/datetime=20171209のデータ(すなわち、二回emp.txtデータ)のすべてを見ます
  3.  
    - " 選択* emp_part2から` datetime` = '20171209' 時間= '01';
  4.  
    /user/hive/warehouse/hadoop.db/emp_part2/datetime=20171209/hour=01内のすべてのデータ(すなわちemp.txtデータ)を見ます

(4)(削除だけメタデータを削除する場合、データは削除されません)外部のパーティションテーブルを作成します

  1.  
    作成EXTERNAL (テーブルEMP_TESTを
  2.  
    EMPNO int型、
  3.  
    ENAMEの 文字列、
  4.  
    仕事の 文字列、
  5.  
    MGRの int型、
  6.  
    HIREDATE 文字列、
  7.  
    SAL 、ダブル
  8.  
    COMMの ダブル、
  9.  
    DEPTNO のint
  10.  
  11.  
    PARTITIONED BY(日付文字列、時間の文字列)
  12.  
    行の形式は、区切られたフィールドの終了により、「\ tを」;

(5)パーティションテーブルのデータをロードする方法を

ロードコマンドによって(A)(パーティションを指定)を直接選択し、分割されたテーブルにデータをロードを照会することができます。                        

load data local inpath '/opt/datas/emp.txt' into table emp_part2 partition(`datetime`='20171209',hour='01');

手動でディレクトリ/user/hive/warehouse/hadoop.db/emp_part2/datetime=20171209/hour=03を作成する(B)は、データテーブルを入れ選択クエリは、クエリ見えます。その後、元のデータベースのMySQLデータベースへのパスを変更します。

alter table emp_part2 add partition(`datetime`='20171209',hour='03');

図5に示すように、バレルテーブル

(1)ケースを使用

データは、深刻なデータの偏り、不均一な分布を持っているが、比較的に言えば、各バケット内のデータの量がより均等になります。バケツがあり、最適化されたバケットの間にその他のお問い合わせに参加します。

(2)を作成し、使用

まず第一に、

 set hive.enforce.bucketing = true; 

その後、

  1.  
    作成(テーブルemp_buを
  2.  
    EMPNO int型、
  3.  
    ENAMEの 文字列、
  4.  
    仕事の 文字列、
  5.  
    MGRの int型、
  6.  
    HIREDATE 文字列、
  7.  
    SAL 、ダブル
  8.  
    COMMの ダブル、
  9.  
    DEPTNO のint
  10.  
    )CLUSTERED BY(DEPTNO)INTO 4つのバケット
  11.  
    行の形式は、区切られたフィールドの終了により、「\ tを」;

最後に、負荷データは、挿入を使用します

insert overwrite table emp_bu_2 select * from emp;
也可以指定分区写入 insert overwrite

おすすめ

転載: www.cnblogs.com/Mr--zhao/p/11454582.html