19HIVE中的DML,和serde(hive学习2)

DML:数据库操作语言

1.只删除psn表中数据,delete和truncate一个通过事务和没通过事务的区别,delete·不行·,truncate才可以
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]

FROM from_statement 
INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...) [IF NOT EXISTS]] select_statement1 
[INSERT OVERWRITE TABLE tablename2 [PARTITION ... [IF NOT EXISTS]] elect_statement2] 
[INSERT INTO TABLE tablename2 [PARTITION ...] select_statement2] ...;

区分insert into 和 insert overowrite:
1、insert into 语句

Hive> insert into table account select id,age,name from account_tmp;

2、insert overwrite语句

hive> insert overwrite table account2 select id,age,name from account_tmp;

插入的数据:
001 20 zhangsan

两者的区别:

insert overwrite 会覆盖已经存在的数据,假如原始表使用overwrite 上述的数据,先现将原始表的数据remove,再插入新数据。最后表的数据 只有001 20 zhangsan这一条记录。

insert into 只是简单的插入,不考虑原始表的数据,直接追加到表中。最后表的数据是原始数据和新插入的 001 20 zhangsan

原文链接:https://blog.csdn.net/qq_31382921/article/details/70911108
hive一共有四种导入方式,使用的话只有两种
一起学Hive——详解四种导入数据的方式
主要的有以下两种,其余不推荐

load data local inpath '/home/hadoop/hive_test/load_data_local.txt' into table load_data_local;
from load_data_local 
insert overwrite table load_data_partition partition (age)
  select name,age
insert overwrite table load_data_local3 
  select *

上面的这个sql语句同时插入到表load_data_partition和load_data_local3表中。这种方式非常高效,对于大数据量并且要将数据插入到多个表的情况下,建议用这种方式。

SerDe

Hive SerDe - Serializer and Deserializer
SerDe 用于做序列化和反序列化。
构建在数据存储和执行引擎之间,对两者实现解耦。
Hive通过ROW FORMAT DELIMITED以及SERDE进行内容的读写。

row_format
: DELIMITED 
         [FIELDS TERMINATED BY char [ESCAPED BY char]] 
         [COLLECTION ITEMS TERMINATED BY char] //指定读取文件的规则
         [MAP KEYS TERMINATED BY char] 
         [LINES TERMINATED BY char] 
: SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, ...)]

Hive正则匹配

 CREATE TABLE logtbl (
    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;
([^ ]*) ([^ ]*) ([^ ]*) \\[(.*)\\] \"(.*)\" (-|[0-9]*) (-|[0-9]*)//([^ ]*)非空*所有\\转义
//格式
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 -
2创建表并加载数据文件.png

3查看数据.png

你可能感兴趣的:(19HIVE中的DML,和serde(hive学习2))