hive 數據結構與查詢


hive 常見數據結構:
1,struct 大約 c語言之中的結構體,都可以使用'.'來進行訪問元素的內容
2,map 鍵值對
3,array 數組
創建文件
xiaoming,lili_bingbing,xiao xiao:18_xiaoqiang song :19 tong luo wan
針對以上數據創建表:根據行來進行創建 ,指定每一行的數據類型與分隔符
    create table test(
    name string,
    friends array<string>,
    address struct<street:string, city:string>
    ) row format delimited
     fields terminated by ',' /*每行以,分割*/
     collection items terminated by '_'
     map keys terminated by ':'
    /* 查詢*/
    select friends[1],address.city from test;
使用 jdbc 連接 hive, 需要開啟 hiveserver2
    # 需要 bin/hiveserver2
    ./beeline  -u jdbc:hive2://master:10000
    # 或者 !connect jdbc:hive2://master:10000
內部表與外部表:
1,內部表數據由Hive自身管理,外部表數據由HDFS管理
2,刪除內部表會直接刪除元數據(metadata)及存儲數據;刪除外部表僅僅會刪除元數據,HDFS上的文件並不會被刪除;
表分區:
1,在 hive 之中表是以文件夾(最大值為block 大小)的形式展示的,以文件的角度來說,分區是表文件增加子目錄,子目錄存儲文件
2,hive 沒有索引,因此使用分區(指定文件夾)來避免全局掃描
/*數據庫增加表字段類型*/
alter database  sga set dbproperties("ctime"="1990-28-18");
/*查看數據庫(包括隱藏字段)*/
desc database extended sga;
drop database sga cascade; /*級聯刪除 也會將 hdfs 之中的文件進行刪除!*/

/*修改表名稱 但是不支持數據庫重命名*/
alter table test rename to FPGA;
/*表增減字段*/
alter table stu add columns(gg string,address struct <street:string, city:string >)
/* 執行的 mr 任務,不僅創建表結構,還會將數據加載進去 */
create table students as select * from stu;
/* 只有表結構的數據*/
create table student1 like stu;
/* 查看表詳細信息 */
desc formatted student;

/*默認創建的是管理表(內部表),使用 external關鍵字創建外部表*/
create external table dept(dept int ,dname string, loc int) row format delimited fields terminated by '\t';
/* 外部表刪除會將原始數據不會刪除!可以重新建表*/
drop table dept
/*內部表轉化成外部表(區分大小寫,單雙引號,不然會加屬性)  Table Type: EXTERNAL_TABLE */
alter table student set tblproperties('EXTERNAL'='TRUE');
/*內部表轉化成外部表 Table Type: MANAGED_TABLE*/
alter table student set tblproperties('EXTERNAL'='FALSE');

/*創建分區表*/
create table stu_partition(id int,name string) partitioned by(month string) row format delimited fields terminated by '\t';
/*分區表插入數據 ,也就是指定表文件下的子文件夾 /user/hive/warehouse/stu_partition/month=19960712*/
load data local inpath '/home/hadoop/hive/bin/stu.txt' into table stu_partition partition(month=19960712);
/*按照表分區進行查詢,表分區是加了一個表字段*/
select * from stu_partition where month=19960712 or month=19960711;
/*為表增加兩個分區*/
alter table stu_partition add partition(month=19960721) partition(month=19960722);
/*為表刪除一個分區,多個使用 ',' */
alter table stu_partition drop partition(month=19960721),partition(month=19960722);
hive 序列化操作 針對文件為
192.168.57.4 - - [29/Feb/2016:18:14:35 +0800] "GET /bg-upper.png HTTP/1.1" 304 -
192.168.57.4 - - [29/Feb/2016:18:14:35 +0800] "GET /bg-nav.png HTTP/1.1" 304 -
192.168.57.4 - - [29/Feb/2016:18:14:35 +0800] "GET /asf-logo.png HTTP/1.1" 304 -
192.168.57.4 - - [29/Feb/2016:18:14:35 +0800] "GET /bg-button.png HTTP/1.1" 304 -
192.168.57.4 - - [29/Feb/2016:18:14:3
192.168.57.4 - 
創建 sql 語句
CREATE TABLE logtbl1 (
        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;
查詢結果(hive 讀時檢查數據格式,如果不正確,那么久會顯示 null)

hive 動態分區:
   # 修改權限 開啟動態分區
   set hive.exec.dynamic.partiton=true
   #修改默認狀態 默認strict。至少有一個靜態分區
   set hive.exec.dynamic.partiton.mode=nostrict
首先創建原始表, 然后 load 數據, 使用另外表進行數據分區
create table tb_p0(
id int,
name string,
likes array<string>,
age int ,
sex 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 tb_p1(
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'

/*已經存在的表格並且要有數據 */
from tb_p0
insert overwrite table tb_p2 partiton (age,sex)
select * distribute by age,sex

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM