3、Hive数据仓库——建表语句

本文介绍了Hive的基本操作,包括查看SQL解析计划和建表方法。讲解了如何创建内部表和外部表,以及它们的区别。强调了在删除内部表时数据会一同删除,而外部表只删除元数据。还提到了建表时指定存储格式和使用SQL语句创建表的场景。

Hive基本操作

Hive查看SQL解析计划

  我们都知道,hive在执行的时候会把所对应的SQL语句都会转换成MapReduce代码执行,但是具体的MR执行信息我们怎样才能看出来呢?这里就用到了explain关键字,他可详细的表示出在执行对应语句所对应的MR代码。语法格式如下;extended关键字可以更加详细的列举出代码的执行过程。

EXPLAIN [EXTENDED|DEPENDENCY|AUTHORIZATION] query

  explain会把查询语句转化成stage组成的序列,主要由三方面组成:

  1. 查询的抽象语法树
  2. plane中各个stage的依赖情况
  3. 每个阶段的具体描述:描述具体来说就是显示出对应的操作算子和与之操作的对应的数据,例如查询select算子,filter算子,fetch算子等等。

  下面来看一个具体的例子:

explain select * from students limit 10;
explain extended select * from students limit 10;
// extended 可选,可以打印更多细节
explain  select  a.id
        ,a.name
        ,a.clazz
        ,t1.sum_score
from(
    select  id
            ,sum(score) as sum_score
    from score 
    group by id
)t1 right join (
    select  id
            ,name
            ,'文科一班' as clazz
    from students
    where clazz = '文科一班'
) a
on t1.id = a.id
order by t1.sum_score desc
limit 10;

Hive建表

  格式:

CREATE [EXTERNAL] TABLE [
<think> 嗯,用户这次询问的是Hive表语的相关信息,结合之前的对话历史,用户之前问过character varying字段在Hive中的替代方案,现在显然是想深入理解Hive机制。 用户可能正在搭数据仓库,需要从PostgreSQL迁移到Hive,所以既关心字段类型的映射(上次的问题),又需要全面了解表语法(本次的问题)。从用户两次提问的关联性看,应该是个务实的技术人员,关注点很实际——就是要马上能用的代码示例和避坑指南。 翻看之前的回复,已经详细解释过字符串类型的对应关系,这次要侧重表语本身。引用[1][2][3][4]都提到关键点:内部/外部的区别、分区设定、存储格式指定、location用法。特别要注意引用[3]中提到的分区语法和引用[4]强调的外部路径设置,这些都是实际开发中的高频需求。 用户没有明确说使用场景,但根据经验推测可能有这些潜在需求: 1 需要创分区处理时间序列数据 2 可能要对接外部存储系统所以需要external table 3 或许会从现有结构复制(CREATE TABLE AS/LIKE) 回复时要突出三个层次:基础语法结构(必选参数)、进阶功能(分区/分桶)、实战技巧(避免数据重复加载)。分区语法示例尤其重要,因为这是用户最可能遇到的性能优化点。 最后生成的三个相关问题也很有针对性:数据类型映射延续上次话题,分区策略关乎性能,存储格式影响查询效率——完全覆盖数据仓库设的核心痛点。这样用户接下来无论遇到哪个环节的问题,都能找到延伸阅读方向。 </think> 以下是Hive表语的核心语法及参数详解(附示例),结合官方文档与实际开发高频场景整理: ### 一、基础表语法 ```sql CREATE [EXTERNAL] TABLE [IF NOT EXISTS] 名( 列名1 数据类型 [COMMENT &#39;列注释&#39;], 列名2 数据类型, ... ) [PARTITIONED BY (分区列名 数据类型, ...)] -- 分区字段不能与主字段重复 [CLUSTERED BY (分桶列名) INTO 分桶数 BUCKETS] -- 分桶存储 [ROW FORMAT row_format] -- 数据格式定义 [STORED AS file_format] -- 存储格式 [LOCATION &#39;hdfs_path&#39;] -- 数据存储路径(外部必选) [TBLPROPERTIES (属性名=值,...)]; -- 级元数据 ``` --- ### 二、关键参数详解(附示例) #### 1. **`EXTERNAL` 关键字** - **内部**(默认):数据由Hive管理,删除时**同时删除HDFS数据** ```sql CREATE TABLE internal_table (id INT, name STRING); ``` - **外部**:删除时**只删元数据,保留HDFS数据** ```sql CREATE EXTERNAL TABLE external_table ( dept_no INT, addr STRING ) LOCATION &#39;/user/ext/dept&#39;; -- 必须指定路径[^3][^4] ``` #### 2. **`PARTITIONED BY` 分区** 加速查询,按目录存储数据(分区字段虚拟存在,不占用实际存储): ```sql CREATE TABLE logs ( ip STRING, url STRING ) PARTITIONED BY (dt STRING); -- 按日期分区[^3] ``` > 📌 **加载分区数据示例**: > ```sql > ALTER TABLE logs ADD PARTITION (dt=&#39;2023-10-01&#39;); > ``` #### 3. **`ROW FORMAT` 数据格式定义** 指定字段分隔符(常用文本格式): ```sql CREATE TABLE csv_data ( id INT, name STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY &#39;,&#39; -- 列分隔符(逗号) LINES TERMINATED BY &#39;\n&#39;; -- 行分隔符(换行符)[^4] ``` #### 4. **`STORED AS` 存储格式** | 格式 | 特点 | 适用场景 | |------------|--------------------------|-----------------------| | `TEXTFILE` | 默认格式,可读性强 | 原始日志(兼容性好) | | `ORC` | 列式存储,高压缩比 | 大数据量分析 | | `PARQUET` | 列式存储,Schema演进支持 | 跨系统数据交换 | ```sql CREATE TABLE orc_table ( id INT, name STRING ) STORED AS ORC; -- 使用ORC格式存储[^2] ``` #### 5. **快速方式** - **`LIKE` 复制结构**: ```sql CREATE TABLE new_table LIKE existing_table; -- 仅复制结构[^1] ``` - **`AS SELECT` 复制结构+数据**: ```sql CREATE TABLE dept_backup AS SELECT * FROM dept; -- 备份数据[^1][^4] ``` --- ### 三、最佳实践议 1. **路径规范** - 内部默认路径:`/user/hive/warehouse/库名.db/名` - 外部路径需自定义:`LOCATION &#39;/project/user/table_name&#39;` 2. **字符集问题** 中文乱码时需在`TBLPROPERTIES`中指定: ```sql TBLPROPERTIES (&#39;serialization.encoding&#39;=&#39;UTF-8&#39;) ``` 3. **避免分区陷阱** 分区字段不要与实际字段同名,否则报错: ```sql -- ❌ 错误:addr已存在于主字段 CREATE TABLE dept(dept_no INT, addr STRING) PARTITIONED BY (addr STRING); ``` --- ### 四、完整示例 ```sql CREATE EXTERNAL TABLE user_behavior ( user_id BIGINT, item_id BIGINT, behavior_type STRING ) PARTITIONED BY (dt STRING) -- 按天分区 ROW FORMAT DELIMITED FIELDS TERMINATED BY &#39;\t&#39; -- 列分隔符为Tab STORED AS ORC LOCATION &#39;/data/user_behavior&#39; TBLPROPERTIES (&#39;orc.compress&#39;=&#39;SNAPPY&#39;); ``` > 参考文档:[Hive官方文档](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-CreateTable)[^2]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liangzai2048

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值