Hiveの——操作語句の整理
転載は出典を明記してください。http://blog.csdn.net/l1028386804/article/details/78291025
ハ作成表人情報表 person(String name,int age)
ちょっと複雑なjoinで調べます。
同前は外部表を採用する
xingはまずローカルファイルputからhdfsファイルへの経路下で
同前
いけませんしたがって、ファイルパスの下のすべてのファイルは、このデータテーブルに関連するデータファイルであるべきです。
他のテーブルのファイルがある場合、この作成プロセスはエラーを報告しません。例えばもう一つの書類は一行三列です。それでは三列目です。
癜はpersonテーブルでは解析できません。一列に一列しかないなら、二列目はNULLで補完されます。だから私たちはhdfsファイルのパスを調整します。
複雑なタイプのデータテーブルは、ここで列間を'\t'で分割し、配列要素間を'、'で分割します。
#データファイルの内容は以下の通りです。
表class(teacher sting、student string、age int)
したがって、我々はいくつかのよく使われているクエリフィールドをフィルタするためにパーティションを設定します。
〓〓桶の使用?もっと効率的に!サンプリング可能!主に大データセットのサンプリングに使われます。
バケットの原理は一つのテーブル(またはパーティション)をスライスし、スライスされたフィールドを選択し、バケットの個数を設定し、フィールドと個数のhash値でバケットに入れることです。
例えば、buckett.txtデータファイルの内容は以下の通りです。
idフィールドでshした後、3つのバケツの内容は以下の通りです。
桶id hash 3=0
3 xu 12
6 liqiang 17
桶id hash 3=1
1 huang 11
4 zhhong 14
7 zhhonghu a 19
桶id hash 3=2
2 li。 11
5 hu。 15
このプロセスの作成文は以下の通りです。
1)既知のテーブルと同じ構造のテーブルLikeを作成する:
テーブルの構造だけをコピーして、テーブルの内容をコピーしません。
ALTER TABLEテーブルname CHANGE[COLUMN]col_old_name colnew_name columntype[COMMENT col comment][FIRST 124; AFTER columnuname]
5)追加/置換列Add/ReplacceColumns
6)表の完全な語句を作成します。
ハ作成表人情報表 person(String name,int age)
hive> create table person(name STRING,age INT)ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' ESCAPED BY '\\' STORED AS TEXTFILE;
OK
Time taken: 0.541 seconds
氢作成表のチケット価格情報表 ticket(int age,float price) hive> create table ticket(age INT,price FLOAT)ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' ESCAPED BY '\\' STORED AS TEXTFILE;
OK
Time taken: 0.154 seconds
氢はローカルデータファイルを作成します。 -rw-rw-r-- 1 hadoop hadoop 40 Feb 6 13:28 person.txt
-rw-rw-r-- 1 hadoop hadoop 45 Feb 6 13:28 ticket.txt
氢はローカルのデータファイルをhiveデータストアにロードします。 hive> LOAD DATA LOCAL INPATH '/home/hadoop/hfxdoc/person.txt' OVERWRITE INTO TABLE person;
Copying data from file:/home/hadoop/hfxdoc/person.txt
Copying file: file:/home/hadoop/hfxdoc/person.txt
Loading data to table default.person
Deleted hdfs://10.15.107.155:8000/user/hive/warehouse/person
OK
Time taken: 0.419 seconds
hive> LOAD DATA LOCAL INPATH '/home/hadoop/hfxdoc/ticket.txt' OVERWRITE INTO TABLE ticket;
Copying data from file:/home/hadoop/hfxdoc/ticket.txt
Copying file: file:/home/hadoop/hfxdoc/ticket.txt
Loading data to table default.ticket
Deleted hdfs://10.15.107.155:8000/user/hive/warehouse/ticket
OK
Time taken: 0.25 seconds
菘loadコマンドは、データファイルを配置されたデータ経路に移動します。/user/hive/warehouse hive> show tables;
hive> describe person
hive> select * from person;
OK
huang 26
lili 25
dongdong 13
wangxiao 5
Time taken: 0.092 seconds
hive>
〓〓〓文はMapReduceプログラムにコンパイルされないので、とても速いです。ちょっと複雑なjoinで調べます。
hive> select * from person join ticket on person.age = ticket.age;
MapReduce Total cumulative CPU time: 5 seconds 510 msec
Ended Job = job_201301211420_0011
MapReduce Jobs Launched:
Job 0: Map: 2 Reduce: 1 Cumulative CPU: 5.51 sec HDFS Read: 519 HDFS Write: 71 SUCCESS
Total MapReduce CPU Time Spent: 5 seconds 510 msec
OK
wangxiao 5 5 10.0
dongdong 13 13 20.0
lili 25 25 30.0
huang 26 26 30.0
Time taken: 32.465 seconds
#ここで検索文をMapReduceプログラムにコンパイルし、hadoopで実行します。同前は外部表を採用する
xingはまずローカルファイルputからhdfsファイルへの経路下で
[hadoop@localhost hfxdoc]$ hadoop fs -mkdir /tmp/ticket
[hadoop@localhost hfxdoc]$ hadoop fs -put person.txt /tmp/ticket
[hadoop@localhost hfxdoc]$ hadoop fs -put ticket.txt /tmp/ticket
[hadoop@localhost hfxdoc]$ hadoop fs -ls /tmp/ticket
Found 2 items
-rw-r--r-- 1 hadoop supergroup 40 2013-02-06 13:45 /tmp/ticket/person.txt
-rw-r--r-- 1 hadoop supergroup 45 2013-02-06 13:45 /tmp/ticket/ticket.txt
create external table person_ext(name STRING,age INT)ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' ESCAPED BY '\\' STORED AS TEXTFILE LOCATION '/tmp/ticket'
㌦LOCATIONはデータパスのみ設定できますが、先ほど私達のパスの下に二つのテーブルのファイルがありますか?このように作成した表の一つがいいですか?同前
いけませんしたがって、ファイルパスの下のすべてのファイルは、このデータテーブルに関連するデータファイルであるべきです。
他のテーブルのファイルがある場合、この作成プロセスはエラーを報告しません。例えばもう一つの書類は一行三列です。それでは三列目です。
癜はpersonテーブルでは解析できません。一列に一列しかないなら、二列目はNULLで補完されます。だから私たちはhdfsファイルのパスを調整します。
hive> select * from person_ext;
OK
huang 26
lili 25
dongdong 13
wangxiao 5
1 10
2 10
5 10
13 20
14 20
25 30
26 30
31 40
Time taken: 0.088 seconds
hive> drop table person_ext;
菗Drop外観の操作は元情報が考えたデータを削除しないので、hdfsにはまだデータファイルがあります。複雑なタイプのデータテーブルは、ここで列間を'\t'で分割し、配列要素間を'、'で分割します。
#データファイルの内容は以下の通りです。
1 huangfengxiao beijing,shanghai,tianjin,hangzhou
2 linan changchu,chengdu,wuhan
hive> create table complex(name string,work_locations array)
> ROW FORMAT DELIMITED
> FIELDS TERMINATED BY '\t'
> COLLECTION ITEMS TERMINATED BY ',';
hive> describe complex;
OK
name string
work_locations array
hive> LOAD DATA LOCAL INPATH '/home/hadoop/hfxdoc/complex.txt' OVERWRITE INTO TABLE complex
hive> select * from complex;
OK
huangfengxiao ["beijing","shanghai","tianjin","hangzhou"]
linan ["changchu","chengdu","wuhan"]
Time taken: 0.125 seconds
hive> select name, work_locations[0] from complex;
MapReduce Total cumulative CPU time: 790 msec
Ended Job = job_201301211420_0012
MapReduce Jobs Launched:
Job 0: Map: 1 Cumulative CPU: 0.79 sec HDFS Read: 296 HDFS Write: 37 SUCCESS
Total MapReduce CPU Time Spent: 790 msec
OK
huangfengxiao beijing
linan changchu
Time taken: 20.703 seconds
どのように区分しますか表class(teacher sting、student string、age int)
Mis li huangfengxiao 20
Mis li lijie 21
Mis li dongdong 21
Mis li liqiang 21
Mis li hemeng 21
Mr xu dingding 19
Mr xu wangqiang 19
Mr xu lidong 19
Mr xu hexing 19
このクラスのメンバーのデータをteacherによって分けます。 create table classmem(student string,age int) partitioned by(teacher string)
パーティションファイルclassmem_Misli.txt
huangfengxiao 20
lijie 21
dongdong 21
liqiang 21
hemeng 21
classmem_MrXu.txt
dingding 19
wangqiang 19
lidong 19
hexing 19
LOAD DATA LOCAL INPATH '/home/hadoop/hfxdoc/classmem_Misli.txt' INTO TABLE classmem partition (teacher = 'Mis.li')
LOAD DATA LOCAL INPATH '/home/hadoop/hfxdoc/classmem_MrXu.txt' INTO TABLE classmem partition (teacher = 'Mis.Xu')
#パーティションの列はデフォルトで最後の列になります。hive> select * from classmem where teacher = 'Mr.Xu';
OK
dingding 19 NULL Mr.Xu
wangqiang 19 NULL Mr.Xu
lidong 19 NULL Mr.Xu
hexing 19 NULL Mr.Xu
Time taken: 0.196 seconds
〓〓〓は直接パーティションから検索して、加速します。もしwhere子文の条件がパーティション列ではないなら、このsqlはmapreduceプログラムにコンパイルされて、遅延が大きいです。したがって、我々はいくつかのよく使われているクエリフィールドをフィルタするためにパーティションを設定します。
〓〓桶の使用?もっと効率的に!サンプリング可能!主に大データセットのサンプリングに使われます。
バケットの原理は一つのテーブル(またはパーティション)をスライスし、スライスされたフィールドを選択し、バケットの個数を設定し、フィールドと個数のhash値でバケットに入れることです。
例えば、buckett.txtデータファイルの内容は以下の通りです。
id name age
1 huang 11
2 li 11
3 xu 12
4 zhong 14
5 hu 15
6 liqiang 17
7 zhonghua 19
このデータテーブルを3つの桶に切りたいなら、スライスフィールドはidです。idフィールドでshした後、3つのバケツの内容は以下の通りです。
桶id hash 3=0
3 xu 12
6 liqiang 17
桶id hash 3=1
1 huang 11
4 zhhong 14
7 zhhonghu a 19
桶id hash 3=2
2 li。 11
5 hu。 15
このプロセスの作成文は以下の通りです。
create table bucketmem (id int,name string,age int) CLUSTERED BY (id) sorted by (id asc) into 3 buckets
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
LOAD DATA LOCAL INPATH '/home/hadoop/hfxdoc/bucketmem.txt' INTO TABLE bucketmem;
select * from bucketmem tablesample(bucket 1 out of 4)
〓〓その他の操作の参考、更に完備しているのは公式サイトを参照してください:https://cwiki.apache.org/confluence/display/Hive/Home 1)既知のテーブルと同じ構造のテーブルLikeを作成する:
テーブルの構造だけをコピーして、テーブルの内容をコピーしません。
create table test_like_table like test_bucket;
2)表をリネームするレムト: ALTER TABLE table_name RENAME TO new_table_name
3)パーティションを追加するAdd Parttions:ALTER TABLE table_name ADD partition_spec [ LOCATION 'location1' ]partition_spec [ LOCATION 'location2' ]
4)列の名前/列を含むテーブルの列の位置/列のコメントを修正します。ALTER TABLEテーブルname CHANGE[COLUMN]col_old_name colnew_name columntype[COMMENT col comment][FIRST 124; AFTER columnuname]
5)追加/置換列Add/ReplacceColumns
ALTER TABLE table_name ADD|REPLACE COLUMNS (col_name data_type [COMMENTcol_comment], ...)
ADD COLUMNSは、ユーザが現在の列の末尾に新しい列を追加することを可能にするが、パーティション列の前に。6)表の完全な語句を作成します。
Create [EXTERNAL] TABLE [IF NOT EXISTS] table_name
[(col_name data_type [COMMENT col_comment], ...)]
[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]
[ROW FORMAT row_format]
[STORED AS file_format]
[LOCATION hdfs_path]
7)hiveでhdfsファイルを確認する >dfs -ls /user;