ピットからのビッグデータハイブすべてで実際に難しいことではありませんが、あきらめますか?存在しません。

巣箱

まずは、ハイブが何であるかを説明しましょう。一部の人々は、ハイブはSQLを実行しません書くこと、考えるだけでなく。はい、ハイブSQL構文と、のような構造は、実際には、両者の間に大きな違いがない、とさえハイブ書き込みSQLに、言うことができます。しかし、質問が来た - それは本当にまだそのSQLのですか?これは、データベースをSQLとの違いは何ですか?そして、他の伝統的なオフラインデータベース差がどのような関係とは何ですか?クラス問題のシリーズは、私たちはゆっくりと分析、心配しないでください。

1は、ハイブがオープンFacebookとによって実装
2、データ・ウェアハウス・ツールのHadoopに基づいて
図3に示すように、構造化データは、データベーステーブルにマッピングすることができる
4、及びHQL(ハイブSQL)が照会提供する
基礎となるデータが中に記憶されている、5 HDFS
6は、本質的にハイブSQL文のMapReduceタスクが実行変換する
7、MapReduceのHQLを容易に計算し、オフラインで計算されたバルクデータに適したHDFSのデータ構造の処理を用いてユーザ不慣れ。

データウェアハウス(データウェアハウス)がある - 1991年にビル(ビル・インモン)のデータウェアハウスのドアの恵みの父は、提案された定義が広く受け入れられている彼の本の中で(「データウェアハウス」)「データ・ウェアハウスの構築」公表しますサブジェクト指向(件名指向)、統合(統合)、比較的安定は(不揮発性)、サポート経営の意思決定(意思決定支援)への変更履歴(タイム・バリアント)データ収集を反映しています。

ハイブは、データを格納するためのHDFSに依存して、マップリデュースを実行するハイブHQLを変換し、ハイブをHadoopのに基づいているので、データ・ウェアハウス・ツールは、本質的に、HDFSのMapReduceのフレームワークに基づく計算は、データがHDFS分析および管理に格納されていること。
ここに画像を挿入説明

ハイブ背景
ビッグデータの時代に、従来のリレーショナルデータベース上のデータの膨大な量は、メンテナンスコストが非常に高いアップしている、我々はそれをどうしたらよいのでしょうか ハイブは、統計的な問題解決のための構造化、大規模なため、Facebookのオープンソースで始まる、この時点で最初のログデータを生まれた、ETL(抽出・変換・ロード ) ツールのHadoopの構築データウェアハウスに、MR、データを用いて算出したデータストレージ利用HDFS。

一般(のMapReduceを用いて)処理するオフラインデータのために使用される、SQL同様の、しかし同一ではない;ハイブクラスは、SQLクエリHQLと呼ばれる言語を定義HQL MRは、言語翻訳と考えることができます。

Apacheのハイブデータウェアハウス・ソフトウェアは、簡単に大規模なデータセットの分散ストレージの分布を、読み取り、書き込み、および管理するためにSQLを使用することができます。構造は、既に格納されたデータに投影することができます。ハイブに接続するユーザーには、コマンドラインツールおよびJDBCドライバを提供します。次の分野での背景:

  1. 不便のMapReduceプログラミング
  2. いくつかのフィールドが欠落上のHDFSファイル

生態系でのHadoop Hiveの位置

ここに画像を挿入説明

ハイブのアーキテクチャ

ここに画像を挿入説明
ここに画像を挿入説明

それを言って、あなたはハイブについて知っている疑問は、なぜ我々はハイブにそれを使用したくない、ですので、あまり高くありませんか?まだそれについてのユニークな何ですか?MapReduceは、あなたはしていない使用していますか?だから、最初に、さんが直面したのMapReduceの直接の使用を取得してみましょう:

  • スタッフ学習コストが高すぎます。
  • 短すぎるプロジェクトサイクルの要件;
  • 複雑なクエリロジックのMapReduceの開発は難しすぎます。

ハイブの使用:

  • これは、急速な発展を提供する能力をSQLに似た構文を使用してインターフェイスフレンドリーなインターフェイス、オペレータがあります。
  • 学習コスト、回避はMapReduceのを書くのコストを下げ、開発者が学習のコストを削減します。
  • スケーラビリティは、クラスタサイズがサービスを再起動することなく、拡大して自由にすることができ、また、ユーザー定義関数をサポートしています。

私たちは、ハイブの長所と短所について話してみましょう:

利点
  • スケーラブルスケーラブル、スケールは、ハイブは一般的に、クラスタの自由度を広げることができるサービスを再起動する必要はありません。スケール:膨張圧力平衡を介してクラスタのサイズ、縦拡張:サーバのCPU i7-6700k 4芯糸8、8コア16スレッド、メモリ64G => 128G
  • 延性は、カスタム関数のためのハイブのサポートは、ユーザーが自分のニーズに応じて、独自の機能を実装することができます
  • グッドフォールトトレランス、問題のノードがあっても保証することができ、SQL文は、まだ実行を完了することができます

短所

  • ハイブは、レコードレベルのCRUD操作をサポートしていませんが、ユーザーがファイル(現在選択されているレコードレベルのサポートインサートのハイブ-2.3.2バージョン)にクエリ結果によって新しいテーブルまたはクエリを作成することができます。
  • MapReduceのジョブ起動プロセスは、長い時間を消費し、それは対話型のクエリシステムで使用することはできませんので、ハイブクエリの待ち時間は、非常に深刻です。
  • ハイブは、(それが何の追加と削除ではないではありませんので、それは主に代わりに2レベルのデータ処理であり、OLTP(オンライントランザクション処理)、の、OLAP(オンライン分析処理)のために使用されている)トランザクションをサポートしていません。

要約:

ハイブは、SQLデータベースの外観を有するが、シナリオは完全に異なっている、ハイブは、データウェアハウスである大規模なオフライン統計分析、アプリケーションにのみ適しています。

ハイブは、それがどのような機能、それを見ている、非常に簡単に使用することもあります。

関係機能

  • 等価比較:=

    • 構文:A = B. 式A及びBはTRUE比べ、同じ式である場合、そうでない場合はFALSE
  • いいえ等価比較ません:<>

    • 構文:A <> B. 式Aおよび式Bに等しくない場合、TRUEであった;そうでなければFALSE発現は、発現またはBがNULLで、戻りNULL NULLの場合A
  • 比較より小さい<

    • 構文:A <B。式がNULL、式であるか、またはBは、NULL、戻りNULLである場合、Aは式Bの発現、TRUEより小さい場合、そうでない場合はFALSE
  • 以下で比較:<=

    • 構文:A <= B. TRUE B、以下の式式A場合;そうでなければFALSE発現は、発現またはBがNULLで、戻りNULL NULLの場合A
  • 以上の比較:> =

    • 文法:A> = B. A式がNULLの場合、発現またはBがNULL、戻りNULLであり; Aは、以上TRUE B、に表現式と等しい場合は、そうでない場合はFALSE
  • ヌル値の決意:IS NULL

    • 文法:A IS NULL。値がAのNULL式である場合、それは本当だった、そうでない場合はFALSE
  • 非空で分析すると、:NULLではありません

    • 文法:A IS NOT NULL。値がAのNULL式である場合、それはFALSEだった、そうでない場合はTRUE
  • LIKE比较:LIKE

    • 構文:A [NOT] LIKE B. A又はB列の文字列がNULLの場合、NULLが返され、文法の線Bに文字列Aの正規表現ならば、TRUEのために、そうでない場合はFALSE。B、文字「_」任意の一文字を意味し、文字「%」は、任意の数の文字を表します。
      例: dw.topic_orderからSELECT * WHERE partition_pay_dateのような=「2016年4月22日」とclient_typeのIP% ' ## IPで始まるすべての文字列を一致させることができます。
      注:特殊文字は2つのバックスラッシュを使用して、それを変換\
  • JAVA-LIKE / REGEXP操作:RLIKE / REGEXP

    • 文法:A RLIKE / REGEXP B. A列やB列がNULLの場合、NULLが返され、通常の場合、文字列A準拠JAVA正規表現構文のB、TRUEだった、そうでない場合はFALSE
      :partition_pay_date = dw.topic_order SELECT * FROM 「2016- 4月22日「とclient_type RLIKE /正規表現」 ^アンドロイド*「
      注:ワイルドカード」% 『RLIKE /正規表現機能では、唯一の一致する』% 『文字』を『は』と一致することができます「文字を

日付関数

  • UNIXタイムスタンプの日付伝達関数:FROM_UNIXTIME
    • 構文:FROM_UNIXTIME(BIGINT unixtime [文字列フォーマット])。現在のタイムゾーンの時刻フォーマットへ(1970-01-01 00:00:00時刻から指定した秒数に)UNIXタイムスタンプの変換
      を選択FROM_UNIXTIME(1323308943「YYYYMMDD:デュアルから」); ## 戻り値20111208
  • 年:伝達関数の日の
    • 構文:年(文字列日付)。日付の年を返します。
  • 日付1月転送機能:月
    • 構文:月(文字列日付)。日付の月を返します。
  • 日付関数次の日:1日
    • 構文:1日(文字列日付)。日付の日を返します。
  • 日付時間伝達関数:時間
    • 構文:時間(文字列日付)。日付の時間を返します。
  • 伝達関数分の日:分
    • 構文:分(文字列日付)。分の日付を返します。
      たとえば:セレクト分(「2011-12-08 10時03分01秒」 )デュアルからは、## 3の値を返します
  • 二日転送機能:秒
    • 構文:秒(文字列日付)。数秒で日付を返します。
      例えば:選択秒(「2011-12-08午前10時03分01秒」 )デュアルから; ## 戻り値1
  • 日付ウィーク伝達関数:weekofyear
    • 構文:weekofyear(文字列日付)。現在の週の日付を返します。
      例えば:選択weekofyear(「2011-12-08午前10時03分01秒」 )デュアルからは、## 49の値を返します
  • 日付の比較機能:DATEDIFF
    • 構文:DATEDIFF(文字列ENDDATE、文字列STARTDATE )。終了日を引い開始日の日数を返します。
      例えば選択DateDiff関数( '2012年12月8日'、: ; ## '2012-05-09')デュアルからの戻り値は213
  • 増加関数の日:DATE_ADD
    • 構文:DATE_ADD(文字列STARTDATE、INT日 )。増加の日付以降に開始日STARTDATE日の日を返します。
      例えば:選択DATE_ADD(「2012年12月8日」、 10)デュアルから、## の戻り値2012年12月18日
  • 日付減少関数:DATE_SUB
    • 構文:DATE_SUB(文字列STARTDATE、INT日 )。開始日は、日の日付の後日数を減らす開始日を返します。
      例えば、選択DATE_SUB(「2012年12月8日」、: ; ## 10)デュアルからの戻り値2012年11月28日

条件付き機能

  • 機能の場合:もし
    • 構文:IF(ブールtestCondition、T valueTrue 、T valueFalseOrNull)
      説明:条件testConditionがTRUEである場合、valueTrueを返し、そうでない場合valueFalseOrNull。
      例えば:IF(APP_NAME = 'グループを選択 dw.topic_orderからここpartition_pay_date = '2016年4月22日' deal_idとして'、OBJECT_ID、NULL)を
  • COALESCE:非空の関数を探します
    • 構文:COALESCE(T V1を、T V2 、...)
      説明:最初の非ヌル値パラメータを返し、それぞれの値がNULLの場合、NULLを返し
      、例えば:セレクト合体(UUID、 '' )DWからUUIDとして。 topic_orderどこpartition_pay_date = '2016年4月22日'
  • 条件付き機能:CASE
    • 構文:ケースA、B THEN C [ D THEN E] * [ELSE F] ENDの
      説明:Bに等しい場合、Cを返し、Dに等しい場合、次にEを返し、そうでない場合はfを
      :選択OBJECT_ID、USER_IDを「IPのようなUUID、ケースclient_type %」「を」アンドレ%、次いで「のようios'when client_type」アンドロイド2016年4月22日'「他の」その他「utm_mediumfrom dw.topic_orderここpartition_pay_date =として」末端
      相対:注意関数は最も完全な状態である場合、ケースは、種々の条件を決定するために使用することができる。機能が続く場合、二つの点に属する決定される。のみヌルおよび非ヌル決意することができ、最終的に合体機能、。

統計関数

  • 統計関数の数:数
    • 構文:COUNT( )、COUNT(expr)は、COUNT(DISTINCT式expr [、expr_。])。(カウント、NULL値の行数の非ヌル値の指定されたフィールド;;取り出される行の数をカウント返し)カウント(exprの数)(DISTINCTのexprを[。、expr_ ])が異なる以外の指定されたフィールドを返しますヌル値の数
  • 統計関数の合計:合計
    • 構文:合計(COL)、SUM( DISTINCT COL)。濃縮COLの添加(COL)統計の合計結果、加算結果COLの異なる値の(DISTINCT COL)統計合計
  • 平均の統計関数:平均
    • 構文:AVG(COL)、AVG( DISTINCT COL)。平均(COL)COLの結果セットの統計的平均値(DISTINCT COL)COL異なる統計平均の平均値では、追加されます
  • 最低限の統計関数:分
    • 構文:分(COL)。結果セットの最小値で統計的COLフィールド
  • 最大の統計関数:最大
    • 構文:最大(COL)。統計COLフィールドの最大濃度
  • 中央値機能:precentile構文:パーセンタイル(BIGINT COL、P)。PTHパーセンタイルの精度を求め、pは0と1、COLフィールドの間であるが、現在唯一の整数をサポートする必要があり、浮動小数点型はサポートされていません。

これらは、私は、ハッハッハ、非常に多くのSQLのように見えた非常に重要な部分は、権利はないと思う、私はちょうど記載されているここにいる、多くありますが、ハイブの関数宣言されています。実際には、難しいことではありません。まあ、我々はそれが類似点と相違点やデータベースであると言います。

ハイブは、SQLに似たクエリ言語HQLを使用しているので、ハイブデータベース用に理解することは簡単です。実際には、構造上の観点から、ハイブは、しかも同様のデータベースクエリ言語、ない類似性を有しています。オンラインデータベースは、用途において使用することができますが、ハイブは、アプリケーションの観点から、このことを認識して設計されたデータウェアハウスは、ハイブの特性を理解するのに役立ちますです。

ハイブデータベースと下の比較表:

ここに画像を挿入説明

要約:表情でハイブSQLデータベースが、シナリオはハイブは、データウェアハウスである大規模なオフライン統計分析、アプリケーションのためにのみ適しており、完全に異なっています。
公開された36元の記事 ウォン称賛13 ビュー1052

おすすめ

転載: blog.csdn.net/weixin_44598691/article/details/105016295