Hive基礎知識點總結 DML

2021-10-23 11:33:29 字數 4255 閱讀 6225

向表中載入資料的基本語法

load

data

[local

] inpath '/opt/module/datas/student.txt'

[overwrite]

into

table student [

partition

(partcol1=val1,..

..)]

具體的引數介紹

1. load data 表示載入資料

2. local 表示從本地載入資料到hive表,否則從hdfs載入資料到hive表

3. inpath 表示載入資料的路徑

4. overwrite 表示覆蓋表中已有的資料 否則表示追加

5. into table 表示載入哪張表

6. student 表示具體的表

7. partition 表示上傳到指定的分割槽

通過查詢語句向表中插入資料

將8月份的資料插入到9月份

insert

into

table student partition

(month

='2020-09'

)select id,name from student where

month

='2020-08'

以覆蓋模式寫入

insert overwrite  table student partition

(month

='201708'

)select id,name from student where

month

=201709

;

多插入模式(根據多張表查詢結果) 將9月份的資料分別插入到6月和7月

from  student 

insert overwrite table student partition

(month

='201707'

)select id,name from student where

month

='201709'

insert overwrite table student partition

(month

='201706'

)select id,name from student where

month

='201709'

;

根據查詢結果建立表

create table if not exists student1 as select id,name from student;

建立表時並指定在hdfs上的位置

create external table

ifnot

exists student5(

id int

,name string

)row format delimited fiels terminated

by'\t'

location '/student'

;

import 資料到指定的hive表

import

table student2 partition

(month

='202009'

)from

'/usr/hive/warehouse/export/student'

(hdfs)

hive表資料匯出

查詢結果匯出到本地/usr/

local

/student目錄下

insert overwrite local directory '/usr/local/student'

select

*from student;

//將查詢的資料格式化匯出到本地(或者hdfs)

insert overwrite [local] directory '/usr/local/student'

row format delimited fields

terminated

by'\t'

collection items terminated

by"_"

map keys

terminated

by":"

select

*from student;

hadoop 命令匯出到本地

dfs -get /usr/local/data/hive/student/month=201708/00000_0 /usr/local/student.txt

hive shell 命令匯出到本地

bin/hive -e 'select * from default.student;' > /usr/local/hive/student.txt

export 匯出到hdfs上

export table default.student to '/usr/local/hive/student.txt'

清空資料

truncate table test;//清空表test的資料

全域性排序 order by

desc降序asc公升序

select * from student order by id asc;

每個mapreduce裡面內部排序(sort by)

對於大規模的資料集orderby的效率非常低。在很多情況下,並不需要全域性排序,此時可以使用sort by 也可以使用asc和desc

設定reduce的個數

set mapreduce.job.reduces=3;僅對當前程序有效 程序關閉之後恢復到預設的值.

分割槽排序distribute by

規則:distribute by的分割槽規則是根據分割槽欄位的hash碼與reduce的個數進行模除後,餘數相同的分到乙個區.

hive要求distribute by語句寫在sort by 語句之前

cluster by

distribute bysort by字段相同時,可以使用cluster by方式,但是只能按照公升序進行排列.

建立分桶表

create

table school(id int

, name string)

clustered

by(id)

into

4 buckets

row format delimited fields

terminated

by'\t'

;

記得設定屬性 開啟分桶 或者在配置檔案中永久修改

set hive.enforce.bucketing=true;

如何分桶

hive的分桶採用對分桶字段的值進行雜湊,然後除以桶的個數求餘的方式決定該條記錄存放在哪個桶當中

對於非常大的資料集,有時使用者需要使用的是乙個具有代表性的查詢結果而不是全部結果。hive可以通過對錶進行抽樣來滿足這個需求.

hive (default)> select * from stu_buck tablesample(bucket 1 out of 4 on id);

注:tablesample是抽樣語句,

語法:tablesample(bucket x out of y on field)。

y必須是table總bucket數的倍數或者因子。hive根據y的大小,決定抽樣的比例。

例如,table總共分了4份,當y=2時,抽取(4/2=)2個bucket的資料,

當y=8時,抽取(4/8=)1/2個bucket的資料。

x表示從哪個bucket開始抽取,如果需要取多個分割槽,以後的分割槽號為當前分割槽號加上y。

例如,table總bucket數為4,tablesample(bucket 1out of 2),表示總共抽取(4/2=)2個bucket的資料,抽取第1(x)個和第3(x+y)個bucket的資料;

Java基礎知識點總結

一 方法的過載 方法的過載與返回值型別無關,只需滿足兩個條件即可 一是方法名相同,二是引數個數或型別不同。二 陣列初始化 動態初始化 在定義陣列時,只指定陣列長度,由系統自動為元素賦值的方式。靜態初始化 在定義陣列時為每個元素賦值。有兩種方式 陣列靜態初始化的方式有兩種 1.型別 陣列名 new 型...

RxJava基礎知識點總結

場景1 被觀察者 觀察者和訂閱分開寫 先建立乙個上游observable 角色 被觀察者 observableobservable observable.create new observableonsubscribe 建立乙個下游observer 角色 觀察者 observerobserver n...

CSS基礎知識點總結

一 css的簡介 1 什麼是css 層疊樣式表,css是對html進行樣式修飾語言 層疊 就是層層覆蓋疊加,如果不同的css樣式對同一html標籤進行修飾,樣式有衝突的部分應用優先順序高的,不衝突的部分共同作用 樣式表 就是css屬性樣式的集合 2 css的作用 1 修飾html的 使其html樣式...