2021-02-08b

30.域的含義

域英文叫DOMAIN——域(Domain)是Windows網(wǎng)絡(luò)中獨(dú)立運(yùn)行的單位欺旧,域之間相互訪問則需要建立信任關(guān)系(即Trust Relation)紊服。信任關(guān)系是連接在域與域之間的橋梁简软。當(dāng)一個(gè)域與其他域建立了信任關(guān)系后叁幢,2個(gè)域之間不但可以按需要相互進(jìn)行管理,還可以跨網(wǎng)分配文件和打印機(jī)等設(shè)備資源巧娱,使不同的域之間實(shí)現(xiàn)網(wǎng)絡(luò)資源的共享與管理闺金,以及相互通信和數(shù)據(jù)傳輸逾滥。

域既是 Windows 網(wǎng)絡(luò)操作系統(tǒng)的邏輯組織單元,也是Internet的邏輯組織單元败匹,在 Windows 網(wǎng)絡(luò)操作系統(tǒng)中寨昙,域是安全邊界。域管理員只能管理域的內(nèi)部掀亩,除非其他的域顯式地賦予他管理權(quán)限舔哪,他才能夠訪問或者管理其他的域,每個(gè)域都有自己的安全策略槽棍,以及它與其他域的安全信任關(guān)系捉蚤。

31.SQL CHECK 約束

CHECK 約束用于限制列中的值的范圍。

如果對單個(gè)列定義 CHECK 約束炼七,那么該列只允許特定的值缆巧。

如果對一個(gè)表定義 CHECK 約束,那么此約束會在特定的列中對值進(jìn)行限制豌拙。

1.下面的 SQL 在 "Persons" 表創(chuàng)建時(shí)為 "Id_P" 列創(chuàng)建 CHECK 約束陕悬。CHECK 約束規(guī)定 "Id_P" 列必須只包含大于 0 的整數(shù)。

CREATE TABLE Persons

(

Id_P int NOT NULL CHECK (Id_P>0),

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255)

)

2.如果需要命名 CHECK 約束按傅,以及為多個(gè)列定義 CHECK 約束捉超,請使用下面的 SQL 語法:

CREATE TABLE Persons

(

Id_P int NOT NULL,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255),

CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes')

)

SQL CHECK Constraint on ALTER TABLE

3.如果在表已存在的情況下為 "Id_P" 列創(chuàng)建 CHECK 約束,請使用下面的 SQL:

ALTER TABLE Persons

ADD CHECK (Id_P>0)

4.如果需要命名 CHECK 約束逞敷,以及為多個(gè)列定義 CHECK 約束狂秦,請使用下面的 SQL 語法:

ALTER TABLE Persons

ADD CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes')

5.如需撤銷 CHECK 約束,請使用下面的 SQL:

ALTER TABLE Persons

DROP CONSTRAINT chk_Person

32.Lpad函數(shù)

lpad(字段名,填充長度,填充的字符)

是用來在指定字段左側(cè)填充字符推捐,

比如select lpad('3',2,0) from dual; 就是在 3 這個(gè)基礎(chǔ)上左側(cè)補(bǔ) 0,一共是2位侧啼, 結(jié)果為 03

33.如何使主鍵的值自動(dòng)加1并在前面補(bǔ)0

select LPAD(id+1,14,'0') 記錄編號 from tetdmis

34.order by牛柒,decode對字符列進(jìn)行特定的排序

大家還可以在Order by中使用Decode堪簿。

例:表table_subject,有subject_name列皮壁。要求按照:語椭更、數(shù)、外的順序進(jìn)行排序蛾魄。這時(shí)虑瀑,就可以非常輕松的使用Decode完成要求了。

select * from table_subject order by decode(subject_name, '語文', 1, '數(shù)學(xué)', 2, , '外語',3)

35.decode取最小值

select?decode(sign(變量1-變量2),-1,變量1,變量2) from dual; --取較小值

sign()函數(shù)根據(jù)某個(gè)值是0滴须、正數(shù)還是負(fù)數(shù)舌狗,分別返回0、1扔水、-1

36.decode 查詢某班男生和女生的數(shù)量分別是多少

select decode(性別痛侍,男,1魔市,0)主届,decode(性別,女待德,1君丁,0) from 表

37.利用decode實(shí)現(xiàn)表或者試圖的行列轉(zhuǎn)換

SELECT?

? ? ? ?SUM(DECODE(ENAME,'SMITH',SAL,0)) ?SMITH,

? ? ? ?SUM(DECODE(ENAME,'ALLEN',SAL,0)) ?ALLEN,

? ? ? ?SUM(DECODE(ENAME,'WARD',SAL,0)) ? WARD,

? ? ? ?SUM(DECODE(ENAME,'JONES',SAL,0)) ?JONES,

? ? ? ?SUM(DECODE(ENAME,'MARTIN',SAL,0)) MARTIN FROM EMP

輸出結(jié)果如下:

SMITH ?ALLEN ?WARD ? JONES ?MARTIN

800 ?1600 ? 1250 ? ? 2975 ? 1250

38.使用decode函數(shù)來使用表達(dá)式來搜索字符串

SELECT?ENAME,SAL,DECODE(INSTR(ENAME, 'S'),0,'不含有s','含有s') ASINFO ROM EMP

輸出結(jié)果:

SMITH 800 ? 含有s

ALLEN 1600 ? 不含有s

39.iif函數(shù)的簡單使用

IIf([發(fā)貨日期]<Date(),"已發(fā)貨",IIf([發(fā)貨日期]=Date(),"今天發(fā)貨","未發(fā)貨"))

40.Exists函數(shù)的使用

如果exiists中不包含里外關(guān)聯(lián)條件,如:

select * from emp where exists (select * from dept where dname like '%A%')

則其表命只要括號內(nèi)子查詢語句返回結(jié)果不為空說明where條件成立就會執(zhí)行主sql語句将宪,全部輸出

如果exiists中還包含里外關(guān)聯(lián)條件谈截,如:

select * from emp where exists (select * from dept where dname like '%A%' and deptno = emp.deptno)

則其表明只有滿足括號中條件的結(jié)果才會被輸出

41.not exists函數(shù)的使用

not exists和exists相反,子查詢語句結(jié)果為空涧偷,則表示where條件成立簸喂,執(zhí)行sql語句

如果not exiists中不包含里外關(guān)聯(lián)條件燎潮,如:

select * from emp where not exists (select * from dept where dname like '%A%')

則其表命只要括號內(nèi)子查詢語句返回結(jié)果為空說明where條件成立就會執(zhí)行主sql語句喻鳄,全部輸出

如果not exiists中還包含里外關(guān)聯(lián)條件,如:

select * from emp where exists (select * from dept where dname like '%A%' and deptno = emp.deptno)

則其表明只有滿足括號中條件取反的結(jié)果才會被輸出(包括沒有相關(guān)數(shù)據(jù)的)

補(bǔ)充: “<>”與“确封!=”類似

補(bǔ)充:exiists與not exiists均與子查詢結(jié)果無關(guān)除呵,子查詢結(jié)果只起到了一個(gè)判定的作用,里面的where條件才是關(guān)鍵

補(bǔ)充:exists可以改造為where的格式爪喘,例如:

select * from emp where exists (select * from dept where dname like '%A%' and deptno = emp.deptno)

可以改造為:

select * from emp e ,dept d where d.dname like '%A%' and d.deptno = e.deptno

42.Extract()函數(shù)

截取時(shí)間颜曾,如:

Extract(YEAR FROM SYSDATE)

43.SQL UNION 操作符

UNION 操作符用于合并兩個(gè)或多個(gè) SELECT 語句的結(jié)果集。

請注意秉剑,UNION 內(nèi)部的 SELECT 語句必須擁有相同數(shù)量的列泛豪。列也必須擁有相似的數(shù)據(jù)類型。同時(shí),每條 SELECT 語句中的列的順序必須相同诡曙。

SQL UNION 語法

SELECT column_name(s) FROM table_name1

UNION

SELECT column_name(s) FROM table_name2

注釋:默認(rèn)地臀叙,UNION 操作符選取不同的值。如果允許重復(fù)的值价卤,請使用 UNION ALL劝萤。

SQL UNION ALL 語法

SELECT column_name(s) FROM table_name1

UNION ALL

SELECT column_name(s) FROM table_name2

另外,UNION 結(jié)果集中的列名總是等于 UNION 中第一個(gè) SELECT 語句中的列名慎璧。

44.各種關(guān)聯(lián)查詢的場景選擇

?商品表:存放商品信息

?圖片表:存放圖片

商品表里有4個(gè)商品床嫌,其中兩個(gè)商品沒有圖片

查詢所有的商品的所有信息

正確的做法是列出所有的商品,如果圖片不存在就顯示為 NULL胸私。這時(shí)候就可以使用左連接——LEFT JOIN

補(bǔ)充:

1.inner join相當(dāng)于用where條件來關(guān)聯(lián)

2.left join是指包含左邊表的全部記錄(而不是全部字段厌处,具體輸出什么字段是自己指定的)

3.查詢所有商品信息,則商品表在左邊盖文;查詢所有圖片對應(yīng)的商品嘱蛋,則圖片表在左邊

4.當(dāng)多表聯(lián)查使用left join的時(shí)候,只保證含有最左側(cè)表中的全部記錄即可五续,之后的若干表順序無所謂(但是若是其中出現(xiàn)了依次right join洒敏,則以其右側(cè)表記錄為準(zhǔn);inner join與outer join同理)

45.catalog與schema

按照SQL標(biāo)準(zhǔn)的解釋疙驾,在SQL環(huán)境下Catalog和Schema都屬于抽象概念凶伙,主要用來解決命名沖突問題。

從概念上說它碎,一個(gè)數(shù)據(jù)庫系統(tǒng)包含多個(gè)Catalog函荣,每個(gè)Catalog又包含多個(gè)Schema,而每個(gè)Schema又包含多個(gè)數(shù)據(jù)庫對象(表扳肛、視圖傻挂、序列等),反過來講一個(gè)數(shù)據(jù)庫對象必然屬于一個(gè)Schema挖息,而該Schema又必然屬于一個(gè)Catalog金拒,這樣我們就可以得到該數(shù)據(jù)庫對象的完全限定名稱從而解決命名沖突的問題了

catalog是由一個(gè)數(shù)據(jù)庫實(shí)例的元數(shù)據(jù)組成的

schema是對一個(gè)數(shù)據(jù)庫的結(jié)構(gòu)描述

46.Spark內(nèi)存分配的優(yōu)化

問題原因:查看到用于緩存RDD的內(nèi)存有很大一部分沒有利用上,因此我們可以對Spark內(nèi)部的內(nèi)存分配進(jìn)行一下調(diào)整, 調(diào)高用于shuffle的內(nèi)存, 調(diào)低用于緩存RDD的內(nèi)存具體做法如下:減少配置項(xiàng)” spark.storage.memoryFraction”的比例數(shù),增大配置項(xiàng)” spark.shuffle.memoryFraction”的比例數(shù), 從RDD緩存區(qū)中拿一部分內(nèi)存出來用于shuffle的計(jì)算

47.substring()內(nèi)只有一個(gè)參數(shù)的用法

指的是從該位置以后開始截取

48.在Hive 中如何使用符合數(shù)據(jù)結(jié)構(gòu) ?maps套腹,array绪抛,structs

1. Array的使用?

create table ?person(name string,work_locations array<string>)

ROW FORMAT DELIMITED

FIELDS TERMINATED BY '\t'

COLLECTION ITEMS TERMINATED BY ',';

數(shù)據(jù):

biansutao?beijing,shanghai,tianjin,hangzhou

linan?changchu,chengdu,wuhan

2. Map 的使用?

create table score(name string, score map<string,int>)

ROW FORMAT DELIMITED

FIELDS TERMINATED BY '\t'

COLLECTION ITEMS TERMINATED BY ','

MAP KEYS TERMINATED BY ':';

數(shù)據(jù):

biansutao?'數(shù)學(xué)':80,'語文':89,'英語':95

jobs?'語文':60,'數(shù)學(xué)':80,'英語':99

3 Struct 的使用

CREATE TABLE test(id int,course struct<course:string,score:int>)

ROW FORMAT DELIMITED

FIELDS TERMINATED BY '\t'

COLLECTION ITEMS TERMINATED BY ',';

數(shù)據(jù):

1?english,80

2?math,89

3?chinese,95

49.對于以下數(shù)據(jù)樣例,如何進(jìn)行數(shù)據(jù)清洗:

fQShwYqGqsw?????lonelygirl15???736?People & Blogs????133?151763??3.01???????666?765?fQShwYqGqsw?????LfAaY1p_2Is?5LELNIVyMqo??????vW6ZpqXjCE4??????vPUAf43vc-Q???????ZllfQZCc2_M?it2d7LaU_TA?KGRx8TgZEeU????aQWdqI1vd6o??????kzwa8NBlUeo???????X3ctuFCCF5k??????Ble9N2kDiGc???????R24FONE2CDs???IAY5q60CmYY?????mUd0hcEnHiU???????6OUcp6UJ2bA?????dv0Y_uoHrLc???????8YoxhsUMlgA???????h59nXANN-oo??????113yn3sv0eo

考慮點(diǎn):在video.txt中电禀,視頻可以有多個(gè)所屬分類,每個(gè)所屬分類用&符號分割,并且分割的兩邊有空格字符,多個(gè)相關(guān)視頻又用“tab”進(jìn)行分割幢码。為了分析數(shù)據(jù)時(shí)方便對存在多個(gè)子元素的數(shù)據(jù)進(jìn)行操作,我們首先進(jìn)行數(shù)據(jù)重組清洗操作。

具體做法:將所有的類別用“&”分割,同時(shí)去掉兩邊空格,多個(gè)相關(guān)視頻 id 也使用“&”進(jìn)行分割(如果用“tab”則與字段無法區(qū)分了)

注意事項(xiàng):

1.這里的數(shù)據(jù)清洗不涉及reduce操作尖飞,所以只用map即可症副,視頻的相關(guān)視頻id可以沒有店雅,但是比如評論數(shù)必須有值,沒有評論即為0瓦糕,所以如果一條數(shù)據(jù)的字段缺少底洗,也是臟數(shù)據(jù)腋么,是要被清洗的

2.數(shù)據(jù)清洗時(shí)先拿單行數(shù)據(jù)測試

50.oracel新建函數(shù)包括存儲過程與函數(shù)咕娄,其二者有何區(qū)別

oracle中存儲過程和函數(shù)的區(qū)別如下:

1.存儲過程實(shí)現(xiàn)的功能要復(fù)雜一點(diǎn),而函數(shù)的實(shí)現(xiàn)的功能針對性比較強(qiáng)珊擂。

2.對于存儲過程來說可以返回參數(shù)圣勒,而函數(shù)只能返回值或者表對象。

3.存儲過程一般是作為一個(gè)獨(dú)立的部分來執(zhí)行摧扇,而函數(shù)可以作為查詢語句的一個(gè)部分來調(diào)用圣贸,由于函數(shù)可以返回一個(gè)表對象,因此它可以在查詢語句中位于FROM關(guān)鍵字的后面扛稽。

4.當(dāng)存儲過程和函數(shù)被執(zhí)行的時(shí)候吁峻,SQL Manager會到procedure cache中去取相應(yīng)的查詢語句,如果在procedure cache里沒有相應(yīng)的查詢語句在张,SQL Manager就會對存儲過程和函數(shù)進(jìn)行編譯用含。

5.返回值的區(qū)別,函數(shù)有1個(gè)返回值,而存儲過程是通過參數(shù)返回的,可以有多個(gè)或者沒有

6.調(diào)用的區(qū)別,函數(shù)可以在查詢語句中直接調(diào)用,而存儲過程必須單獨(dú)調(diào)用. 函數(shù)一般情況下是用來計(jì)算并返回一個(gè)計(jì)算結(jié)果而存儲過程一般是用來完成特定的數(shù)據(jù)操作(比如修改、插入數(shù)據(jù)庫表或執(zhí)行某些DDL語句等等) 參數(shù)的返回情況來看: 如果返回多個(gè)參數(shù)值最好使用存儲過程帮匾,如果只有一個(gè)返回值的話可以使用函數(shù)啄骇; oracle函數(shù)和存儲過程最大的區(qū)別就在于,函數(shù)必須帶上一個(gè)return返回值瘟斜,后面跟的是返回值的類型缸夹,而存儲過程可以不帶任何返回值。

51.oracel中的declare的用法

Declare用于定義變量螺句,并為其賦值虽惭,在sql查詢窗口執(zhí)行即可,具體實(shí)例如下:

SQL> declare?

empno emp.empno%TYPE; //聲明的時(shí)候%TYPE前面一定要加上表的中列蛇尚,具體執(zhí)行流程為:首先它到emp表中去查找empno列 %TYPE返回其數(shù)據(jù)的數(shù)據(jù)類型(用于不清楚變量的數(shù)據(jù)類型的情況芽唇,若是已知數(shù)據(jù)類型,則可以直接寫上)

????? ename emp.ename%TYPE;?

????? job?? emp.job%TYPE;?

???? begin?

????? select empno,ename,job into empno,ename,job from emp?? where empno='7369';?

????? dbms_output.put_line(empno||'/'||ename||'/'||job);?

???? end;?

注意:

1.使用select.....into....from語句只能返回單行數(shù)據(jù)佣蓉,如果返回多行披摄,則會出錯(cuò)。

2. dbms_output.put_line()可以輸出括號內(nèi)變量的值

3. 直接賦值要用 := 勇凭,并且賦值只能在begin…end中進(jìn)行疚膊,否則會報(bào)錯(cuò)

4.適用以下條件和循環(huán):

if … then…else…end if;

for … in …(1..20指經(jīng)歷20次循環(huán)) loop …(循環(huán)體)? end loop;

5. oracle 數(shù)組類型,沒有現(xiàn)成的類型虾标,但是可以自己隨意定義寓盗,很方便。

Oracle 數(shù)組可以分為定長數(shù)組和可變長的數(shù)組兩類。以下主要是一維數(shù)組介紹:

定長數(shù)組:

/*定長字符數(shù)組傀蚌,數(shù)組大小為10*/

declare

type v_arr is varray(10) of varchar2(30);

my_arr v_arr;

begin

my_arr:=v_arr('1','2','3');

???????for i in 1..my_arr.count

???????loop

??????????????dbms_output_line(my_arr(i));

???????end loop;

end;???????

變長數(shù)組:

/*可變長字符數(shù)組基显,元素大小30,索引標(biāo)號integer類型自增長*/

declare?

type v_table is table of varchar2(30) index by binary_integer;??

--類型可以是前面的類型定義善炫,index by binary_integer子句代表以符號整數(shù)為索引撩幽,??

--這樣訪問表類型變量中的數(shù)據(jù)方法就是“表變量名(索引符號整數(shù))”。??

my_table v_table;??

begin?

????? for i in 1..20??

???? loop??

????????? my_table(i):=i;??

????????? dbms_output.put_line(my_table(i));??

????? end loop;??

end

注意:雖然可以自定義數(shù)組類型的變量箩艺,但是僅限于用在本次會話中窜醉,因此無法在創(chuàng)建表的時(shí)候指定該種數(shù)據(jù)類型

63.Shullfe中默認(rèn)的排序、分區(qū)艺谆、合并如何進(jìn)行

1.shullfe中的排序:默認(rèn)以mapoutkey進(jìn)行排序

2.shullfe中的分區(qū):默認(rèn)分一個(gè)區(qū)

3.shullfe中的合并:默認(rèn)相同的key進(jìn)行合并

64.reduce端分組如何實(shí)現(xiàn):

一般繼承WritableComparator類榨惰,覆寫public int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2)方法

65.reduce端排序如何實(shí)現(xiàn):

一般繼承WritableComparator類,覆寫public int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2)方法

66.12.hive中使用orc的壓縮方式建表如何導(dǎo)入數(shù)據(jù)

orc的壓縮方式要想向表中導(dǎo)入數(shù)據(jù)需要使用子查詢的方式導(dǎo)入静汤,即把從另一張表中查詢到的數(shù)據(jù)插入orc壓縮格式的表匯中琅催,所以這里需要四張表,兩張textfile類型的表user和video虫给,兩張orc類型的表user_orc和video_orc

67.Hive中order by藤抡,sort by,distribute by狰右,cluster by的區(qū)別

1.order by

全局排序

2.sort by和distribute by組合使用(效果與order by一樣杰捂,但是使用場景不同)

當(dāng)有多個(gè)reduce時(shí)(可以通過set mapred.reduce.tasks=n來指定reduce的個(gè)數(shù)),sort by僅保證在每個(gè)reduce內(nèi)排序(部分有序)棋蚌,distribute by的作用是控制哪些行放入哪些reduce處理的(并不會排序)嫁佳,因此distribute by經(jīng)常和sort by配合使用:SELECT * FROM year distribute by year sort by year asc,temp desc

3.CLUSTER BY

關(guān)鍵字是DISTRIBUTE BY和SORT BY的簡寫,這兩者可以認(rèn)為對應(yīng)與Hadoop的partition和sort過程谷暮。如果partition和sort的key是不同的蒿往,可以使用DISTRIBUTE BY和SORT BY分別指定(如上面的例子)

注:Distribute by和sort by配合使用的場景

1.Map輸出的文件大小不均。

2.Reduce輸出文件大小不均湿弦。

3.小文件過多瓤漏。

4.文件超大。

補(bǔ)充:hive中create table時(shí)的“clustered by(字段1)sorted by (字段2) into 8 buckets”是什么意思

create table時(shí)的clustered by其實(shí)僅僅是分布颊埃,與Select語句中的cluster by其實(shí)并不一樣蔬充。而是和Select語句中的distribute by相同。所以create table的clustered by sorted by其實(shí)等價(jià)于select的distribute by sort by班利,即:按照字段1分布在8個(gè)buckets(桶)中饥漫,并且在每個(gè)buckets中按照字段2升序排序

68.hive中的buckets

Buckets 對指定列計(jì)算 hash,根據(jù) hash 值切分?jǐn)?shù)據(jù)罗标,目的是為了并行庸队,每一個(gè) Bucket 對應(yīng)一個(gè)文件积蜻。如將 user 列分散至 32 個(gè) bucket,首先對 user 列的值計(jì)算 hash彻消,對應(yīng) hash 值為 0 的 HDFS 目錄為:/ warehouse /xiaojun/dt =20100801/ctry=US/part-00000竿拆;hash 值為 20 的 HDFS 目錄為:/ warehouse /xiaojun/dt =20100801/ctry=US/part-00020?

這段描述是說用了bucket之后的,那為什么要用bucket宾尚,沒說丙笋,本著認(rèn)真負(fù)責(zé)的態(tài)度,我從網(wǎng)上搜索到了Oreilly《Programming.Hive》這本書央勒,然后在里面找到了答案不见,現(xiàn)在發(fā)出來和大家分享一下澳化。

首先回顧一下分區(qū),分區(qū)是切分?jǐn)?shù)據(jù)的一種比較方便的方法,比較常用的就是按照日期來進(jìn)行切分裹驰,bucket(中文意思就是籃子废麻,可以放雞蛋,哈哈)其實(shí)也是一種切分?jǐn)?shù)據(jù)的方法列林。

假設(shè)我們有一張日志表瑞你,我們需要按照日期和用戶id來分區(qū),目的是為了加快查詢誰哪天干了什么希痴,如下:

CREATE TABLE weblog (url STRING, source_ip STRING)

> PARTITIONED BY (dt STRING, user_id INT);

但是這里面用user_id去切分的話者甲,就會產(chǎn)生很多很多的分區(qū)了,這些分區(qū)可大可小砌创,這個(gè)數(shù)量是文件系統(tǒng)所不能承受的虏缸。

在這種情況下,我們既想加快查詢速度嫩实,又避免出現(xiàn)如此多的小分區(qū)刽辙,籃子(bucket)就出現(xiàn)了。

  具體的用法是:

CREATE TABLE weblog (user_id INT, url STRING, source_ip STRING)

> PARTITIONED BY (dt STRING)

> CLUSTERED BY (user_id) INTO 96 BUCKETS;

  首先按照日期分區(qū)甲献,分區(qū)結(jié)束之后再按照user_id把日志放在96個(gè)籃子宰缤,這樣同一個(gè)用戶的所有日志都會在同一個(gè)籃子里面,并且一個(gè)籃子里面有好多用戶的日志晃洒。

  然后我們在插入數(shù)據(jù)的時(shí)候就要注意了慨灭,我們一定要設(shè)置hive.enforce.bucketing為true。

hive> SET hive.enforce.bucketing = true;

hive> FROM raw_logs

> INSERT OVERWRITE TABLE weblog

> PARTITION (dt='2009-02-25')

> SELECT user_id, url, source_ip WHERE dt='2009-02-25';

  到此球及,bucket介紹完畢氧骤!

總結(jié):分區(qū)與分桶的目的都是分布存儲數(shù)據(jù),但是以某些特定字段分區(qū)后會造成分區(qū)大小不一桶略,并且存在大量小分區(qū)语淘,這樣十分影響效率诲宇,因此可以使用分桶表,可以控制桶的個(gè)數(shù)惶翻,并且使數(shù)據(jù)均勻分布在桶中姑蓝!

69.Hive 自定義函數(shù) UDF UDAF UDTF的區(qū)別

1、UDF:用戶定義(普通)函數(shù)吕粗,只對單行數(shù)值產(chǎn)生作用纺荧;

2、UDAF:User- Defined Aggregation Funcation颅筋;用戶定義聚合函數(shù)宙暇,可對多行數(shù)據(jù)產(chǎn)生作用;等同與SQL中常用的SUM()议泵,AVG()占贫,也是聚合函數(shù);

3先口、UDTF:User-Defined Table-Generating Functions型奥,用戶定義表生成函數(shù),用來解決輸入一行輸出多行碉京;

70.拆解json字段厢汹,將其進(jìn)行行轉(zhuǎn)列,并獲取key為monthSales的數(shù)據(jù):

[{"source":"7fresh","monthSales":4900,"userCount":1900,"score":"9.9"},{"source":"jd","monthSales":2090,"userCount":78981,"score":"9.8"},{"source":"jdmart","monthSales":6987,"userCount":1600,"score":"9.0"}]

錯(cuò)誤方法:

select get_json_object(explode(split(regexp_replace(regexp_replace(sale_info,'\\[\\{',''),'}]',''),'},\\{')),'$.monthSales') as? sale_info from explode_lateral_view;

會報(bào)錯(cuò):

FAILED: SemanticException [Error 10081]: UDTF's are not supported outside the SELECT clause, nor nested in expressions(即:UDTF 類型的explode函數(shù)不能寫在別的函數(shù)內(nèi))

注:這時(shí)候就需要LATERAL VIEW出場了

正確方法:

select get_json_object(concat('{',sale_info_r,'}'),'$.monthSales') as monthSales from explode_lateral_view?

LATERAL VIEW explode(split(regexp_replace(regexp_replace(sale_info,'\\[\\{',''),'}]',''),'},\\{'))sale_info as sale_info_r;

補(bǔ)充1:將json字段 完全轉(zhuǎn)換成二維表的方式展現(xiàn):

select get_json_object(concat('{',sale_info_1,'}'),'$.source') as source,

? ? ?get_json_object(concat('{',sale_info_1,'}'),'$.monthSales') as monthSales,

? ? ?get_json_object(concat('{',sale_info_1,'}'),'$.userCount') as monthSales,

? ? ?get_json_object(concat('{',sale_info_1,'}'),'$.score') as monthSales

? from explode_lateral_view?

LATERAL VIEW explode(split(regexp_replace(regexp_replace(sale_info,'\\[\\{',''),'}]',''),'},\\{'))sale_info as sale_info_1;

補(bǔ)充2:LATERAL VIEW也可以多重使用

select goods_id2,sale_info,area2

from explode_lateral_view?

LATERAL VIEW explode(split(goods_id,','))goods as goods_id2?

LATERAL VIEW explode(split(area,','))area as area2;

以上結(jié)果為三個(gè)表(explode_lateral_view谐宙、goods烫葬、area)笛卡爾積的結(jié)果

補(bǔ)充3:如果你這么寫,想查兩個(gè)字段:

select explode(split(area,',')) as area,good_id from explode_lateral_view;

會報(bào)錯(cuò):

FAILED: SemanticException 1:40 Only a single expression in the SELECT clause is supported with UDTF's. Error encountered near token 'good_id'(即:使用UDTF的時(shí)候凡蜻,只支持一個(gè)字段)

注:這時(shí)候就需要LATERAL VIEW出場了

71.eclipse打包jar無法連帶打包第三方lib搭综,于是選擇安裝插件fatjar,但是目前高版本的eclipse無法兼容fatjar咽瓷,解決方法如下:

https://www.cnblogs.com/lyh971134228/p/7144981.html

72.sql中any()和all()的使用

分別指任意和全部

73.數(shù)據(jù)庫索引的利弊

索引能讓數(shù)據(jù)庫查詢數(shù)據(jù)的速度上升设凹, 而使寫入數(shù)據(jù)的速度下降,原因很簡單的茅姜, 因?yàn)槠胶鈽溥@個(gè)結(jié)構(gòu)必須一直維持在一個(gè)正確的狀態(tài)闪朱, 增刪改數(shù)據(jù)都會改變平衡樹各節(jié)點(diǎn)中的索引數(shù)據(jù)內(nèi)容,破壞樹結(jié)構(gòu)钻洒, 因此奋姿,在每次數(shù)據(jù)改變時(shí), DBMS必須去重新梳理樹(索引)的結(jié)構(gòu)以確保它的正確素标,這會帶來不小的性能開銷称诗,也就是為什么索引會給查詢以外的操作帶來副作用的原因

74.數(shù)據(jù)庫索引的使用方式

1.單個(gè)字段建立索引

create index index_birthday on user_info(birthday);

//查詢生日在1991年11月1日出生用戶的用戶名

select user_name from user_info where birthday = '1991-11-1'

這句SQL語句的執(zhí)行過程如下:

首先,通過非聚集索引index_birthday查找birthday等于1991-11-1的所有記錄的主鍵ID值

然后头遭,通過得到的主鍵ID值執(zhí)行聚集索引查找寓免,找到主鍵ID值對就的真實(shí)數(shù)據(jù)(數(shù)據(jù)行)存儲的位置

最后癣诱, 從得到的真實(shí)數(shù)據(jù)中取得user_name字段的值返回, 也就是取得最終的結(jié)果

2.多個(gè)字段建立組合索引

create index index_birthday_and_user_name on user_info(birthday, user_name);

這句SQL語句的執(zhí)行過程就會變?yōu)椋?/p>

通過非聚集索引index_birthday_and_user_name查找birthday等于1991-11-1的葉節(jié)點(diǎn)的內(nèi)容袜香,然而葉節(jié)點(diǎn)中除了有user_name表主鍵ID的值以外撕予, user_name字段的值也在里面, 因此不需要通過主鍵ID值的查找數(shù)據(jù)行的真實(shí)所在蜈首,直接取得葉節(jié)點(diǎn)中user_name的值返回即可实抡。 通過這種覆蓋索引直接查找的方式, 可以省略不使用覆蓋索引查找的后面兩個(gè)步驟欢策, 大大的提高了查詢性能

117.flume中event事件頭作用

可以添加一些數(shù)據(jù)正文之外的額外的數(shù)據(jù)

118.Map與mapPartitions方法的區(qū)別

map是對rdd中的每一個(gè)元素進(jìn)行操作吆寨,而mapPartitions(foreachPartition)則是對rdd中的每個(gè)分區(qū)的迭代器進(jìn)行操作。如果在map過程中需要頻繁創(chuàng)建額外的對象(例如將rdd中的數(shù)據(jù)通過jdbc寫入數(shù)據(jù)庫,map需要為每個(gè)元素創(chuàng)建一個(gè)鏈接而mapPartition為每個(gè)partition創(chuàng)建一個(gè)鏈接),則mapPartitions效率比map高的多踩寇。

mapPartitions傳入的參數(shù)是一個(gè)迭代器啄清,里面包含rdd里的所有元素,返回結(jié)果也要是一個(gè)迭代器

119.Map與flatMap方法的區(qū)別

Flatmap與map類似姑荷,區(qū)別是原RDD中的元素經(jīng)map處理后只能生成一個(gè)元素盒延,而原RDD中的元素經(jīng)flatmap處理后可生成多個(gè)元素來構(gòu)建新RDD

例如:

sc.makeRDD(List("asf asx wwq laaa","saa wqe we ffff sss")).flatmap(_.split(" "))

可以生成含有9個(gè)元素的rdd

120.Map方法與reduce方法的作用

map的主要作用就是替換。reduce的主要作用就是計(jì)算鼠冕。

reduce可以將所有元素從頭開始每兩個(gè)一組進(jìn)行運(yùn)算,最后返回一個(gè)結(jié)果元素

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末胯盯,一起剝皮案震驚了整個(gè)濱河市懈费,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌博脑,老刑警劉巖憎乙,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異叉趣,居然都是意外死亡泞边,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進(jìn)店門疗杉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來阵谚,“玉大人,你說我怎么就攤上這事烟具∩沂玻” “怎么了?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵朝聋,是天一觀的道長嗡午。 經(jīng)常有香客問我,道長冀痕,這世上最難降的妖魔是什么荔睹? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任狸演,我火速辦了婚禮,結(jié)果婚禮上僻他,老公的妹妹穿的比我還像新娘严沥。我一直安慰自己,他們只是感情好中姜,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布消玄。 她就那樣靜靜地躺著,像睡著了一般丢胚。 火紅的嫁衣襯著肌膚如雪翩瓜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天携龟,我揣著相機(jī)與錄音兔跌,去河邊找鬼。 笑死峡蟋,一個(gè)胖子當(dāng)著我的面吹牛坟桅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蕊蝗,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼仅乓,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蓬戚?” 一聲冷哼從身側(cè)響起夸楣,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎子漩,沒想到半個(gè)月后豫喧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡幢泼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年紧显,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缕棵。...
    茶點(diǎn)故事閱讀 38,716評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡孵班,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出挥吵,到底是詐尸還是另有隱情重父,我是刑警寧澤,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布忽匈,位于F島的核電站房午,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏丹允。R本人自食惡果不足惜郭厌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一袋倔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧折柠,春花似錦宾娜、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至承冰,卻和暖如春华弓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背困乒。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工寂屏, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人娜搂。 一個(gè)月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓迁霎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親百宇。 傳聞我的和親對象是個(gè)殘疾皇子考廉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內(nèi)容