温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

hive数据库如何建表

发布时间:2026-10-17 08:10:28 来源:亿速云 阅读:82 作者:小樊 栏目:数据库

在 Hive 中建表主要使用 HiveQL(类 SQL),核心语法是 CREATE TABLE。下面从基础到常见场景给你系统讲一下。


一、最基础的建表语句

CREATE TABLE IF NOT EXISTS db_name.table_name (
    id INT,
    name STRING,
    age INT
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;

说明:

  • IF NOT EXISTS:表存在时不报错
  • ROW FORMAT DELIMITED:指定行格式
  • FIELDS TERMINATED BY ',':字段分隔符
  • STORED AS TEXTFILE:存储格式(默认)

二、指定数据库

CREATE TABLE test.user_info (
    user_id BIGINT,
    user_name STRING
)
STORED AS PARQUET;

或者先切库:

USE test;
CREATE TABLE user_info (...);

三、内部表(Managed Table) vs 外部表(External Table)

1️⃣ 内部表(默认)

删除表时,数据和元数据一起删除

CREATE TABLE internal_table (
    id INT,
    name STRING
);

2️⃣ 外部表(推荐用于生产)

删除表时,只删元数据,数据保留

CREATE EXTERNAL TABLE external_table (
    id INT,
    name STRING
)
LOCATION '/user/hive/warehouse/external_table';

四、常用存储格式

格式 特点
TEXTFILE 默认,可读但慢
PARQUET 列式存储,查询快(推荐)
ORC Hive 原生优化格式(推荐)
AVRO 适合 schema 演进

示例(ORC):

CREATE TABLE user_orc (
    id INT,
    name STRING
)
STORED AS ORC;

五、分区表(非常重要)

适合按时间、地区等查询的场景

CREATE TABLE user_log (
    user_id BIGINT,
    action STRING
)
PARTITIONED BY (dt STRING)
STOREED AS PARQUET;

写入分区:

INSERT INTO user_log PARTITION (dt='2026-01-21')
SELECT user_id, action FROM source_table;

六、分桶表(Bucket Table)

用于提升 JOIN 和采样效率

CREATE TABLE user_bucket (
    id INT,
    name STRING
)
CLUSTERED BY (id) INTO 4 BUCKETS
STORED AS ORC;

七、从已有表建表(CTAS)

CREATE TABLE new_table
AS
SELECT id, name FROM old_table;

八、指定 SerDe(复杂格式)

例如 JSON:

CREATE TABLE json_table (
    id INT,
    name STRING
)
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe';

九、查看表结构

DESCRIBE table_name;
DESCRIBE FORMATTED table_name;

如果你有:

  • 具体数据格式(CSV / JSON / 日志)
  • 使用场景(离线数仓 / 实时 / 分区策略)
  • Hive 版本

我可以帮你直接写一条可用的建表语句。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手