HIVE Temporary Table&Constraint(九)

HIVE Temporary Table&Constraint

这两介绍下hive的临时表和表约束。

Temporary Table

创建的临时表仅仅在当前会话是可见的,数据将会被存储在用户的暂存目录中,并在会话结束时被删除。如果创建临时表的名字与当前数据库下的一个非临时表相同,则在这个会话中使用这个表名字时将会使用的临时表,而不是非临时表,用户在这个会话内将不能使用原表,除非删除或者重命名临时表。
临时表有如下限制:

  • 不支持分区字段
  • 不支持创建索引

在Hive1.1.0之后临时表可以存储到memory,ssd或者default中,可以通过配置 hive.exec.temporary.table.storage来实现,存储策略可以参考文献3。
一般使用CREATE TEMPORARY TABLE ….来创建临时表。临时表也支持多种创建操作和insert操作。
CREATE TEMPORARY TABLE ….,CTAS, CTL, INSERT INTO。

Constraints

Hive包含对未经验证的主键和外键约束的支持,一些sql工具在存在约束时会生成更加高效的查询,由于这些限制条件未经验证,上游系统在加载到Hive之前需要确保数据的完整性。
常用的PK( PRIMARY KEY)和FK(FOREIGN KEY)约束使用如下:

CREATE TABLE product 
  ( 
     product_id        INTEGER, 
     product_vendor_id INTEGER, 
     PRIMARY KEY (product_id)  DISABLE NOVALIDATE, 
     CONSTRAINT product_fk_1 FOREIGN KEY (product_vendor_id) REFERENCES vend
### Hive 中 `CREATE TEMPORARY TABLE` 的语法及用法 在 Hive 中,`CREATE TEMPORARY TABLE` 是一种用于创建临时表的命令。这些临时表存在于当前会话期间,在会话结束时会被自动删除[^1]。以下是关于该语法及其用法的具体说明: #### 1. 基本语法 ```sql CREATE TEMPORARY TABLE [IF NOT EXISTS] table_name [(col_name data_type [COMMENT col_comment], ...)] [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] [ROW FORMAT row_format] [STORED AS file_format] [TBLPROPERTIES (property_name=property_value, ...)]; ``` - **`TEMPORARY`**: 表明这是一个临时表,只在当前会话中可见并可用。 - **`IF NOT EXISTS`**: 可选参数,防止重复定义相同的临时表名称。 - **列定义**: 定义表中的列名和数据类型。 - **分区 (`PARTITIONED BY`)**: 如果需要按某些字段进行分区,则可以在此处指定。 - **分桶 (`CLUSTERED BY`)**: 如果需要对数据进行分桶处理,则可在此处设置。 #### 2. 存储位置与性能优化 通过配置属性 `hive.exec.temporary.table.storage`,可以选择将临时表的数据存储在内存、SSD 或默认文件系统中[^1]。这有助于提高查询效率,尤其是在频繁访问小型中间结果集的情况下。 #### 3. 创建方式 除了直接使用 `CREATE TEMPORARY TABLE` 外,还可以利用其他方法快速构建临时表: - 使用 `CREATE TEMPORARY TABLE ... AS SELECT` (CTAS): 这种方式允许基于现有数据源动态生成结构化表格内容。 ```sql CREATE TEMPORARY TABLE temp_table_example AS SELECT column_a, SUM(column_b) FROM source_table GROUP BY column_a; ``` - 结合子查询或复杂逻辑:可以在单次 SQL 查询内部嵌套多个阶段计算过程,并最终输出至目标临时表内[^5]。 #### 4. 注意事项 需要注意的是,在 SparkSQL 环境下并不完全兼容此功能——即不支持显式的 `CREATE TEMPORARY TABLE` 操作;取而代之推荐采用视图形式(`CREATE TEMPORARY VIEW`)作为替代方案[^4]。 --- ### 示例代码 下面提供了一个完整的例子展示如何正确运用上述知识点完成实际开发任务: 假设我们需要从两个不同时间范围内的用户活动记录汇总VIP会员列表: ```sql -- 设置临时表存储介质为内存 SET hive.exec.temporary.table.storage=MEMORY; -- 构造第一个时间段内的活跃UID集合 CREATE TEMPORARY TABLE vip_tmp_early AS SELECT dt, uid FROM user_activity WHERE dt BETWEEN '2023-01-01' AND '2023-01-15'; -- 同理获取第二个区间的结果集 CREATE TEMPORARY TABLE vip_tmp_late AS SELECT dt, uid FROM user_activity WHERE dt BETWEEN '2023-01-16' AND '2023-01-31'; -- 综合分析两部分交叠情况下的共同成员身份特征分布状况 SELECT COUNT(DISTINCT t1.uid), AVG(t2.some_metric) FROM vip_tmp_early t1 LEFT JOIN vip_tmp_late t2 ON t1.uid = t2.uid; ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值