题目
Hive 建表语句的基本语法是什么?创建表时通常使用什么分隔符?有哪些注意事项?
答案
**基本语法**: ``` CREATE [EXTERNAL] TABLE [IF NOT EXISTS] 表名 ( 列名1 数据类型 [COMMENT '注释'], 列名2 数据类型, ... ) [PARTITIONED BY (分区列 数据类型, ...)] -- 分区表 [CLUSTERED BY (列) INTO 分桶数 BUCKETS] -- 分桶表 [ROW FORMAT DELIMITED FIELDS TERMINATED BY '分隔符' -- 字段分隔符 COLLECTION ITEMS TERMINATED BY '分隔符' -- 数组/Map元素分隔符 MAP KEYS TERMINATED BY '分隔符'] -- Map键值分隔符 [STORED AS 文件格式(如 ORC、Parquet)] [LOCATION 'HDFS路径'] -- 外部表需指定路径 [TBLPROPERTIES (属性名=值, ...)]; ``` **常用分隔符**: - **字段分隔符**:`\t`(制表符)、`,`、`|` - **集合分隔符**:`\002`(Ctrl+B)、`^` - **Map键值分隔符**:`\003`(Ctrl+C) **注意事项**: 1. **数据与分隔符匹配**:确保建表时指定的分隔符与数据文件实际使用的完全一致,否则会导致字段错位。 2. **外部表路径管理**:外部表删除时不删除数据,需手动维护 HDFS 路径。 3. **分区字段限制**:分区列不能是表中已定义的列,且通常为低基数字段(如日期)。 4. **存储格式选择**: ORC/Parquet:列式存储,适合查询优化;TextFile:默认格式,便于直接查看内容。 5. **字符转义**:若数据中包含分隔符,需使用转义字符(如 `\`)或自定义 SerDe 处理。 **示例**:创建按日期分区的日志表: ``` CREATE EXTERNAL TABLE logs ( ip STRING, url STRING ) PARTITIONED BY (dt STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION '/user/hive/logs'; ```