You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将表统计信息插入另一表:Teradata/Hive表统计生成与插入需求

实现方案(Teradata + Hive 版本)

一、先准备统计信息表(如果尚未创建)

咱们得先有个专门存统计结果的表,字段要和你要生成的统计项匹配,我帮你定义好适配两种数据库的结构:

Teradata 版本

CREATE MULTISET TABLE DP_S.stats_table ,
NO FALLBACK , 
NO BEFORE JOURNAL, 
NO AFTER JOURNAL, 
CHECKSUM = DEFAULT, 
DEFAULT MERGEBLOCKRATIO (
    testing_table VARCHAR(100) CHARACTER SET LATIN CASESPECIFIC,
    noofrows NUMBER(30),
    min_id INTEGER,
    max_id INTEGER,
    null_id_count NUMBER(30) -- 用来统计id为空的行数
) NO PRIMARY INDEX;

Hive 版本

Hive语法更简洁,适配一下存储格式和数据类型:

CREATE TABLE IF NOT EXISTS DP_S.stats_table (
    testing_table STRING,
    noofrows BIGINT,
    min_id INT,
    max_id INT,
    null_id_count BIGINT
) STORED AS ORC; -- 也可以根据需求换成Parquet等其他格式

二、生成统计信息并插入

接下来补全你没写完的统计逻辑,直接用「查询+插入」的语句一步完成:

Teradata 版本

INSERT INTO DP_S.stats_table
SELECT 
    'temp_a' AS testing_table,
    CAST(COUNT(*) AS NUMBER(30)) AS noofrows,
    MIN(id) AS min_id,
    MAX(id) AS max_id,
    SUM(CASE WHEN id IS NULL THEN 1 ELSE 0 END) AS null_id_count -- 统计id为空的记录数
FROM DP_S.temp_a;

Hive 版本

Hive语法类似,注意数据类型的适配(用BIGINT对应Teradata的NUMBER(30)):

INSERT INTO TABLE DP_S.stats_table
SELECT 
    'temp_a' AS testing_table,
    CAST(COUNT(*) AS BIGINT) AS noofrows,
    MIN(id) AS min_id,
    MAX(id) AS max_id,
    SUM(CASE WHEN id IS NULL THEN 1 ELSE 0 END) AS null_id_count
FROM DP_S.temp_a;

三、额外实用小提示

  • 如果需要每次统计都覆盖temp_a的旧统计记录:Teradata可以用INSERT ... WITH REPLACE,Hive换成INSERT OVERWRITE TABLE即可。
  • 要是temp_a是超大表:Teradata可以加表统计信息或者用SAMPLE做近似统计(允许误差的话);Hive记得加分区过滤,避免全表扫描浪费资源。

内容的提问来源于stack exchange,提问作者orak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:44:18