ROW FORMAT指定SerDe,序列化和反序列化
语法一:
ROW FORMAT DELIMITED
[FIELDS TERMINATED BY char] --列分隔符
[COLLECTION ITEMS TERMINATED BY char] --map、struct和array中每个元素之间的分隔符
[MAP KEYS TERMINATED BY char] --map中key与value的分隔符
[LINES TERMINATED BY char] --行分隔符
[NULL DEFINED AS char]
语法二:
ROW FORMAT SERDE serde_name [WITH SERDEPROPERTIES (propertyname=property_value,…)]
STORED AS 指定存储文件类型,常用的存储文件类型:SEQUENCEFILE(二进制序列文件)、TEXTFILE(文本,默认值=)、ORC、PARQUET。
AS:后跟查询语句,根据查询结果创建表,会复制数据,不答应创建外部表。
LIKE 答应用户复制现有的表结构,但是不复制数据,答应创建外部表。
ALTER TABLE table_name ADD|REPLACE COLUMNS (col_name data_type [COMMENT col_comment], ...)
复制代码
alter 后HDFS数据文件并不会更改,必要重新load文件数据才能使用。
在alter时会自动校验数据类型可否转换,比如string转为int会报错,可以设置set hive.metastore.disallow.incompatible.col.type.changes=false;关闭校验
9.DML
数据导入
--向表中装载数据
load data [local] inpath '数据的 path' [overwrite] into table student [partition (partcol1=val1,…)];
--insert(overwrite覆盖 into追加)不支持插入部分字段
insert overwrite/into table student_par select id, name from student where month='201709';
--查询语句中创建表并加载数据
create table if not exists student3 as select id, name from student;
--创建表时通过 Location 指定加载数据路径
create external table if not exists student5( id int, name string)
row format delimited fields terminated by '\t'
location '/student';
-- Import 数据到指定 Hive 表中
import table student2 from '/user/hive/warehouse/export/student';
复制代码
数据导出
--将查询的结果导出
insert overwrite local directory '/opt/module/hive/data/export/student1' --local表示导出至本地,如无,表示导出到hdfs
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'--格式化,可省略
对于非常大的数据集,有时用户必要使用的是一个具有代表性的查询结果而不是全部结果。Hive 可以通过对表举行抽样来满足这个需求。
语法: TABLESAMPLE(BUCKET x OUT OF y)
查询表 stu_buck 中的数据。
hive (default)> select * from stu_buck tablesample(bucket 1 out of 4 on id);
复制代码
注意:x 的值必须小于便是 y 的值,否则
FAILED: SemanticException [Error 10061]: Numerator should not be bigger than denominator in sample clause for table stu_buck
复制代码
16.常用函数
1)检察体系自带的函数hive> show functions;
2)显示自带的函数的用法hive> desc function upper;
3)具体显示自带的函数的用法hive> desc function extended upper;
4)空字段赋值,如果 value 为 NULL,则 NVL 函数返回default_value 的值,否则返回 value 的值,如果两个参数都为 NULL ,则返回 NULL。NVL( value,default_value)
5)CASE WHEN THEN ELSE END
6)字符串拼接:CONCAT(string A/col, string B/col…)
17.行转列
CONCAT_WS(separator, str1, str2,…):它是一个特殊形式的 CONCAT()。第一个参数为分隔符。分隔符可以是与剩余参数一样的字符串。如果分隔符是 NULL,返回值也将为 NULL。str为null会被跳过;
注意: CONCAT_WS must be "string or array