ハイブテーブル運転(HIVEデータストレージ、データベース、テーブル、パーティション、サブバレル)

。1、ハイブデータストレージ

ハイブデータストレージベースのHadoop HDFS

ハイブがない特定のデータ・ストレージ・フォーマット

ストレージ構造は、次のとおりにしようと、データベース、ファイル、テーブルを、

ハイブのデフォルトは直接テキストファイル(TextFileの)をロードすることができ、また、シーケンスファイルをサポートしています

テーブルを作成する場合、指定されたデータを解析するハイブ列区切りデータと行区切り、ハイブを。

 

2、ハイブデータモデル-データベース

従来のデータベースと同様のデータベース

デフォルトデータベース「デフォルト」

使用ハイブ>使用<データベース名>、システムのデフォルトのデータベースを使用せずに、#hiveコマンドを。使用デフォルト>ハイブ明示的に使用することができます。

 

新しいデータベースを作成します。

ハイブ>データベースtest_dwを作成します。

 

。3、ハイブデータモデル-表

  • 表内の表

そして、データベースの表は、概念的に似ています

表は、対応するディレクトリデータは、ハイブに格納されています。例えば、HDFSパスにあるテーブルテスト、:$ HIVE_HOME /倉庫/試験。ハイブ-site.xmlでデータウェアハウスに指定された$ {hive.metastore.warehouse.dir}ディレクトリによって倉庫

すべて(外部表を含まない)表のデータは、このディレクトリに格納されています。

内部テーブル、テーブルが削除され、メタデータとデータが削除されます

 

次のように具体的な動作は以下のとおりです。

データファイルを作成しますinner_table.dat

 

テーブルを作成します。

ハイブ>テーブルの作成からinner_table  (キー  文字列);

データのロード

ハイブ>負荷データのローカルINPATH 'は/ usr / local / inner_table.datテーブルに' からinner_table

データを表示

SELECT * FROM からinner_table

SELECT COUNT(*)からinner_tableの

表を削除します

テーブルをドロップinner_tableの

 

  • 外部表外部表
  1. 既にポイント HDFSデータに存在する、あなたは、パーティションを作成することができます
  2. その 内部テーブル 組織のメタデータにはかなり異なっている、実際のデータが格納されているのと同じです
  3. 内部テーブル 作成処理およびデータローディング処理が(これら2つのプロセスが同じ文の中で行うことができる)、データをロードする過程で、実際のデータは、データウェアハウスのカタログに移動され、データに直接アクセスする後データウェアハウスディレクトリが完了します。あなたがテーブルを削除すると、テーブルのデータとメタデータが削除されます
  4. 外部表は、完了すると同時に、テーブルや負荷データを作成し、唯一のプロセスであり、単に外部データとのリンクを確立するために、データウェアハウスのカタログに移動しません。あなたが削除すると 、外部表を 、唯一のリンクを削除します

次のように具体的な例としては、以下のとおりです。

外部表page_viewをCREATE

(viewTime INT、

 ユーザーID BIGINT、

 PAGE_URL STRING、

 REFERRER_URL STRING、

 IP列COMMENT「ユーザーのIPアドレス」、

 国STRINGコメント「元の国

 COMMENT「これはステージングページビューのテーブルです」

 '12' TERMINATED '44' LINES TERMINATED BY行フォーマット区切られたフィールド

 TEXTFILEとして格納

 LOCATION 'HDFS://のHadoop:9000 /ユーザー/データ/ステージング/ page_view';

 

データファイルを作成します external_table.dat

 

テーブルを作成します。

ハイブ>外部表external_table1(キー文字列)を作成

行形式区切り

'\ t' のBY TERMINATED FIELDS

場所「/ホーム/外部」;

 

では、ディレクトリHDFS作成/ホーム/外部を:

外部#hadoop FS -put /home/external_table.dat /ホーム/

 

データのロード

表external_table1 INTO LOADデータINPATH '/home/external_table1.dat';

 

データを表示

EXTERNAL_TABLEから選択*

EXTERNAL_TABLEからSELECT COUNT(*)

 

表を削除します

テーブルEXTERNAL_TABLEをドロップ

 

内部および外部のテーブル差分テーブル:

外部表が唯一のテーブル情報(メタデータ)を削除し、データを削除しないでください。内部テーブルは、テーブル情報及びデータ情報を削除

 

  • パーティションのパーティションテーブル

 

パーティションテーブル関連のコマンド:

SHOWのTABLES;#表示すべてのテーブル

SHOW TABLESの '* TMP *';#サポートファジークエリ

何パーティションテーブルを参照するには#; SHOW PARTITIONS TMP_TABLE

TMP_TABLEの記述;#ビューテーブルの構造

 

密なインデックスのデータベース列に対応するパーティションのパーティション

ハイブパーティションテーブル内のすべてのデータは、対応するパーティションのディレクトリに格納され、ディレクトリテーブルに対応

たとえば:試験日、市表2パーティションが含まれています、

対応する日付= 20130201、HDFSサブディレクトリの街= BJ:

/倉庫/テスト/日= 20130201 /都市= BJ

対応した日付= 20130202、市= HDFSのサブディレクトリのSH;

/倉庫/テスト/日= 20130202 /都市= SH

 

実行します。

TABLE tmp_table#をCREATE表名

タイトル文字列、#フィールド名フィールドタイプ

minimum_bidダブル、

数量BIGINT、

have_invoice BIGINT

)COMMENT '注:XXX' #テーブルノート

 (PTのSTRING)#パーティションテーブルのフィールドで仕切られた(あなたのファイルが非常に大きい場合、その後、パーティションテーブルを使用すると、すぐにパーティションで割ったデータフィールドをフィルタリングすることができます)

行形式区切り

「\ 001」#フィールドでTERMINATED FIELDS分離するものです

SEQUENCEFILEとして格納され;#メモリデータ、SEQUENCEFILEは、Hadoopのネイティブファイル圧縮形式であります

 

データファイルの作成 partition_table.datを

テーブルを作成します。

テーブルPARTITION_TABLEを作成する(RECTIME文字列、MSISDN文字列)

(日中の文字列、都市の文字列)で仕切ら

行フォーマット区切り

TEXTFILEとして格納された「\ tの」で終わるフィールド。

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

負荷データテーブルPARTITION_TABLEパーティションに「/home/partition_table.dat」ローカルINPATH(昼間=「2013年2月1日」、都市=「BJ」)。

データを表示

PARTITION_TABLEから選択*

PARTITION_TABLEからSELECT COUNT(*)

表を削除します

テーブルPARTITION_TABLEをドロップ

 

テーブルPARTITION_TABLEを変更するパーティション(昼=「2013年2月4日」、市=「BJ」)を追加します。

することで、データのロードデータをロードします

 

テーブルを変更PARTITION_TABLEドロップパーティション(昼間=「2013年2月4日」、市は=「BJ」)

メタデータは、データファイルが削除されますが、ディレクトリまだ昼間= 2013年2月4日

 

  • バケット表バレルテーブル

バケットハッシュテーブル異なるファイルストレージに、データ値であり、。

テーブルを作成します。

4つのバケットに(ID列)(ID)によってクラスタ化されたテーブルbucket_tableを作成します。

データのロード

=真hive.enforce.bucketing設定します。

STUから名前を選択bucket_tableテーブルに挿入します。

STUから名前を選択bucket_table上書きテーブルを挿入します。

テーブルデータを浴槽にロードされると、フィールドがかかりますハッシュ値を、その後、バケットの数を法。ファイルに対応するデータ。

 

サンプリング問い合わせ

bucket_table TABLESAMPLE(ID上の4のうちバケット1)SELECT * FROM。

 

  • ビューを作成します。

AS V1を選択するビューを作成* t1から。

 

  • オペレーティングテーブル

テーブルを変更します。

カラム(COLS、文字列)を追加target_tab表を変更。

 

表を削除します

テーブルをドロップ。

 

  • データのインポート

データは任意のデータ変換することなく、テーブルにロードされたとき。ロード操作は、ハイブテーブルに対応する位置に移動/データのみをコピーです。

LOADデータ[LOCAL] INPATH 'ファイルパス' [OVERWRITE]
    表tablename INTO
    [PARTITION(partcol1 = VAL1、partcol2 = VAL2 ...)]

入れて別のテーブルにインポートハイブテーブルをハイブを構築してきました

INSERT OVERWRITEテーブルテーブル名[PARTITION(partcol1 = VAL1、partcol2 = VAL2 ...)] from_statement FROM select_statementに

CTAS

[外部]のCREATE TABLE table_nameの[NOTが存在する場合]を

(COL_NAMEのDATA_TYPE、...)...

AS SELECT ...

例: external_table1 SELECT * FROMようなテーブルnew_external_testを作成します。

 

  • ルックアップテーブル

SELECT [ALL | DISTINCT]のselect_expr、のselect_expr、...

FROMテーブル

[WHERE where_condition]

【col_list BY GROUP]

col_list BY [CLUSTER | | [SORT BY col_list] [col_list BY、DISTRIBUTE] 【col_list BY ORDER]

[LIMIT番号]

 

基づいて、パーティションのクエリ  

一般的には SELECTクエリは、全表スキャンです。しかし、パーティションテーブル場合、クエリがパーティション・プルーニング「パーティションインデックス」に似た(入力剪定)機能を活用することができます「懸念していることの一部.Hive現在の実装では1つのテーブルのみをスキャンし、唯一のパーティションアサーションは(で仕切ら)句は、パーティション・プルーニングが有効になりますFROM句から、最新のものに表示されます。()日パーティション内PAGE_VIEWSは、テーブルの日付列のパーティションを使用している場合たとえば、次の文は、2008-03-としてパーティションを読み込みます01「のデータ。

 SELECT PAGE_VIEWS。* '2013年3月1日' WHERE page_views.date> = '2013年3月1日' AND page_views.date <= PAGE_VIEWS FROM

LIMIT句

クエリを制限することができますレコードの数を制限します。クエリの結果は、ランダムに選択されています。5から次のクエリのレコードがランダムにテーブルt1を照会します:

T1のLIMIT 5 SELECT * FROM

上位Nクエリ

 

次のクエリクエリの売上高は最大の記録 5人の営業担当者を。

SETのmapred.reduce.tasks = 1
  金額のDESC LIMIT 5 BY販売SORT SELECT * FROM

 

  • 接続テーブル

インポート交流情報テーブル

ハイブは、(名前ストリング、ACIP列)TEXTFILEとして格納され、「\ tの」によって終了行フォーマット区切られたフィールドacinfoテーブルを作成します>。

ハイブ>負荷データのローカルINPATHテーブルacinfoに「/home/acinfo/ac.dat」;

エン

、b.nameを選択* dim_acから10を制限(a.ac = b.acip)にB acinfo加わります。

外部結合左

、b.nameを選択*左外側にa.ac = b.acip限界10にB acinfo参加dim_acから。

おすすめ

転載: www.cnblogs.com/wendyw/p/11398170.html