Teradata - 问题与答案
Teradata 架构由三个组件组成。
解析引擎 − 解析引擎从用户接收查询,对其进行解析并准备执行计划。
BYNET − BYNET 从解析引擎接收执行计划并分派到适当的 AMP。
AMP − AMP 负责存储和检索行。它将数据存储在与其关联的虚拟磁盘中。除此之外,AMP 还负责锁管理、空间管理、排序和聚合。
FastLoad | MultiLoad |
---|---|
目标表应为空 | 目标表不必为空 |
使用单个脚本只能加载一个表 | 最多可以加载/更新 5 个表 |
仅支持 CREATE/INSERT 语句 | 单个脚本最多支持 20 个 DML 语句脚本 |
不支持带有 RI、SI 和触发器的表 | 支持带有 NUSI 的表 |
FastLoad 通过检查点提供重启功能。当脚本从最后一个检查点重新启动时,可能会再次将相同的行发送到 AMP。这就是 FastLoad 不支持重复的原因。
SET 表不允许重复记录,而 MULTISET 允许重复记录。
对于插入的每一行,系统都会检查是否有任何具有相同行哈希的记录。如果表已定义 UPI,则它将拒绝该记录作为重复记录。否则,它将比较整个记录以查找重复记录。这将严重影响系统性能。
您可以定义唯一主索引或唯一次索引来避免重复行检查。
使用 CREATE TABLE 语句创建表。可以使用以下方法创建表
带有列定义的 CREATE TABLE 语句。
从现有表创建 TABLE。
带有 SELECT 语句的 CREATE TABLE 语句。
可以使用 DISTINCT 语句或 GROUP BY 语句识别重复记录。
SELECT DISTINCT column 1, column 2… FROM tablename; OR SELECT column 1, column 2,… FROM tablename GROUP BY column 1, column 2….;
在 Teradata 中,主键不是强制性的,而主索引是强制性的。
数据分布基于主索引值。
主键不接受 NULL,而主索引接受 NULL 值。
主键是唯一的,而主索引可以是唯一的 (UPI) 或非唯一的 (NUPI)。
主键不变,而主索引会变化。
可以通过 3 种不同的方式访问数据−
- 通过主索引
- 通过二级索引
- 全表扫描
可以使用查询 SELECT HASHAMP() +1; 来识别
可以使用以下查询来实现此目的。
SELECT HASHMAP(HASHBUCKET(HASHROW(primaryindexvalue))), COUNT(*) FROM tablename GROUP BY 1;
Teradata 支持两种事务模式。
- Teradata
- ANSI
使用 SET SESSION TRANSACTION BTET 设置 Teradata 模式;使用 SET SESSION TRANSACTION ANSI 设置 ANSI 模式;
可以使用 BT 和 ET 语句执行事务。
用户不能直接访问连接索引。只有优化器可以访问它们。
重复记录将被拒绝加载目标表,并将插入到 UV 表中。
FALLBACK 是 Teradata 用于处理 AMP 故障的一种保护机制。对于每个数据行,该行的另一个副本存储在集群内的不同 AMP 中。如果任何 AMP 失败,则将使用 FALLBACK AMP 访问相应的行。
在使用 CREATE TABLE 语句创建表时或使用 ALTER TABLE 语句创建表后可以提及 FALLBACK。
如果查询的中间结果超出为提交查询的用户设置的每个 AMP spool 空间限制,则会发生 Spool space 错误。
SLEEP 命令指定Teradata 尝试建立连接之前的等待时间。
TENACITY 命令指定 Teradata 建立新连接的总等待时间。
您可以保留 BEGIN LOADING 和 END LOADING 语句并提交 FASTLOAD 脚本。其他选项是删除表并再次创建表。
Teradata 中的缓存与源一起工作并保持相同的顺序,也就是说,它不会频繁更改。缓存通常在应用程序之间共享。 这是使用 Teradata 的额外优势。
RAID 是一种处理磁盘故障的保护机制。它代表独立磁盘冗余阵列。RAID 1 在 Teradata 中很常用。
二级索引提供了访问数据的备用路径。它们用于避免全表扫描。但是,二级索引需要额外的物理结构来维护子表,并且由于子表需要为每一行更新,因此还需要额外的 I/O。
Teradata 中有四种不同的锁定 − 排他、写入、读取和访问。
可以在三个不同的级别应用锁定 −数据库、表和行。
使用多值压缩 (MVC),您可以压缩最多 255 个值(包括 NULL)。
FastLoad 以 64K 块的形式加载数据。FastLoad 分为两个阶段。
在第 1 阶段,它将数据以 64K 块的形式加载并发送到目标 AMP。然后,每个 AMP 将通过哈希重新分配行到其目标 AMP。
在第 2 阶段,行将按其行哈希顺序排序并写入目标表。
MultiLoad 导入有五个阶段。
阶段 1 − 准备阶段 – 执行基本设置活动。
阶段 2 − DML 事务阶段 – 验证 DML 语句的语法并将其带入 Teradata 系统。
阶段 3 − 获取阶段 – 将输入数据带入工作表并锁定表。
阶段 4 − 应用阶段 – 应用所有 DML 操作。
阶段 5 −清理阶段 – 释放表锁。
MULTILOAD DELETE 更快,因为它会按块删除记录。DELETE FROM 将逐行删除。
存储过程返回一个或多个值,而宏可以返回一行或多行。除了 SQL,存储过程可能包含 SPL 语句。
FastLoad 和 MultiLoad 都以 64K 块为单位加载数据,而 BTEQ 每次处理一行。
FastExport 以 64K 块为单位导出数据,而 BTEQ 每次导出一行。
Teradata Parallel Transporter (TPT) 是用于加载/导出数据的实用程序。它结合了 FastLoad、MultiLoad、BTEQ、TPUMP 和 FastExport 的所有功能。
永久日志在应用更改之前或之后跟踪数据。这有助于将表回滚或前滚到特定状态。永久日志可以在表级别或数据库级别启用。
在 Teradata 中,每个 AMP 都与一个虚拟磁盘相关联。只有拥有虚拟磁盘的 AMP 才能访问该虚拟磁盘中的数据。这被称为无共享架构。
如果查询使用分区列,则会导致分区消除,这将大大提高性能。
分区会消除其他分区,仅访问包含数据的分区。
您可以轻松删除旧分区并创建新分区。
是的。二级索引需要子表,而子表需要永久空间。
是的。每当添加分区主索引时,每行都会占用额外的 2 或 8 个字节作为分区号。
您可以在 Qualify = 2 条件下对指定列使用降序排列的 RANK 函数。
您可以检查查询的 EXPLAIN 计划以确定消耗更多假脱机空间的步骤并尝试优化查询。可以应用过滤器来减少正在处理的记录数,或者您可以将大型查询拆分为多个较小的查询。
当对查询使用 EXPLAIN 命令时,它会指定优化器检索记录的置信度。
Teradata 中有三个置信度级别:高置信度、中等置信度和低置信度。
NUSI 和全表扫描 (FTS) 都将访问所有 AMP,但 FTS 将访问 AMP 内的所有块,而 NUSI 仅在子表包含合格行时才访问块。
在 BTEQ 模式下,可以使用 SKIP 命令跳过记录。
BYTEINT。它只占用一个字节,最多可以存储 +127 个值。
- 通过唯一主索引 – 1 个 AMP
- 通过非唯一主索引 – 1 个 AMP
- 通过唯一二级索引 – 2 个 AMP
- 通过非唯一二级索引 – 所有 AMP
Clique 是一种处理节点故障的保护机制。它是一组节点。当 clique 中的一个节点发生故障时,vprocs(解析引擎和 AMP)将迁移到其他节点并继续在其虚拟磁盘上执行读/写操作。
Teradata 提供不同级别的保护机制。
临时日志 − 用于处理事务失败。
回退 − 用于处理 AMP 故障。
团 − 用于处理节点故障。
RAID − 用于处理磁盘故障。
热备用节点 −处理节点故障而不影响性能和重新启动。
ACTIVITYCOUNT 给出 BTEQ 中受上一个 SQL 查询影响的行数。如果 ACTIVITYCOUNT 语句跟在 insert 语句之后,则返回插入的行数。如果 ACTIVITYCOUNT 语句跟在 select 语句之后,则返回选定的行数。