サンプルデータ:
1,小明1,lol-book-movie,beijing:shangxuetang-shanghai:pudong
2,小明2,lol-book-movie,beijing:shangxuetang-shanghai:pudong
3,小明3,lol-book-movie,beijing:shangxuetang-shanghai:pudong
4,小明4,lol-book-movie,beijing:shangxuetang-shanghai:pudong
5,小明5,lol-movie,beijing:shangxuetang-shanghai:pudong
6,小明6,lol-book-movie,beijing:shangxuetang-shanghai:pudong
7,小明7,lol-book,beijing:shangxuetang-shanghai:pudong
8,小明8,lol-book,beijing:shangxuetang-shanghai:pudong
9,小明9,lol-book-movie,beijing:shangxuetang-shanghai:pudong
テーブルのDDLの構文規則のハイブ完全な建設
create [temporary] [external] table [if not exists] [db_name.]table_name -- (note: temporary available in hive 0.14.0 and later)
[(col_name data_type [comment col_comment], ... [constraint_specification])]
[comment table_comment]
[partitioned by (col_name data_type [comment col_comment], ...)]
[clustered by (col_name, col_name, ...) [sorted by (col_name [asc|desc], ...)] into num_buckets buckets]
[skewed by (col_name, col_name, ...) -- (note: available in hive 0.10.0 and later)]
on ((col_value, col_value, ...), (col_value, col_value, ...), ...)
[stored as directories]
[
[row format row_format]
[stored as file_format]
| stored by 'storage.handler.class.name' [with serdeproperties (...)] -- (note: available in hive 0.6.0 and later)
]
[location hdfs_path]
[tblproperties (property_name=property_value, ...)] -- (note: available in hive 0.6.0 and later)
[as select_statement]; -- (note: available in hive 0.5.0 and later; not supported for external tables)
テーブルのハイブ建設(デフォルト内部テーブル)
-- 内部表
create table person(
id int,
name string,
likes array<string>,
address map<string,string>
)
row format delimited
fields terminated by ','
collection items terminated by '-'
map keys terminated by ':'
lines terminated by '\n';
-- 外部表
create table person(
id int,
name string,
likes array<string>,
address map<string,string>
)
row format delimited
fields terminated by ','
collection items terminated by '-'
map keys terminated by ':'
lines terminated by '\n'
location '/usr';
ビューテーブルが説明します
语法:| TABLE_NAME [書式設定の拡張]を記述する
describe formatted person;
内部および外部のテーブルテーブルとの間の差
ハイブ内部テーブルには、
TABLE_NAME [いないが存在する場合]テーブルを作成
、削除、テーブルのメタデータを、データが削除されます
ハイブ外部表を
外部表を作成します。TABLE_NAMEの[未が存在する場合] LOCATIONのhdfs_pathの
中に削除外部表の削除のみメタストアメタデータは削除されませんHDFSをテーブルデータ
テーブルを作成する方法の三種類
1、表table_name表ステートメントルーチンを作成します
2、テーブルを作成...選択として...(CTAS)スヌーズ
図3は、半自動モードのようなテーブルを作成します
住所:テーブル構築するための3つの方法https://blog.csdn.net/qq_26442553/article/details/85621767を
CTASは、音符にテーブルのポイントを構築しました:https://blog.csdn.net/qq_26442553/article/details/79593504
パーティションテーブルを意味:最適化クエリに。パーティションフィールドクエリを使用してみてください。パーティションフィールドを使用しない場合は、すべてのスキャンはなります。
静的パーティション
1、静的パーティション - テーブル操作
内部テーブルは、対応するパーティションのメタデータとデータが削除されます。
-- 创建分区表 create table p_person ( id int, name string, likes array<string>, address map<string,string> ) partitioned by (sex string,age int) row format delimited fields terminated by ',' collection items terminated by '-' map keys terminated by ':' lines terminated by '\n'; -- 添加分区:注意要讲所有的分区字段都写上 alter table p_person add partition (sex='man',age=20); -- 删除分区:删除的时候只写需要删除的分区即可 alter table p_person drop partition (age=20);
2、ハイブクエリ構文テーブルのパーティション情報:
show partitions day_hour_table;
動的なパーティショニング
1、動的パーティションテーブルを作成します
-- 要开启支持动态分区参数设置 set hive.exec.dynamic.partition=true; set hive.exec.dynamic.partition.mode=nostrict; -- 首先创建数据表 create table person( id int , name string, age int, sex string, likes array<string>, address map<string,string> ) row format delimited fields terminated by ',' collection items terminated by '-' map keys terminated by ':' lines terminated by '\n'; -- 然后创建结构分区表-分区表 create table psn_partitioned_dongtai( id int , name string, likes array<string>, address map<string,string> ) partitioned by (age int,sex string) row format delimited fields terminated by ',' collection items terminated by '-' map keys terminated by ':' lines terminated by '\n'; -- 向数据表中加载数据 load data local inpath '/root/hivedata/psn1' into table person; --向结构分区表中加载数据 from person insert overwrite table psn_partitioned_dongtai partition(age,sex) select id,name,likes,address,age,sex distribute by age,sex;
2、パラメータ
开启支持动态分区 set hive.exec.dynamic.partition=true; 默认:false set hive.exec.dynamic.partition.mode=nostrict; 默认:strict(至少有一个分区列是静态分区) set hive.exec.max.dynamic.partitions.pernode; 每一个执行mr节点上,允许创建的动态分区的最大数量(100) set hive.exec.max.dynamic.partitions; 所有执行mr节点上,允许创建的所有动态分区的最大数量(1000) set hive.exec.max.created.files; 所有的mr job允许创建的文件的最大数量(100000)
ポイントバレル
1記載のパーツのキット
分割バレルは、ファイルの形で存在します。部品表のキットは、分割方法槽列は、異なる問題にモジュロハッシュ値、異なるデータ要素を取られ、バケット識別する各ファイル
アプリケーションシナリオ:(サンプリング)サンプリングデータは、地図ジョイン図2に示すように、サブバケットテーブルを作成します
-- 开启支持分桶 set hive.enforce.bucketing=true; 注意,设置该参数后,mr运行时,bucket个数与reduce task个数会保持一致 默认:false;设置为true之后,mr运行时会根据bucket的个数自动分配reduce task个数。(用户也可以通过mapred.reduce.tasks自己设置reduce任务个数,但分桶时不推荐使用) 注意:一次作业产生的桶(文件数量)和reduce task个数一致 -- 创建数据表 create table psn_fentong( id int, name string, age int ) row format delimited fields terminated by ','; -- 加载数据 load data local inpath '/root/hivedata/psn_fentong' into table psn_fentong; -- 创建分通表 create table psn_fentong2( id int, name string, age int ) clustered by (age) into 4 buckets row format delimited fields terminated by ','; -- 加载数据 insert into table psn_fentong2 select id ,name ,age from psn_fentong; -- 数据抽样 select * from psn_fentong2 (bucket 2 out of 4 on age); tablesample语法: tablesample(bucket x out of y) x:表示从哪个bucket开始抽取数据 y:必须为该表总bucket数的倍数或因子 例: 当表总bucket数为32时 TABLESAMPLE(BUCKET 3 OUT OF 8),抽取哪些数据? 共抽取2(32/16)个bucket的数据,抽取第2、第18(16+2)个bucket的数据
3、から挿入データをロードします
from psn21 insert overwrite table psn22 partition(age, sex) select id, name, age, sex, likes, address distribute by age, sex;
ハイブ側面図仮想テーブル
1、説明の役割
用途:側面図のためにとUDTFの機能は、(爆発、スプリット)を組み合わせて使用すること。
まずUDTF 複数行に機能分割し、次にその結果を仮想テーブルの別名をサポートするために、複数のラインに結合されます。
主に解決するために:選択使用UDTFをクエリ時に、クエリが一つだけ含めることができないUDTFを他の分野と同様に、複数含めることはできません、UDTFの問題を
図2に示すように、ケース
、統計表は、どのように多くの都市をどのように多くの趣味がありますか?
-- 查看表描述 describe formatted psn2;
select count(distinct(myCol1)), count(distinct(myCol2)) from psn2 LATERAL VIEW explode(likes) myTable1 AS myCol1 LATERAL VIEW explode(address) myTable2 AS myCol2, myCol3;
ハイブビュービュー
1.説明
そして、リレーショナルデータベースは、通常のビューのように、ハイブは、ビューをサポートしています
特長:
これは、マテリアライズド・ビューをサポートしていません。
唯一のクエリは、データ操作をロードしません
ビューを作成し、単にメタデータを保持し、対応するサブクエリビュー場合クエリを実行
ビューの定義に含ま場合ORDER BY / LIMITの文で、クエリビューにもORDER BY / LIMITのステートメントの操作、閲覧彼らは高い優先度を定義します
ビューは、反復ビューをサポートしています
2、SQL
-- 语法 create view [if not exists] [db_name.]view_name [(column_name [comment column_comment], ...) ] [comment view_comment] [tblproperties (property_name = property_value, ...)] as select ... ; -- 创建视图 create view v_psn as select * from psn; -- 查询视图 select colums from view; -- 删除视图 drop view v_psn;
ハイブインデックス
1.目的:クエリと検索性能を最適化するために、
2、SQL
-- 创建索引 create index t1_index on table psn2(name) as 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler' with deferred rebuild in table t1_index_table; as:指定索引器; in table:指定索引表,若不指定默认生成在default__psn2_t1_index__表中 -- 查询索引 show index on psn2; -- 重建索引(建立索引之后必须重建索引才能生效) alter index t1_index on psn2 rebuild; -- 删除索引 删除索引是会连带删除维护该索引的索引表t1_index_table. 注意:删除索引不要手动删除索引表,这个索引表是系统维护的。如果需要删除索引,只删除相应的索引就可以了,其他的不用管 drop index t1_index on psn2;
ハイブスクリプトが実行されます
1、コマンドラインCLI:コンソールモード
構文操作--hive
- HDFS相互作用を持つ
例:ハイブ> -ls DFS /;
-システムの相互作用およびLinuxへ!始まり
例えば:ハイブ> PWD!2は、スクリプトが(実行されている実際の生産環境の最大で)
コンソールに出力されます結果「PSN2からSELECT *」--hive -e
「psn2から選択* AAA --hive -eにAAAの出力を >」 クエリ結果ファイル
--hive -S -e「psn2 SELECT * FROM > AAA -S」 ミュート出力、使用以下のように表さ
ハイブファイル操作コマンド構文に書き込ま:--hive -fファイル(この方法を使い切った)注-fを使用すると、ファイルのファイルを呼び出す文はコマンドを実行するため
-iファイル注--hive:ときハイブコンソールを終了していない後者の実装で-fを、しかしハイブコンソールに滞在します。さらにいくつかの文法よりもハイブ終了するには、コンソールの完了後に実行されている
ハイブ内のファイルのLinuxシステムの内容を取得し、コンソールを実行するために--sourceをされて、ハイブ操作文に格納されたファイルは、
ハイブ>ソース/ルート/ファイル
3、 JDBC方法ハイブのサービスを開始するhiveserver2方法
4、ウェブをGUIインタフェース(HWI、色合いなど、一般的に用いられる色相は、HWIがあまりにも辛いチキンを持っていません)
ご覧ください。
図1に示すように、テーブルの構成
create table logdata ( host string, identity string, t_user string, time string, request string, referer string, agent string) row format serde 'org.apache.hadoop.hive.serde2.RegexSerDe' with serdeproperties ( "input.regex" = "([^ ]*) ([^ ]*) ([^ ]*) \\[(.*)\\] \"(.*)\" (-|[0-9]*) (-|[0-9]*)" ) stored as textfile;
シリアライザとデシリアライザ
SerDe シリアライズとデシリアライズを行います。
デカップリングの両方に保存して、実行エンジンとの間でデータの構築、。
ハイブは、読み取りおよびコンテンツを記述し、行フォーマットはserdeで区切ら。
serdeシリアライゼーションおよびデシリアライゼーション(ラインコンバータ)「org.apache.hadoop.hive.serde2.RegexSerDe」カノニカル変換、
他の変換器を実装することができるされてもよいserdeカスタマイズそのインタフェース定義変換
行SerDeフォーマット「org.apache.hadoop.hive.serde2.RegexSerDe」
serdeproperties有する(
「input.regex」=「は、各行の式の構文解析されています」
)
データのロード
図1に示すように、負荷データモード
データは任意のデータ変換することなく、テーブルにロードされたとき。ロード操作は、にデータをだけをコピーしているハイブテーブルに対応する位置。データがロードされたときに自動的にテーブルの下にディレクトリを作成します
-- 普通表加载数据 load data local inpath '/root/hivedata/person' into table person; -- 分区表加载数据(静态分区) load data local inpath '/root/hivedata/person' into table p_person partition (sex='man',age=10);
挿入モードから2、
文法
from from_statement insert overwrite table tablename1 [partition (partcol1=val1, partcol2=val2 ...) [if not exists]] select_statement1 [insert overwrite table tablename2 [partition ... [if not exists]] elect_statement2] [insert into table tablename2 [partition ...] select_statement2] ...;
ケース
-- 静态分区表 from person insert overwrite table p_person partition (sex='woman', age=60) select id,name,likes,address;
カスタム機能
Hive 自定义函数 Hive的UDF开发只需要重构UDF类的evaluate函数即可。例: package com.hrj.hive.udf; import org.apache.hadoop.hive.ql.exec.UDF; public class helloUDF extends UDF { public String evaluate(String str) { try { return "HelloWorld " + str; } catch (Exception e) { return null; } } } Hive 自定义函数调用 将该java文件编译成helloudf.jar hive> add jar helloudf.jar; hive> create temporary function helloworld as 'com.hrj.hive.udf.helloUDF'; hive> select helloworld(t.col1) from t limit 10; hive> drop temporary function helloworld; 注意 1.helloworld为临时的函数,所以每次进入hive都需要add jar以及create temporary操作 2.UDF只能实现一进一出的操作,如果需要实现多进一出,则需要实现UDAF
ハイブのパラメータ
名前空間 |
読み取りと書き込みの権限 |
意味 |
hiveconf |
読み書きできます |
ハイブ-site.xmlの各構成変数間 例:ハイブ--hiveconf hive.cli.print.header =真 |
システム |
読み書きできます |
システム変数には、JVMの動作パラメータを 例:システム:user.name =ルート |
ENV |
リードオンリー |
環境変数 例:ENV:JAVA_HOME |
hivevar |
読み書きできます |
李:ハイブ-d ヴァル=キー |
1によって$ {} 参照のために、前記システム、ENVの変数は、接頭辞で始まる必要があります
2、ハイブパラメータ設定モード
(1) 、設定ファイル変更$ HIVE_HOME} {/ confに/hive-site.xmlを
(2)スタートハイブCLI 場合によって- hiveconf キー値= ようセット
例:ハイブ- hiveconf hive.cli.print.header =真
(3)にCLI その後、使用して設定されたコマンドを設定します
3、ハイブセットコマンド
でハイブCLI コンソール可能に設定するハイブ継続的なパラメータクエリを、セット
セットの設定:
セットhive.cli.print.header =はtrue。
セットビュー:
セットhive.cli.print.header
ハイブのパラメータ初期設定:
現在のユーザのホームディレクトリの下に。Hivercのファイル
以下のような:。〜/ Hiverc
ない場合は、直接ファイルを作成することができ、あなたはファイルに書かれたパラメータを設定する必要があり、ハイブ稼働して、それが設定ファイルの変更をロードします。
ハイブ歴史運用コマンドセット:
〜/。hivehistory