1) 数据类型
int
bigint ===> long
float
double
string
boolean TRUE/FALSE ==> 生产用1/0替换,明显提升性能
date/timestamp 用string替换
decimal 精度很高,银行用到
生产上基本就用这两大类:数值/字符串 数值用于统计,其他均为字符串
2) 分隔符
\n 行与行之间的分隔符 默认
\001 ^A 列与列之间的分割符 采用:\t " " $$$ 等
\002 ^B 数组与结构体
\003 ^C map
如: zhangsan,30,shanghai
3) 表操作
1. 创建表操作
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name
-- (Note: TEMPORARY available in Hive 0.14.0 and later)
[(col_name data_type [COMMENT col_comment], ... [constraint_specification])]
[COMMENT table_comment]
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
[CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
[SKEWED BY (col_name, col_name, ...) -- (Note: Available in Hive 0.10.0 and later)]
ON ((col_value, col_value, ...), (col_value, col_value, ...), ...)
[STORED AS DIRECTORIES]
[
[ROW FORMAT row_format]
[STORED AS file_format]
| STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (...)]
-- (Note: Available in Hive 0.6.0 and later)
]
[LOCATION hdfs_path]
[TBLPROPERTIES (property_name=property_value, ...)] -- (Note: Available in Hive 0.6.0 and later)
[AS select_statement]; -- (Note: Available in Hive 0.5.0 and later; not supported for external tables)
例:
① CREATE TABLE emp (
empno int,
ename string,
job string,
mgr int,
hiredate string,
salary double,
comm double,
deptno int
) ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t";
LOAD DATA LOCAL INPATH "/home/hadoop/data/emp.txt" OVERWRITE INTO TABLE emp;
② CREATE TABLE ruoze_emp2 LIKE emp; // 不拷贝数据
③ CREATE TABLE ruoze_emp3 AS select * from emp; // 不拷贝数据
2. 修改表操作
ALTER TABLE table_name RENAME TO new_table_name;
3. 删除表操作
DROP TABLE [IF EXISTS] table_name [PURGE]; -- (Note: PURGE available in Hive 0.14.0 and later)
4) 内部表 VS 外部表 (MANAGED_TABLE vs EXTERNAL)
1. 删除
MANAGED_TABLE 删除的时候,HDFS+META都会被删除
EXTERNAL_TABLE 删除的时候,只删除META信息
Q:为什么建议使用EXTERNAL?
A:从安全性来讲,外部表更合适。生产上所有的日志表都是外部表,drop掉的只是元数据。
A:Hive+Sentry整合,可以设置访问权限。
2. 数据备份/移动
hadoop一般只保存最近的数据,过了这个时间会移动其他地方(s3),所以meta信息随之要发生变化,即移动数据的同时要把meta数据一并改掉。就算移动s3,也可以直接查。
数据备份/移动,涉及到很多调整,典型的就是meta信息。
比如:移动了文件,即需要修改TBLS的Location。