【ビッグデータ】Java学生入門Hiveプログラミング——概要と入門操作
【一】概要
日常のデータ需要にとって、Hiveを熟知することは必須の技能であり、多くの日常のデータ導出はSparkタスクを必要としないため、1つのHiveQLを走ることで完成することができるが、それを知っていてもその理由を知る目的を持って、まずHiveに関する知識を理解し、それから日常のHiveQLで使用可能な関数を熟知する.
Hiveは、元のデータと変換後のデータの記憶として使用され、ETLを簡略化する.
まず公式のHiveに対する定義を与えます
The Apache Hive ™ data warehouse software facilitates reading, writing, and managing large datasets residing in distributed storage using SQL. Structure can be projected onto data already in storage. A command line tool and JDBC driver are provided to connect users to Hive.
この公式定義から、Hiveの次の特性をまとめることができます. SQLに類似するクエリ リレーショナル・データベースの構造をHDFSの にマッピングする.はコマンドラインとJDBC接続 を提供する.
Hiveとデータウェアハウス:
HiveはHadoop最上階に構築されたデータウェアハウスツールです
ここでは、データ・ウェアハウスの概念について説明しなければなりません.とリレーショナル・データベースの違い: データベース-インタラクティブクエリー、 データウェアハウス-最下位はMapReduceであり、業務ニーズを搭載することができず、複数のデータソースのデータはETLを通じて同じデータウェアハウスに統合される.
データウェアハウス内のデータは、 の変更、削除を許さない.
【目的】
主にMapReduceのプログラミングを容易にするため、ユーザーがSQL文のようにMapReduceのプログラミングを行うのを容易にするため、javaのプログラミング者ではありませんhdfsのデータに対してMapReduceの操作をします
【Hiveの特徴を知る必要がある】 HDFSメモリ に依存する. MapReduceに依存する処理データ SQLのようなクエリー(ユーザプログラミングインターフェース) を提供バッチ処理方式大量データ処理 自身はETLツール を提供している.
【Hiveアーキテクチャ】
Driver(ドライバモジュール)-JVMプロセスは、クライアント要求を受信し、コンパイル、解釈、実行し、HiveQLをMapReduce Jobに翻訳してYarnに渡す
Metastore(メタデータ):テーブルの名前、テーブルの列とパーティションとその属性、テーブルの属性(外部テーブルであるかどうかなど)、テーブルのデータが存在するディレクトリなどのテーブルの名前、テーブルの列とパーティションとその属性、テーブルの属性を含む(外部テーブル等かどうか)、テーブルのデータが存在するディレクトリ等.この部分の意味は、HDFSにおいてデータが関係型データベースのテーブル構造ではないことを知ることにあるコンパイラHive SQL変換オペレータ オペレータは、Hiveの最小の処理部 である.各オペレータは、HDFSの1つの動作または1つのMapReduceジョブ を表す.
【二】Hive常用関数
組み込み関数です.ここでは、一部の開発でよく使用される関数を列挙します.
日付関数:
【日付とタイムスタンプの変換】
関数#カンスウ#
説明
from_unixtime(bigint unixtime[, string format])
UNIXタイムスタンプ(1970-01-01 00:00:00:00 UTCから指定時間までの秒数)から現在のタイムゾーンのタイムフォーマットへの変換
unix_timestamp()
現在のタイムゾーンのUNIXタイムスタンプを取得
unix_timestamp(string date)
「yyyy-MM-dd HH:mm:ss」形式の日付をUNIXタイムスタンプに変換します.
unix_timestamp(string date, string pattern)
「yyyyyMMdd HH:mm:ss」形式の日付をUNIXタイムスタンプに変換します.
【日付取得】
関数#カンスウ#
説明
to_date(string timestamp)
「戻る日付」セクション
year(string date)
年を返す
month(string date)
月に戻る
day(string date)
戻り日
hour(string date)
戻り時間
minute(string date)
戻る分
second(string date)
戻る秒
【日付比較】
関数#カンスウ#
説明
datediff(string enddate, string startdate)
終了日から開始日を差し引いた日数を返します
date_add(string startdate, int days)
開始日startdateに戻ってdaysを追加した日付
date_sub(string startdate, int days)
開始日startdateを返してdaysを減らした後の日付を返します
文字列関数
関数#カンスウ#
説明
concat(string A, string B…)
複数の文字列の接続
concat_ws(string SEP, string A, string B…)
複数の文字列をリンクし、文字列間を指定した区切りで区切ります.
substr(string A, int start)
テキスト文字列で指定した開始位置以降の文字.
regexp_replace(string A, string B, string C)
文字列AのB文字はC文字で置き換えられます
regexp_extract(string subject, string pattern, int index)
正規表現で指定した部分を下付きで返す
parse_url(string urlString, string partToExtract [, string keyToExtract])
URL指定の部分を返します.オプションには[HOST,PATH,QUERY,REF,PROTOCOL,FILE,AUTORITY,USERINFO]があります.
get_json_object(string json_string, string path)
split(string str, string pat)
日常のデータ需要にとって、Hiveを熟知することは必須の技能であり、多くの日常のデータ導出はSparkタスクを必要としないため、1つのHiveQLを走ることで完成することができるが、それを知っていてもその理由を知る目的を持って、まずHiveに関する知識を理解し、それから日常のHiveQLで使用可能な関数を熟知する.
Hiveは、元のデータと変換後のデータの記憶として使用され、ETLを簡略化する.
まず公式のHiveに対する定義を与えます
The Apache Hive ™ data warehouse software facilitates reading, writing, and managing large datasets residing in distributed storage using SQL. Structure can be projected onto data already in storage. A command line tool and JDBC driver are provided to connect users to Hive.
この公式定義から、Hiveの次の特性をまとめることができます.
Hiveとデータウェアハウス:
HiveはHadoop最上階に構築されたデータウェアハウスツールです
ここでは、データ・ウェアハウスの概念について説明しなければなりません.
【目的】
主にMapReduceのプログラミングを容易にするため、ユーザーがSQL文のようにMapReduceのプログラミングを行うのを容易にするため、javaのプログラミング者ではありませんhdfsのデータに対してMapReduceの操作をします
【Hiveの特徴を知る必要がある】
【Hiveアーキテクチャ】
Driver(ドライバモジュール)-JVMプロセスは、クライアント要求を受信し、コンパイル、解釈、実行し、HiveQLをMapReduce Jobに翻訳してYarnに渡す
Metastore(メタデータ):テーブルの名前、テーブルの列とパーティションとその属性、テーブルの属性(外部テーブルであるかどうかなど)、テーブルのデータが存在するディレクトリなどのテーブルの名前、テーブルの列とパーティションとその属性、テーブルの属性を含む(外部テーブル等かどうか)、テーブルのデータが存在するディレクトリ等.この部分の意味は、HDFSにおいてデータが関係型データベースのテーブル構造ではないことを知ることにある
【二】Hive常用関数
組み込み関数です.ここでは、一部の開発でよく使用される関数を列挙します.
日付関数:
【日付とタイムスタンプの変換】
関数#カンスウ#
説明
from_unixtime(bigint unixtime[, string format])
UNIXタイムスタンプ(1970-01-01 00:00:00:00 UTCから指定時間までの秒数)から現在のタイムゾーンのタイムフォーマットへの変換
unix_timestamp()
現在のタイムゾーンのUNIXタイムスタンプを取得
unix_timestamp(string date)
「yyyy-MM-dd HH:mm:ss」形式の日付をUNIXタイムスタンプに変換します.
unix_timestamp(string date, string pattern)
「yyyyyMMdd HH:mm:ss」形式の日付をUNIXタイムスタンプに変換します.
select from_unixtime(1565452800,'yyyy-MM-dd')
res: 2019-08-11
select unix_timestamp()
res: 1565506410
select unix_timestamp('2019-08-11 00:00:00')
res: 1565452800
select unix_timestamp('20190811 11','yyyyMMdd HH')
res: 1565492400
【日付取得】
関数#カンスウ#
説明
to_date(string timestamp)
「戻る日付」セクション
year(string date)
年を返す
month(string date)
月に戻る
day(string date)
戻り日
hour(string date)
戻り時間
minute(string date)
戻る分
second(string date)
戻る秒
select to_date('2019-08-11 10:03:01')
res: 2019-08-11
select year('2019-08-11 10:03:01')
res: 2019
select month('2019-08-11 10:03:01')
res: 8
......
【日付比較】
関数#カンスウ#
説明
datediff(string enddate, string startdate)
終了日から開始日を差し引いた日数を返します
date_add(string startdate, int days)
開始日startdateに戻ってdaysを追加した日付
date_sub(string startdate, int days)
開始日startdateを返してdaysを減らした後の日付を返します
select datediff('2019-08-11','2016-12-02')
res: 982
select date_add('2019-08-08',10);
res: 2019-08-18
文字列関数
関数#カンスウ#
説明
concat(string A, string B…)
複数の文字列の接続
concat_ws(string SEP, string A, string B…)
複数の文字列をリンクし、文字列間を指定した区切りで区切ります.
substr(string A, int start)
テキスト文字列で指定した開始位置以降の文字.
regexp_replace(string A, string B, string C)
文字列AのB文字はC文字で置き換えられます
regexp_extract(string subject, string pattern, int index)
正規表現で指定した部分を下付きで返す
parse_url(string urlString, string partToExtract [, string keyToExtract])
URL指定の部分を返します.オプションには[HOST,PATH,QUERY,REF,PROTOCOL,FILE,AUTORITY,USERINFO]があります.
get_json_object(string json_string, string path)
split(string str, string pat)
select concat('abc','iiii','ffff')
res: abciiiiffff
select concat_ws('~~','iiii','ffff')
res: iiii~~ffff
select substr('abcde',3)
res: cde
select regexp_replace('test20190812', '19|08', '')
res: test2012
select regexp_extract('test20190812', 'test(.*?)(0812)', 0), regexp_extract('test20190812', 'test(.*?)(0812)', 1), regexp_extract('test20190812', 'test(.*?)(0812)', 2)
res: test20190812 2019 0812
select parse_url('https://mooc.study.163.com/smartSpec/detail/1001485004.htm?utm_source=test.com', 'HOST') ,
parse_url('https://mooc.study.163.com/smartSpec/detail/1001485004.htm?utm_source=test.com', 'QUERY') ,
parse_url('https://mooc.study.163.com/smartSpec/detail/1001485004.htm?utm_source=test.com', 'PATH')
res:
"mooc.study.163.com"
"utm_source=test.com"
"/smartSpec/detail/1001485004.htm"
select get_json_object('{"store":{"fruit":[{"weight":8,"type":"apple"},{"weight":9,"type":"pear"}],"bicycle":{"price":19.951,"color":"red1"}},"email":"amy@only_for_json_udf_test.net","owner":"amy1"}', '$.owner')
res: amy1