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