Teradata - 如何理解数据分布?
Teradata - How to understand data distribution?
我一直在寻找如何通过在我的 table 中选择正确的主索引来提高我的 Teradata 视图性能。
通过使用此查询查看数据如何通过 AMP 分布,我找到了指向同一件事的多个答案:
SELECT HASHAMP(HASHBUCKET(HASHROW(<PRIMARY INDEX>))) AS
"AMP#",COUNT(*)
FROM <TABLENAME>
GROUP BY 1
ORDER BY 2 DESC;
我知道我需要均匀分布,但目标 AMP 的行数越少越好,还是 AMP 越少但行数越少越好?
具体示例:在我的 table 上,选择一个索引(产品 ID)表示我将分发 190 个不同的 AMP,每个 AMP 最多有 83 行,并选择两个索引(产品 ID、日期)给我 476 个 AMP,每个 AMP 最多有 24 行。
Teradata 是 分布式数据库 运行 在 大规模并行 硬件上,即多个硬件节点(或云实例)。每个硬件节点上有几个(大约 20 到 50 个)AMP。每个 AMP 都是数据库服务器的一个实例,数据根据 PI 分布在所有 AMP 中。
如果工作可以平均分配,则并行工作效率最高,因此分布良好的 table 会导致最快的扫描。但是 PI 也用于 WHERE-condition 和连接,这可能需要其他列。 PI 的最终决定基于以下标准:
- 访问:用于equi-joins(最重要)的列and/or
基于平等 WHERE-conditions
- 分布:列提供均等分布,即不是太
每个值很多行。 太多可能是几百或几千。
如果 PI
访问需要,大多数客户都有最大喜欢的规则
偏差不超过 50%
- 波动率:PI 列应为 stable,即更新不多。
主键与#2 和#3 完美匹配,但可能不适用于最重要的#1。
应用这些标准对于较大的 table 很重要,通常会导致基于 PK 或 FK 列的 PI,但您的 table 很小,只有 13000 行。通常不建议将 date/timestamp 添加到 PI,因为这会降低用于连接的可能性,但它通常用于 PARTITIONing 大 tables.
因此两个 PI 候选人都可以,假设这个 table 加入了一个大的,你可以检查大的 table 的 PI 列,如果你能匹配它们。
我一直在寻找如何通过在我的 table 中选择正确的主索引来提高我的 Teradata 视图性能。
通过使用此查询查看数据如何通过 AMP 分布,我找到了指向同一件事的多个答案:
SELECT HASHAMP(HASHBUCKET(HASHROW(<PRIMARY INDEX>))) AS
"AMP#",COUNT(*)
FROM <TABLENAME>
GROUP BY 1
ORDER BY 2 DESC;
我知道我需要均匀分布,但目标 AMP 的行数越少越好,还是 AMP 越少但行数越少越好?
具体示例:在我的 table 上,选择一个索引(产品 ID)表示我将分发 190 个不同的 AMP,每个 AMP 最多有 83 行,并选择两个索引(产品 ID、日期)给我 476 个 AMP,每个 AMP 最多有 24 行。
Teradata 是 分布式数据库 运行 在 大规模并行 硬件上,即多个硬件节点(或云实例)。每个硬件节点上有几个(大约 20 到 50 个)AMP。每个 AMP 都是数据库服务器的一个实例,数据根据 PI 分布在所有 AMP 中。
如果工作可以平均分配,则并行工作效率最高,因此分布良好的 table 会导致最快的扫描。但是 PI 也用于 WHERE-condition 和连接,这可能需要其他列。 PI 的最终决定基于以下标准:
- 访问:用于equi-joins(最重要)的列and/or 基于平等 WHERE-conditions
- 分布:列提供均等分布,即不是太 每个值很多行。 太多可能是几百或几千。 如果 PI 访问需要,大多数客户都有最大喜欢的规则 偏差不超过 50%
- 波动率:PI 列应为 stable,即更新不多。
主键与#2 和#3 完美匹配,但可能不适用于最重要的#1。
应用这些标准对于较大的 table 很重要,通常会导致基于 PK 或 FK 列的 PI,但您的 table 很小,只有 13000 行。通常不建议将 date/timestamp 添加到 PI,因为这会降低用于连接的可能性,但它通常用于 PARTITIONing 大 tables.
因此两个 PI 候选人都可以,假设这个 table 加入了一个大的,你可以检查大的 table 的 PI 列,如果你能匹配它们。