Hive學習 HiveQL 資料定義

2021-09-10 06:37:13 字數 4253 閱讀 6521

hiveql可能和mysql語句接近,但是兩者還是存在顯著差異。hive不支援行級插入操作、更新操作和刪除操作。hive也不支援事務。

--建立資料庫

create database financials

--檢視hive中包含的資料庫

show databases

--使用正則匹配篩選出需要的資料庫

show databases like 'h.*'

-- 資料庫所在位置

describe databases financials

-- 刪除資料庫

drop database if exists financials

-- 修改資料庫

alter database financials set dbproperties('edited-by'='joe dba')

create table if not exists mydb.employees (

name string comment 'employee name',

salary float comment 'employee salary',

subordinates arraycomment 'names of subordinates',

deductions mapcomment 'keys are deductions names,values are percentages',

address structcomment 'home address')

--拷貝一張已經存在的表的表模式(而無需拷貝資料)

create table if not exists mydb.employees2 like mydb.employees;

--檢視所有的表

show tables

--列舉指定資料庫下的表

show tables in mydb

--使用正則過濾表名

show table 『empl.*』

關鍵字 extenal 告訴 hive 這個表是外部的,而後面的 location …子句則用於告訴hive資料位於哪個路徑下。

因為表是外部的,所以hive並非認為其完全擁有這份資料。因此,刪除該錶並不會刪除掉這份資料,不過描述表的元資料資訊會被刪除掉。

hive 中有分割槽表的概念。我們可以看到分割槽表具有重要的效能優勢,而且分割槽表還可以將資料以一種符合邏輯的方式進行組織,比如分層儲存。

create table employee (

name string,

salary float,

subordinates array,

deductions map,

address struct)

partitioned by (country string, state string)

--檢視表中所有分割槽

show partitions employees;

--檢視是否儲存某個特定分割槽鍵的分割槽

show partitions employees partition(country = 'us');

show partitions employees partition(country = 'us',state = 'ak');

clustered by … into …buckets子句還可以接乙個可選的 sorted by…子句,「分桶表資料儲存」

drop table if exists employees;
--表重新命名

alter table log_messages rename to logmsgs;

--增加、修改和刪除表分割槽

alter table log_messages add if not exists

partition(year = 2011,month = 1,day = 1) location '/logs/2011/01/01'

partition(year = 2011,month = 1,day = 2) location '/logs/2011/01/02'

...--刪除某個分割槽

alter table log_messages drop if exists

partition(year = 2011,month = 12,day = 2)

修改列資訊

使用者可以對某個字段進行重新命名,並修改其位置、型別或者注釋:

alter table log_messages

change column hms hour_minutes_seconds int

comment 'the hours,minutes,and seconds part of the timestamp'

after severity

增加列

alter table log_messages add column(
刪除或者替換列

alter table log_messages replace columns (

hours_mins_secs int comment 'hour.minute,seconds from timestamp'

severity string comment 'the message severity'

修改表屬性

使用者可以增加附加的表屬性或者修改已經存在的屬性,但是無法刪除屬性

alter table log_messages set tblproperties ( 

'notes'='the process id is no longer captured; this column is always null');

修改儲存屬性

--修改儲存屬性

alter table log_messages

partition(year = 2012 , month = 1 , day = 1 )

set fileformat sequencefile;

--增加儲存屬性(如增加serdeproperties屬性)

alter table log_messages

set serdeproperties (

'prop3'='values3'

'prop4'='values4')

alter table stocks

clustered by ( exchange,symbol)

sorted by (symbol)

into 48 buckets;

sorted by 子句可選

clustered by 和 into… buckets子句必選(資料分桶)

眾多的修改表語句

「鉤子」

應用場景:某個指令碼往分割槽2012/01/01中寫入新的日誌資訊檔案

alter table…touch

alter table log_messages touch partition(year=2012,month=1,day=1)
如果表或者分割槽不存在,那麼這個語句不會建立表或者分割槽。這種情況下要使用合適的建立策略。

alter table…archive partition語句將這個分區內的檔案打成乙個hadoop壓縮包(har)檔案。但是這樣僅僅可以降低檔案系統中檔案數以及減輕namenode壓力,而不會減少任何儲存空間。

alter table log_messages archive

partition(year=2012,month=1,day=1)

hive中防止分割槽被刪除和被查詢:

alter table log_messages

partition(year=2012,month=1,day=1) enable no_drop;

alter table log_messages

partition(year=2012,month=1,day=1) enable offline;

Hive 5 HiveQL 資料操作

5.1 向管理表中裝載資料 hive 沒有行級別的資料插入更新和刪除操作,那麼往表中裝載資料的唯一途徑就是使用一種 大量 的資料裝載操作,或者通過其他方式僅僅將檔案寫入到正確的目錄下 load data local inpath califonia employees overwrite inot ...

HiveQL 資料定義

一.資料庫部分 1.建立資料庫 create database dw 或者create database ifnot exists dw create database dw comment this is a test database create database dw location my...

hiveQL資料定義

hive不支援行級插入操作 更新操作 刪除操作,hive也不支援事物。1,建立資料庫 create database show databases use database hive 會為每個資料庫建立乙個目錄,資料庫中的表將會以這個資料庫目錄的子目錄形式儲存。有乙個例外就是default資料庫中的...