📜  Teradata FastLoad

📅  最后修改于: 2021-01-11 11:45:07             🧑  作者: Mango

Teradata快速加载

Teradata FastLoad用于在Teradata系统上的空表中加载大量数据,或将数据从客户端加载到数据库系统。

它允许快速加载没有SI,JI,HIRI(FK)或列分区的单个空表。

FastLoad在Teradata数据库上将有或没有主索引的大量数据加载到一个空表中。但是,行大小和列数对性能的影响大于其他任何因素。

Teradata FastLoad是一个命令驱动的实用程序,可以以批处理或交互方式调用。

Teradata FastLoad实用程序建立多个会话,即默认情况下每个AMP一个会话,在运行期间不使用任何临时日志,而是使用块而不是行传输数据以将数据加载到表中。这就是为什么它这么快。

一次只能加载一张桌子。如果我们要同时加载多个表,请调用多个FastLoad作业。 FastLoad可以从以下位置加载数据:

  • 在网络连接的工作站上输入文件。
  • 来自通道连接的工作站的磁盘或磁带文件。
  • 编写单个输入模块(INMOD)例程以选择,验证和预处理输入数据。
  • 任何其他设备都在提供正确格式的源数据。

Teradata FastLoad前提条件

指定了三个关键组件来运行任何Teradata FastLoad。

1.日志表:需要一个日志表来跟踪系统上运行的每个FastLoad会话的状态。

Teradata在数据库SYSADMIN下维护一个称为fastlog的表。要使用此表,我们需要对该表具有INSERT,DELETE和UPDATE特权。

2.空目标表: FastLoad在向其插入数据之前需要一个空目标表。 FastLoad并不关心这是如何完成的。

我们可以通过在开始加载之前从目标表中删除数据或删除并重新创建目标表来实现此目的。

3.两个错误表:如果在FastLoad过程中发生异常,FastLoad需要两个错误表来捕获。这些表将自动创建。

  • 第一个错误表:用于捕获任何转换错误或违反约束条件。例如,列数据类型错误的行将被报告给第一个错误表。
  • 第二个错误表:用于唯一主索引(UPI)的重复值引起的错误。 FastLoad将为每个UPI仅加载一个实例,并将重复的事件存储在第二个表中。但是,如果整个行都是重复的,则FastLoad会对其进行计数,但不会存储该行。

注意Teradata最多可同时允许15个FastLoad,Multiload或FastExport。这样可以防止系统将所有资源仅提供给加载实用程序。

FastLoad的阶段

FastLoad将整个过程分为两个阶段:

阶段1:获取

  • 此阶段的主要目标是尽快将数据从主机计算机传输到用于访问模块处理器(AMP)的Teradata环境。
  • Teradata解析引擎从输入文件中读取记录,并将一个块发送给每个AMP。
  • 然后,PE打开一个从FastLoad客户端直接到AMP的会话。默认情况下,它将为每个AMP创建一个会话。
  • 客户端会话之一将原始数据打包为64K块。
  • 然后,该大数据块将被随机发送到AMP,而不用担心哪个AMP获取数据。
  • 收到每个数据块后,每个AMP都会根据主索引对行进行哈希处理,并将其重新分配给适当的AMP。
  • 重新分配行之后,数据将被写入AMP上的内部工作表,但仍未排序。
  • 在阶段1结束时,每个AMP都有其行,但是它们不在行哈希序列中。

阶段2:申请

  • 该阶段的主要目标是将数据写入实际的表空间。
  • 当FastLoad收到END LOADING语句时,阶段2开始。
  • 每个AMP将开始对第二个错误表中的行进行排序。
  • 排序后,这些行将被永久写入磁盘中的实际数据块中。
  • 目标表上的锁被释放,错误表被删除。

创建具有以下记录的文本文件,并将文件命名为emp.txt。

202001, James, 1980/01/05, 2010/03/01, 1  
202002, Robert, 1983/03/05, 2010/09/01, 1 
202003, Peter, 1983/04/01, 2009/02/12, 2 
202004, Mike, 1984/11/06, 2014/01/01, 2 
202005, Robert, 1984/12/01, 2015/03/09, 3

以下是一个示例FastLoad脚本,用于将上述文件加载到Emp_Stg表中。

LOGON 192.168.1.102/dbc,dbc;  
   DATABASE tduser;  
   BEGIN LOADING tduser.Emp_Stg  
      ERRORFILES Emp_ET, Emp_UV  
      CHECKPOINT 10;  
      SET RECORD VARTEXT ",";  
     DEFINE 
         in_EmpId (VARCHAR(10)), 
         in_FirstName (VARCHAR(10)), 
         in_BirthDate (VARCHAR(10)), 
         in_JoinedDate (VARCHAR(10)), 
         in_DepartmentNo (VARCHAR(05)), 
         FILE = emp.txt;
      INSERT INTO Emp_Stg 
    (
         EmpId,
         FirstName,
         BirthDate,
         JoinedDate, 
         DepartmentNo
     ) 

      VALUES 
    (  
         :in_EmpId, 
         :in_FirstName, 
         :in_BirthDate (FORMAT 'YYYY/MM/DD'), 
         :in_JoinedDate (FORMAT 'YYYY/MM/DD'),
         :in_DepartmentNo
      ); 
   END LOADING;  
LOGOFF;

执行FastLoad脚本

创建输入文件emp.txt并将FastLoad脚本命名为EmpLoad.fl之后,我们可以在Windows中使用以下命令运行FastLoad脚本。

FastLoad < EmpLoad.fl;

一旦执行了以上命令,FastLoad脚本将运行并生成日志。在日志中,这是FastLoad和状态代码处理的记录数。

/* 03:19:14 END LOADING COMPLETE 
   Total Records Read = 5 
   Total Error Table 1 = 0 (Table has been dropped)
   Total Error Table 2 = 0 (Table has been dropped)
   Total Inserts Applied = 5 
   Total Duplicate Rows = 0 
   Start: Sat June 27 05:20:14 2020 
   End: Sat June 27 05:20:15 2020 

/* 05:20:15 Application Phase statistics: 
              Elapsed time: 00:00:01 (in hh:mm:ss) 
0008  LOGOFF; 
/* 05:20:16 Logging off all sessions