hive建表语句

hive建表:

内部表:

#创建内部表
create table LL_test (

id int,

name string,

age int

)

row format delimited fields terminated by '\001'

stored as textfile;

外部表:

#创建外部表

create  external table LL_test (

id int,

name string,

age int

)

stored as textfile

location '/hdfs/tmp/data/LL_test';

 

<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 '列注释'], 列名2 数据类型, ... ) [PARTITIONED BY (分区列名 数据类型, ...)] -- 分区字段不能与主字段重复 [CLUSTERED BY (分桶列名) INTO 分桶数 BUCKETS] -- 分桶存储 [ROW FORMAT row_format] -- 数据格式定义 [STORED AS file_format] -- 存储格式 [LOCATION 'hdfs_path'] -- 数据存储路径(外部表必选) [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 '/user/ext/dept'; -- 必须指定路径[^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='2023-10-01'); > ``` #### 3. **`ROW FORMAT` 数据格式定义** 指定字段分隔符(常用文本格式): ```sql CREATE TABLE csv_data ( id INT, name STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' -- 列分隔符(逗号) LINES TERMINATED BY '\n'; -- 行分隔符(换行符)[^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 '/project/user/table_name'` 2. **字符集问题** 中文乱码时需在`TBLPROPERTIES`中指定: ```sql TBLPROPERTIES ('serialization.encoding'='UTF-8') ``` 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 '\t' -- 列分隔符为Tab STORED AS ORC LOCATION '/data/user_behavior' TBLPROPERTIES ('orc.compress'='SNAPPY'); ``` > 参考文档:[Hive官方表文档](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-CreateTable)[^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值