8 HQL操作之DML命令

2021-10-18 04:18:07 字數 2738 閱讀 8142

資料操縱語言dml(data manipulation language),dml主要有三種形式:插入(insert)、刪除(delete)、更新(update)。

事務(transaction)是一組單元化操作,這些操作要麼都執行,要麼都不執行,是乙個不可分割的工作單元。

事務具有的四個要素:原子性(atomicity)、一致性(consistency)、隔離性(isolation)、永續性(durability),這四個基本要素通常稱為acid特性。

hive從0.14版本開始支援事務和行級更新,但預設是不支援的,需要一些附加的配置。要想支援行級insert、update、delete,需要配置hive支援事務。

hdfs是不支援檔案的修改;並且當有資料追加到檔案,hdfs不對讀資料的使用者提供一致性的。為了在hdfs上支援資料的更新:

原始檔案+增量檔案:增量小檔案會有合併的機制

-- 這些引數也可以設定在hive-site.xml中

-- 開啟併發

set hive.support.concurrency=true;

-- hive 0.x and 1.x only

-- 1.x需要底下這句,之後的已經變成預設了

set hive.enforce.bucketing=true;

-- 開啟動態分割槽,事務管理器設成以下那個類

set hive.exec.dynamic.partition.mode=nonstrict;

set hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.dbtxnmanager;

-- 建立表用於更新。滿足條件:內部表、orc格式、分桶、設定表屬性

create table zxz_data(

name string,

nid int,

phone string,

ntime date)

clustered by(nid) into 5 buckets

stored as orc

tblproperties('transactional'='true');

-- 建立臨時表,用於向分桶表插入資料

create table temp1(

name string,

nid int,

phone string,

ntime date)

row format delimited

fields terminated by ",";

-- 資料

name1,1,010-83596208,2020-01-01

name2,2,027-63277201,2020-01-02

name3,3,010-83596208,2020-01-03

name4,4,010-83596208,2020-01-04

name5,5,010-83596208,2020-01-05

-- 向臨時表載入資料;向事務表中載入資料

load data local inpath '/home/hadoop/data/zxz_data.txt' overwrite into table temp1;

insert into table zxz_data select * from temp1;

-- 檢查資料和檔案

select * from zxz_data;

dfs -ls /user/hive/warehouse/mydb.db/zxz_data ;

-- dml 操作

delete from zxz_data where nid = 3;

dfs -ls /user/hive/warehouse/mydb.db/zxz_data ;

insert into zxz_data values ("name3", 3, "010-83596208", current_date); -- 不支援

insert into zxz_data values ("name3", 3, "010-83596208", "2020- 06-01"); -- 執行

insert into zxz_data select "name3", 3, "010-83596208", current_date;

dfs -ls /user/hive/warehouse/mydb.db/zxz_data ;

insert into zxz_data values

("name6", 6, "010-83596208", "2020-06-02"),

("name7", 7, "010-83596208", "2020-06-03"),

("name8", 9, "010-83596208", "2020-06-05"),

("name9", 8, "010-83596208", "2020-06-06");

dfs -ls /user/hive/warehouse/mydb.db/zxz_data ;

update zxz_data set name=concat(name, "00") where nid>3;

dfs -ls /user/hive/warehouse/mydb.db/zxz_data ;

-- 分桶字段不能修改,下面的語句不能執行

-- updating values of bucketing columns is not supported

update zxz_data set nid = nid + 1;

mysql之DML操作 一

insert into 表名 values 值1,值2,值3 指定字段插入資料 insert into 表名 欄位1,欄位2,欄位3 values 值1,值2,值3 插入多條記錄 insert into 表名 values 值1,值2,值3 值1,值2,值3 插入查詢結果 insert into 表...

5 HQL操作之 資料操作

裝載資料 load 基本語法 load data local inpath filepath overwrite into table tablename partition partcol1 val1,partcol2 val2 inpath 載入資料的路徑 overwrite 覆蓋表中已有資料 ...

mysql常用命令之DML

dml資料操作語言,主要是用於資料的增刪改。注意事項 插入一條資料 insert into student stu id,stu name,stu age values 123,張三 99 如果每個欄位都增加值,可以寫省略形式 insert into student values 123,張三 99...