99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

Teradata快速向導

2018-01-07 10:32 更新

Teradata - 簡介

什么是Teradata?

Teradata是受歡迎的關系數(shù)據(jù)庫管理系統(tǒng)之一。 它主要適用于構建大規(guī)模數(shù)據(jù)倉庫應用程序。 Teradata通過并行性的概念實現(xiàn)了這一點。 它是由Teradata公司開發(fā)的。

Teradata的歷史

以下是Teradata歷史的快速摘要,列出了主要里程碑。

  • 1979 - 并入Teradata。

  • 1984 - 發(fā)布第一個數(shù)據(jù)庫計算機DBC / 1012。

  • 1986 - 財富雜志將Teradata命名為“年度產(chǎn)品”。

  • 1999 - 世界上使用Teradata的130千兆字節(jié)的最大數(shù)據(jù)庫。

  • 2002 - Teradata V2R5發(fā)布了分區(qū)主索引和壓縮。

  • 2006 - 推出Teradata主數(shù)據(jù)管理解決方案。

  • 2008 - 使用Active Data Warehousing發(fā)布的Teradata 13.0。

  • 2011 - 收購Teradata Aster并進入高級分析空間。

  • 2012 - 推出Teradata 14.0。

  • 2014 - 推出Teradata 15.0。

Teradata的特點

以下是Teradata的一些功能 -

  • 無限并行化 - Teradata數(shù)據(jù)庫系統(tǒng)基于大規(guī)模并行處理(MPP)架構。 MPP架構在整個系統(tǒng)上平均分配負載。 Teradata系統(tǒng)在其進程之間分割任務,并并行運行它們以確保任務快速完成。

  • 沒有共享架構 - Teradata的架構稱為共享無架構。 Teradata節(jié)點,其訪問模塊處理器(AMP)和與AMP相關聯(lián)的磁盤獨立工作。 他們不會與他人分享。

  • 線性可擴展性 - Teradata系統(tǒng)具有高度可擴展性。 它們可以擴展到2048個節(jié)點。 例如,通過將AMP的數(shù)量加倍,可以使系統(tǒng)的容量增加一倍。

  • 連接 - Teradata可連接到通道連接的系統(tǒng),如主機或網(wǎng)絡連接的系統(tǒng)。

  • 成熟優(yōu)化程序 - Teradata優(yōu)化程序是市場上成熟的優(yōu)化程序之一。 它自從開始就被設計為平行的。 它已經(jīng)針對每個版本進行了優(yōu)化。

  • SQL - Teradata支持行業(yè)標準SQL與存儲在表中的數(shù)據(jù)進行交互。 除此之外,它提供自己的擴展。

  • 強大的實用工具 - Teradata提供強大的實用程序,用于從/向Teradata系統(tǒng)導入/導出數(shù)據(jù),例如FastLoad,MultiLoad,F(xiàn)astExport和TPT。

  • 自動分發(fā) - Teradata自動將數(shù)據(jù)均勻分發(fā)到磁盤,而無需任何手動干預。

Teradata - 簡介...

Teradata為VMWARE提供Teradata express,這是一個完全可操作的Teradata虛擬機。 它提供高達1 TB的存儲。 Teradata提供40GB和1TB版本的VMware。

先決條件

由于VM是64位,因此您的CPU必須支持64位。

Windows的安裝步驟

步驟1 - 從鏈接 “nofollow”target =“_ blank”> http://downloads.teradata.com/download/database/teradata-express-for-vmware-player

步驟2 - 解壓縮文件并指定目標文件夾。

步驟3 - 從鏈接 > https://my.vmware.com/web/vmware/downloads 。 它可用于Windows和Linux。 下載適用于Windows的VMWARE工作站播放器。

VMWare Workstation player

步驟4 - 下載完成后,安裝軟件。

步驟5 - 安裝完成后,運行VMWARE客戶端。

步驟6 - 選擇“打開虛擬機”。 瀏覽提取的Teradata VMWare文件夾,然后選擇擴展名為.vmdk的文件。

Open Virtual Machine

步驟7 - Teradata VMWare已添加到VMWare客戶端。 選擇添加的Teradata VMware,然后單擊“播放虛擬機”。

Play Virtual Machine

步驟7 - Teradata VMWare已添加到VMWare客戶端。 選擇添加的Teradata VMware,然后單擊“播放虛擬機”。...

步驟9 - 以root身份輸入用戶名,按tab并以root身份輸入password,然后再次按Enter。

Welcome TDExpress

步驟10 - 一旦桌面上出現(xiàn)以下屏幕,雙擊“root\'s home”。 然后雙擊“Genome\'s Terminal”。 這將打開Shell。

Open Shell

步驟11 - 從以下shell中,輸入命令/etc/init.d/tpa start。 這將啟動Teradata服務器。

Start Teradata server

啟動BTEQ

BTEQ實用程序用于交互式提交SQL查詢。 以下是啟動BTEQ實用程序的步驟。

步驟1 - 輸入命令/ sbin / ifconfig,記下VMWare的IP地址。

步驟2 - 運行命令bteq。 在登錄提示符處,輸入命令。

登錄< ip address> / dbc,dbc; 并在密碼提示符下輸入password as dbc;

Starting BTEQ

您可以使用BTEQ登錄Teradata系統(tǒng)并運行任何SQL查詢。

Teradata - 架構

Teradata架構基于大規(guī)模并行處理(MPP)架構。 Teradata的主要組件是解析引擎,BYNET和訪問模塊處理器(AMP)。 下圖顯示了Teradata節(jié)點的高級架構。

Teradata Node Architecture

Teradata的組件

Teradata的關鍵組件如下 -

  • 節(jié)點 - 它是Teradata系統(tǒng)中的基本單元。 Teradata系統(tǒng)中的每個單獨的服務器都稱為節(jié)點。 節(jié)點由自己的操作系統(tǒng),CPU,內(nèi)存,自己的Teradata RDBMS軟件副本和磁盤空間組成。 機柜由一個或多個節(jié)點組成。

  • 解析引擎 - 解析引擎負責從客戶端接收查詢并準備有效的執(zhí)行計劃。 解析引擎的職責是 -

    • 從客戶端接收SQL查詢

    • 解析SQL查詢檢查語法錯誤

    • 檢查用戶是否具有針對SQL查詢中使用的對象的所需特權

    • 檢查在SQL中使用的對象是否確實存在

    • 準備執(zhí)行計劃以執(zhí)行SQL查詢并將其傳遞給BYNET

    • 從AMP接收結果并發(fā)送到客戶端

  • 消息傳遞層 - 消息傳遞層稱為BYNET,是Teradata系統(tǒng)中的網(wǎng)絡層。 它允許PE和AMP之間以及節(jié)點之間的通信。 它從解析引擎接收執(zhí)行計劃并發(fā)送到AMP。 類似地,它從AMP接收結果并發(fā)送到解析引擎。

  • 訪問模塊處理器(AMP) - 稱為虛擬處理器(vprocs)的AMP是實際存儲和檢索數(shù)據(jù)的AMP。 AMP從解析引擎接收數(shù)據(jù)和執(zhí)行計劃,執(zhí)行任何數(shù)據(jù)類型轉換,聚合,過濾,排序并將數(shù)據(jù)存儲在與其關聯(lián)的磁盤中。 表中的記錄均勻分布在系統(tǒng)中的AMP之間。 每個AMP與存儲數(shù)據(jù)的一組磁盤相關聯(lián)。 只有該AMP可以從磁盤讀取/寫入數(shù)據(jù)。

存儲架構

當客戶端運行查詢以插入記錄時,解析引擎將記錄發(fā)送到BYNET。 BYNET檢索記錄并將該行發(fā)送到目標AMP。 AMP將這些記錄存儲在其磁盤上。 下圖顯示了Teradata的存儲體系結構。

Storage Architecture

檢索體系結構

當客戶端運行查詢以檢索記錄時,解析引擎會向BYNET發(fā)送請求。 BYNET將檢索請求發(fā)送到適當?shù)腁MP。 然后AMPs并行搜索其磁盤并識別所需的記錄并發(fā)送到BYNET。 BYNET然后將記錄發(fā)送到解析引擎,解析引擎又將發(fā)送到客戶端。 以下是Teradata的檢索體系結構。

Retrieval Architecture

Teradata - 架構...

關系數(shù)據(jù)庫管理系統(tǒng)(RDBMS)是一種DBMS軟件,有助于與數(shù)據(jù)庫進行交互。 它們使用結構化查詢語言(SQL)與存儲在表中的數(shù)據(jù)進行交互。

數(shù)據(jù)庫

數(shù)據(jù)庫是邏輯相關數(shù)據(jù)的集合。 它們被許多用戶訪問用于不同的目的。 例如,銷售數(shù)據(jù)庫包含有關存儲在許多表中的銷售的全部信息。

數(shù)據(jù)庫...

表是存儲數(shù)據(jù)的RDBMS中的基本單元。 表是行和列的集合。 以下是employee表的示例。

員工不 名字 生日
101 Mike James 1/5/1980
104 Alex Stuart 11/6/1984
102 Robert Williams 3/5/1983
105 Robert James 12/1/1984
103 Peter Paul 4/1/1983

列包含類似的數(shù)據(jù)。 例如,Employee表中的BirthDate列包含所有雇員的birth_date信息。

生日
1/5/1980
11/6/1984
3/5/1983
12/1/1984
4/1/1983

...

行是所有列的一個實例。 例如,在員工表中,一行包含有關單個員工的信息。

員工不 名字 生日
101 Mike James 1/5/1980

首要的關鍵

主鍵用于唯一標識表中的行。 主鍵列中不允許有重復值,它們不能接受NULL值。 它是表中的必填字段。

首要的關鍵...

外鍵用于建立表之間的關系。 子表中的外鍵被定義為父表中的主鍵。 一個表可以有多個外鍵。 它可以接受重復值和空值。 外鍵在表中是可選的。

Teradata - 數(shù)據(jù)類型

表中的每個列都與數(shù)據(jù)類型相關聯(lián)。 數(shù)據(jù)類型指定將在列中存儲什么類型的值。 Teradata支持多種數(shù)據(jù)類型。 以下是一些常用的數(shù)據(jù)類型。

數(shù)據(jù)類型 長度(字節(jié)) 值的范圍
BYTEINT 1 -128至& plus; 127
SMALLINT 2 -32768到& plus; 32767
INTEGER 4 -2,147,483,648至& plus; 2147,483,647
BIGINT 8 -9,233,372,036,854,775,80 8至& plus; 9,233,372,036,854,775,8 07
DECIMAL 1-16 ?
NUMERIC 1-16 ?
FLOAT 8 IEEE格式
CHAR 固定格式 1-64,000
VARCHAR Variable 1-64,000
DATE 4 YYYYYMMDD
TIME 6或8 HHMMSS.nnnnnn HHMMSS.nnnnnn& plus; HHMM
TIMESTAMP 10或12 YYMMDDHHMMSS.nnnnnn YYMMDDHHMMSS.nnnnnn& plus; HHMM

Teradata - 表

關系模型中的表定義為數(shù)據(jù)集合。 它們表示為行和列。

表類型

類型Teradata支持不同類型的表。

  • 永久表 - 這是默認表,它包含用戶插入的數(shù)據(jù),并永久存儲數(shù)據(jù)。

  • 易失性表 - 插入到易失性表中的數(shù)據(jù)僅在用戶會話期間保留。 在會話結束時刪除表和數(shù)據(jù)。 這些表主要用于在數(shù)據(jù)變換期間保存中間數(shù)據(jù)。

  • 全局臨時表 - 全局臨時表的定義是持久的,但是在用戶會話結束時刪除表中的數(shù)據(jù)。

  • 派生表 - 派生表保存查詢中的中間結果。 它們的生命周期在創(chuàng)建,使用和丟棄它們的查詢中。

設置Vs Multiset

Teradata基于如何處理重復記錄將表分類為SET或MULTISET表。 定義為SET表的表不存儲重復記錄,而MULTISET表可存儲重復記錄。

值的范圍... 表命令& 描述
1 Create Table

CREATE TABLE命令用于在Teradata中創(chuàng)建表。

2 Alter Table

ALTER TABLE命令用于從現(xiàn)有表中添加或刪除列。

3 Drop Table

DROP TABLE命令用于刪除表。

Teradata - 表...

本章介紹用于操作存儲在Teradata表中的數(shù)據(jù)的SQL命令。

表類型...

INSERT INTO語句用于將記錄插入到表中。

句法

以下是INSERT INTO的通用語法。

INSERT INTO <tablename> 
(column1, column2, column3,…) 
VALUES 
(value1, value2, value3 …);

例子

以下示例將記錄插入到員工表中。

INSERT INTO Employee (
   EmployeeNo, 
   FirstName, 
   LastName, 
   BirthDate, 
   JoinedDate, 
   DepartmentNo 
)
VALUES ( 
   101, 
   'Mike', 
   'James', 
   '1980-01-05', 
   '2005-03-27', 
   01
);

插入上述查詢后,可以使用SELECT語句從表中查看記錄。

員工不 名字 JoinedDate 部門 生日
101 Mike James 3/27/2005 1 1/5/1980

從另一個表插入

INSERT SELECT語句用于從另一個表插入記錄。

例子

以下是INSERT INTO的通用語法。

INSERT INTO <tablename> 
(column1, column2, column3,…) 
SELECT 
column1, column2, column3… 
FROM  
<source table>;

例子

以下示例將記錄插入到員工表中。 在運行以下插入查詢之前,創(chuàng)建具有與employee表相同的列定義的名為Employee_Bkup的表。

INSERT INTO Employee_Bkup ( 
   EmployeeNo, 
   FirstName, 
   LastName, 
   BirthDate, 
   JoinedDate, 
   DepartmentNo 
) 
SELECT 
   EmployeeNo, 
   FirstName, 
   LastName, 
   BirthDate, 
   JoinedDate,
   DepartmentNo 
FROM  
   Employee;

當執(zhí)行上述查詢時,它將把employee表中的所有記錄插入到employee_bkup表中。

規(guī)則

  • 在VALUES列表中指定的列數(shù)應該與INSERT INTO子句中指定的列匹配。

  • NOT NULL列的值是必需的。

  • 如果未指定值,則為可空字段插入NULL。

  • 在VALUES子句中指定的列的數(shù)據(jù)類型應與INSERT子句中的列的數(shù)據(jù)類型兼容。

從另一個表插入...

UPDATE語句用于更新表中的記錄。

句法

以下是UPDATE的通用語法。

UPDATE <tablename> 
SET <columnnamme> = <new value> 
[WHERE condition];

例子

以下示例將員工部門更新為03(對于員工101)。

UPDATE Employee 
SET DepartmentNo = 03 
WHERE EmployeeNo = 101;

在以下輸出中,您可以看到對于員工101,部門從1更新為3。

SELECT Employeeno, DepartmentNo FROM Employee; 
*** Query completed. One row found. 2 columns returned. 
*** Total elapsed time was 1 second.  
EmployeeNo    DepartmentNo 
-----------  ------------- 
   101             3 

規(guī)則

  • 您可以更新表的一個或多個值。

  • 如果未指定WHERE條件,則表的所有行都受到影響。

  • 您可以使用另一個表中的值更新表。

刪除記錄

DELETE FROM語句用于更新表中的記錄。

句法

以下是DELETE FROM的通用語法。

DELETE FROM  <tablename> 
[WHERE condition];

例子

以下示例從表employee中刪除員工101。

DELETE FROM Employee 
WHERE EmployeeNo = 101;

在以下輸出中,您可以看到從表中刪除了員工101。

SELECT EmployeeNo FROM Employee;  
*** Query completed. No rows found. 
*** Total elapsed time was 1 second. 

規(guī)則

  • 您可以更新表的一個或多個記錄。

  • 如果未指定WHERE條件,則表的所有行都將被刪除。

  • 您可以使用另一個表中的值更新表。

Teradata - SELECT語句

SELECT語句用于從表中檢索記錄。

句法

以下是SELECT語句的基本語法。

SELECT 
column 1, column 2, ..... 
FROM  
tablename;

例子

考慮下面的employee表。

員工不 名字 JoinedDate 部門 生日
101 Mike James 3/27/2005 1 1/5/1980
102 Robert Williams 4/25/2007 2 3/5/1983
103 Peter Paul 3/21/2007 2 4/1/1983
104 Alex Stuart 2/1/2008 2 11/6/1984
105 Robert James 1/4/2008 3 12/1/1984

以下是SELECT語句的示例。

SELECT EmployeeNo,FirstName,LastName 
FROM Employee;

執(zhí)行此查詢時,它從employee表中提取EmployeeNo,F(xiàn)irstName和LastName列。

 EmployeeNo            FirstName                       LastName 
-----------  ------------------------------  --------------------------- 
   101                   Mike                            James 
   104                   Alex                            Stuart 
   102                   Robert                          Williams 
   105                   Robert                          James 
   103                   Peter                           Paul

如果要從表中提取所有列,可以使用以下命令,而不是列出所有列。

SELECT * FROM Employee;

上述查詢將從employee表中獲取所有記錄。

WHERE子句

WHERE子句用于過濾SELECT語句返回的記錄。 條件與WHERE子句相關聯(lián)。 僅返回滿足WHERE子句中的條件的記錄。

例子

以下是具有WHERE子句的SELECT語句的語法。

SELECT * FROM tablename 
WHERE[condition];

例子

以下查詢獲取EmployeeNo為101的記錄。

SELECT * FROM Employee 
WHERE EmployeeNo = 101;

執(zhí)行此查詢時,它返回以下記錄。

 EmployeeNo          FirstName                      LastName 
----------- ------------------------------ ----------------------------- 
   101                 Mike                           James 

ORDER BY

執(zhí)行SELECT語句時,返回的行不按任何特定順序。 ORDER BY子句用于按任何列升序/降序排列記錄。

例子

以下是帶有ORDER BY子句的SELECT語句的語法。

SELECT * FROM tablename 
ORDER BY column 1, column 2..;

例子

以下查詢從employee表中提取記錄,并按FirstName對結果排序。

SELECT * FROM Employee 
ORDER BY FirstName;

當執(zhí)行上述查詢時,它將產(chǎn)生以下輸出。

 EmployeeNo         FirstName                      LastName 
----------- ------------------------------ ----------------------------- 
    104               Alex                           Stuart 
    101               Mike                           James 
    103               Peter                          Paul 
    102               Robert                         Williams 
    105               Robert                         James 

通過...分組

GROUP BY子句與SELECT語句一起使用,并將類似的記錄安排到組中。

例子

以下是具有GROUP BY子句的SELECT語句的語法。

SELECT column 1, column2 …. FROM tablename 
GROUP BY column 1, column 2..;

例子

以下示例按DepartmentNo列對記錄進行分組,并標識每個部門的總計數(shù)。

SELECT DepartmentNo,Count(*) FROM   
Employee 
GROUP BY DepartmentNo;

當執(zhí)行上述查詢時,它將產(chǎn)生以下輸出。

 DepartmentNo    Count(*) 
------------  ----------- 
     3             1 
     1             1 
     2             3 

Teradata - SELECT語句...

Teradata支持以下邏輯和條件運算符。 這些運算符用于執(zhí)行比較和組合多個條件。

生日... 含義
> 比...更棒
< 少于
>= 大于或等于
<= 小于或等于
= 等于
BETWEEN 如果值在范圍內(nèi)
IN 如果&lt;表達式&gt;
未輸入 未輸入...
IS NULL IS NULL ...
IS NOT NULL IS NOT NULL ...
AND 組合多個條件。 僅當滿足所有條件時,才評估為true
OR 組合多個條件。 如果滿足任一條件,則計算為true。
NOT 反轉條件的含義

之間

BETWEEN命令用于檢查值是否在值的范圍內(nèi)。

例子

考慮下面的employee表。

員工不 名字 JoinedDate 部門 生日
101 Mike James 3/27/2005 1 1/5/1980
102 Robert Williams 4/25/2007 2 3/5/1983
103 Peter Paul 3/21/2007 2 4/1/1983
104 Alex Stuart 2/1/2008 2 11/6/1984
105 Robert James 1/4/2008 3 12/1/1984

以下示例獲取員工編號介于101,102和103之間范圍內(nèi)的記錄。

SELECT EmployeeNo, FirstName FROM  
Employee 
WHERE EmployeeNo BETWEEN 101 AND 103;

當執(zhí)行上述查詢時,它返回雇員記錄,員工編號在101和102之間。

*** Query completed. 3 rows found. 2 columns returned. 
*** Total elapsed time was 1 second. 
 EmployeeNo            FirstName 
-----------  ------------------------------ 
   101                   Mike 
   102                   Robert 
   103                   Peter

之間...

IN命令用于根據(jù)給定的值列表檢查值。

例子

以下示例獲取員工編號為101,102和103的記錄。

SELECT EmployeeNo, FirstName FROM  
Employee 
WHERE EmployeeNo in (101,102,103);

上述查詢返回以下記錄。

*** Query completed. 3 rows found. 2 columns returned. 
*** Total elapsed time was 1 second.  
 EmployeeNo            FirstName 
-----------  ------------------------------ 
   101                   Mike 
   102                   Robert 
   103                   Peter

不是

NOT IN命令反轉IN命令的結果。 它獲取的值與給定列表不匹配的記錄。

例子

以下示例獲取員工編號不在101,102和103中的記錄。

SELECT * FROM  
Employee 
WHERE EmployeeNo not in (101,102,103);

上述查詢返回以下記錄。

*** Query completed. 2 rows found. 6 columns returned. 
*** Total elapsed time was 1 second. 
 EmployeeNo          FirstName                      LastName 
----------- ------------------------------ -----------------------------    
    104                Alex                          Stuart 
    105                Robert                        James 

Teradata - SET運算符

SET運算符合并多個SELECT語句的結果。 這可能看起來類似于連接,但連接組合來自多個表的列,而SET運算符組合來自多個行的行。

規(guī)則

  • 每個SELECT語句的列數(shù)應該相同。

  • 每個SELECT的數(shù)據(jù)類型必須兼容。

  • ORDER BY應該只包含在最終的SELECT語句中。

不是...

UNION語句用于組合多個SELECT語句的結果。 它忽略重復。

句法

下面是UNION語句的基本語法。

SELECT col1, col2, col3… 
FROM  
<table 1> 
[WHERE condition] 
UNION  

SELECT col1, col2, col3… 
FROM  
<table 2> 
[WHERE condition];

例子

考慮下面的員工表和工資表。

員工不 名字 JoinedDate 部門 生日
101 Mike James 3/27/2005 1 1/5/1980
102 Robert Williams 4/25/2007 2 3/5/1983
103 Peter Paul 3/21/2007 2 4/1/1983
104 Alex Stuart 2/1/2008 2 11/6/1984
105 Robert James 1/4/2008 3 12/1/1984
員工不 ... NetPay
101 40,000 4,000 36,000
102 80,000 6,000 74,000
103 90,000 7,000 83,000
104 75,000 5,000 70,000

以下UNION查詢組合Employee和Salary表中的EmployeeNo值。

SELECT EmployeeNo 
FROM  
Employee 
UNION 

SELECT EmployeeNo 
FROM  
Salary;

執(zhí)行查詢時,將生成以下輸出。

EmployeeNo 
----------- 
   101 
   102 
   103 
   104 
   105

UNION ALL

UNION ALL語句與UNION類似,它合并來自多個表(包括重復行)的結果。

例子

以下是UNION ALL語句的基本語法。

SELECT col1, col2, col3… 
FROM  
<table 1> 
[WHERE condition] 
UNION ALL 

SELECT col1, col2, col3…
FROM  
<table 2> 
[WHERE condition];

例子

以下是UNION ALL語句的示例。

SELECT EmployeeNo 
FROM  
Employee 
UNION ALL 

SELECT EmployeeNo 
FROM  
Salary;

當執(zhí)行上述查詢時,它將產(chǎn)生以下輸出。 你可以看到它也返回重復。

 EmployeeNo 
----------- 
    101 
    104 
    102 
    105 
    103 
    101 
    104 
    102 
    103

UNION ALL...

當執(zhí)行上述查詢時,它將產(chǎn)生以下輸出。 你可以看到它也返回重復。...

例子

以下是INTERSECT語句的基本語法。

SELECT col1, col2, col3… 
FROM  
<table 1>
[WHERE condition] 
INTERSECT 

SELECT col1, col2, col3… 
FROM  
<table 2> 
[WHERE condition];

例子

以下是INTERSECT語句的示例。 它返回兩個表中存在的EmployeeNo值。

SELECT EmployeeNo 
FROM  
Employee 
INTERSECT 

SELECT EmployeeNo 
FROM  
Salary; 

當執(zhí)行上述查詢時,它返回以下記錄。 EmployeeNo 105被排除,因為它不存在于SALARY表中。

EmployeeNo 
----------- 
   101 
   104 
   102 
   103 

MINUS / EXCEPT

MINUS / EXCEPT命令組合多個表中的行,并返回第一個SELECT但不包含第二個SELECT的行。 它們都返回相同的結果。

例子

以下是MINUS語句的基本語法。

SELECT col1, col2, col3… 
FROM  
<table 1> 
[WHERE condition] 
MINUS 

SELECT col1, col2, col3… 
FROM  
<table 2> 
[WHERE condition];

例子

以下是MINUS語句的示例。

SELECT EmployeeNo 
FROM  
Employee 
MINUS 

SELECT EmployeeNo 
FROM  
Salary;

執(zhí)行此查詢時,它返回以下記錄。

EmployeeNo 
----------- 
   105 

Teradata - SET運算符...

Teradata提供了幾個函數(shù)來操作字符串。 這些功能與ANSI標準兼容。

NetPay... 字符串函數(shù)&amp; 描述
1 ||

將字符串連接在一起

2 SUBSTR

提取字符串的一部分(Teradata擴展)

3 SUBSTRING

提取字符串的一部分(ANSI標準)

4 INDEX

查找字符在字符串中的位置(Teradata擴展)

5 POSITION

定位字符在字符串中的位置(ANSI標準)

6 TRIM

修剪字符串中的空格

7 UPPER

將字符串轉換為大寫

8 LOWER

將字符串轉換為小寫

例子

下表列出了一些帶有結果的字符串函數(shù)。

字符串函數(shù)&amp; 描述... 結果
SELECT SUBSTRING(\'warehouse\'FROM 1 FOR 4) Ware
SELECT SUBSTR(\'warehouse\',1,4) Ware
SELECT\'data\'|| \'\'|| \'倉庫\' SELECT\'data\'|| \'\'|| \'倉庫\'...
SELECT UPPER(\'data\') DATA
SELECT LOWER(\'DATA\') Data

Teradata - 日期/時間函數(shù)

本章討論Teradata中可用的日期/時間功能。

例子...

日期使用以下公式在內(nèi)部存儲為整數(shù)。

((YEAR - 1900) * 10000) &plus; (MONTH * 100) &plus; DAY

您可以使用以下查詢來檢查日期的存儲方式。

SELECT CAST(CURRENT_DATE AS INTEGER);

由于日期存儲為整數(shù),您可以對它們執(zhí)行一些算術運算。 Teradata提供執(zhí)行這些操作的函數(shù)。

提取

EXTRACT函數(shù)從DATE值提取日,月和年的部分。 此功能還用于從TIME / TIMESTAMP值提取小時,分鐘和秒。

例子

以下示例顯示如何從日期和時間戳值提取年,月,日期,小時,分鐘和秒值。

SELECT EXTRACT(YEAR FROM CURRENT_DATE);  
EXTRACT(YEAR FROM Date) 
----------------------- 
        2016  
SELECT EXTRACT(MONTH FROM CURRENT_DATE);  
EXTRACT(MONTH FROM Date) 
------------------------ 
          1        
SELECT EXTRACT(DAY FROM CURRENT_DATE);  
EXTRACT(DAY FROM Date) 
------------------------ 
          1    
       
SELECT EXTRACT(HOUR FROM CURRENT_TIMESTAMP);  
EXTRACT(HOUR FROM Current TimeStamp(6)) 
--------------------------------------- 
                 4      
SELECT EXTRACT(MINUTE FROM CURRENT_TIMESTAMP);  
EXTRACT(MINUTE FROM Current TimeStamp(6)) 
----------------------------------------- 
                 54  
SELECT EXTRACT(SECOND FROM CURRENT_TIMESTAMP);  
EXTRACT(SECOND FROM Current TimeStamp(6)) 
----------------------------------------- 
              27.140000

提取...

Teradata提供INTERVAL函數(shù)以對DATE和TIME值執(zhí)行算術運算。 有兩種類型的INTERVAL函數(shù)。

年 - 月間隔

  • YEAR
  • YEAR TO MONTH
  • MONTH

日間隔

  • DAY
  • DAY TO HOUR
  • DAY TO MINUTE
  • DAY TO SECOND
  • HOUR
  • HOUR TO MINUTE
  • HOUR TO SECOND
  • MINUTE
  • MINUTE TO SECOND
  • SECOND

例子

以下示例將3年添加到當前日期。

SELECT CURRENT_DATE, CURRENT_DATE &plus; INTERVAL '03' YEAR; 
  Date    (Date&plus; 3) 
--------  --------- 
16/01/01   19/01/01

以下示例將3年和01個月添加到當前日期。

SELECT CURRENT_DATE, CURRENT_DATE &plus; INTERVAL '03-01' YEAR TO MONTH; 
 Date     (Date&plus; 3-01) 
--------  ------------ 
16/01/01    19/02/01

以下示例將01天,05小時和10分鐘添加到當前時間戳。

SELECT CURRENT_TIMESTAMP,CURRENT_TIMESTAMP &plus; INTERVAL '01 05:10' DAY TO MINUTE; 
     Current TimeStamp(6)         (Current TimeStamp(6)&plus; 1 05:10) 
--------------------------------  -------------------------------- 
2016-01-01 04:57:26.360000&plus;00:00  2016-01-02 10:07:26.360000&plus;00:00

Teradata - 內(nèi)置函數(shù)

Teradata提供了內(nèi)置函數(shù),這些函數(shù)是SQL的擴展。 以下是常見的內(nèi)置函數(shù)。

功能 結果
SELECT DATE; 日期
--------
16/01/01
SELECT CURRENT_DATE; 日期
--------
16/01/01
選擇時間; Time
--------
04:50:29
SELECT CURRENT_TIME; 時間
--------
04:50:29
SELECT CURRENT_TIMESTAMP; 當前時間戳(6)
--------------------------------
2016-01-01 04:
51:06.990000&amp; plus; 00:00
當前時間戳(6)
--------------------------------
2016-01-01 04:
51:06.990000&amp; plus; 00:00...
Database
------------------------------
TDUSER

Teradata - 聚合函數(shù)

Teradata支持公共聚合函數(shù)。 它們可以與SELECT語句一起使用。

  • COUNT - 計算行數(shù)

  • SUM - 累計指定列的值

  • MAX - 返回指定列的較大值

  • MIN - 返回所指定列的最小值

  • AVG - 返回指定列的平均值

例子

考慮下面的薪資表。

員工不 扣除 NetPay
101 40,000 4,000 36,000
104 75,000 5,000 70,000
102 80,000 6,000 74,000
105 70,000 4,000 66,000
103 90,000 7,000 83,000

計數(shù)

以下示例計算Salary表中的記錄數(shù)。

SELECT count(*) from Salary;  

  Count(*) 
----------- 
    5 

MAX

以下示例返回最大員工凈工資值。

SELECT max(NetPay) from Salary;   
   Maximum(NetPay) 
--------------------- 
       83000 

MAX...

以下示例從薪金表中返回最低雇員凈薪值。

SELECT min(NetPay) from Salary;   

   Minimum(NetPay) 
--------------------- 
        36000

AVG

以下示例返回表中的員工凈薪值的平均值。

SELECT avg(NetPay) from Salary; 
  
   Average(NetPay) 
--------------------- 
       65800 

以下示例計算員工薪金表中所有記錄的凈工資總和。

SELECT sum(NetPay) from Salary;
  
   Sum(NetPay) 
----------------- 
     329000

Teradata - CASE和COALESCE

本章介紹Teradata的CASE和COALESCE函數(shù)。

CASE表達式

CASE表達式根據(jù)條件或WHEN子句計算每一行,并返回第一個匹配的結果。 如果沒有匹配,則返回ELSE部分的結果。

句法

以下是CASE表達式的語法。

CASE <expression> 
WHEN <expression> THEN result-1 
WHEN <expression> THEN result-2 

ELSE  
   Result-n 
END

例子

考慮以下Employee表。

員工不 名字 JoinedDate 部門 生日
101 Mike James 3/27/2005 1 1/5/1980
102 Robert Williams 4/25/2007 2 3/5/1983
103 Peter Paul 3/21/2007 2 4/1/1983
104 Alex Stuart 2/1/2008 2 11/6/1984
105 Robert James 1/4/2008 3 12/1/1984

以下示例計算DepartmentNo列,如果部門號為1,則返回值1; 如果部門號碼為3,則返回2; 否則返回值作為無效部門。

SELECT 
   EmployeeNo, 
CASE DepartmentNo 
   WHEN 1 THEN 'Admin' 
   WHEN 2 THEN 'IT' 
ELSE 'Invalid Dept'
   END AS Department 
FROM Employee; 

當執(zhí)行上述查詢時,它將產(chǎn)生以下輸出。

*** Query completed. 5 rows found. 2 columns returned. 
*** Total elapsed time was 1 second. 
 EmployeeNo    Department 
-----------   ------------ 
   101         Admin 
   104         IT 
   102         IT 
   105         Invalid Dept 
   103         IT

上述CASE表達式也可以以下面的形式寫出,這將產(chǎn)生與上面相同的結果。

SELECT 
   EmployeeNo, 
CASE  
   WHEN DepartmentNo = 1 THEN 'Admin' 
   WHEN  DepartmentNo = 2 THEN 'IT' 
ELSE 'Invalid Dept' 
   END AS Department  
FROM Employee;

合并

COALESCE是返回表達式的第一個非空值的語句。 如果表達式的所有參數(shù)計算結果為NULL,則返回NULL。 以下是語法。

例子

COALESCE(expression 1, expression 2, ....) 

例子

SELECT 
   EmployeeNo, 
   COALESCE(dept_no, 'Department not found') 
FROM  
   employee;

NULLIF

如果參數(shù)相等,NULLIF語句返回NULL。

例子

以下是NULLIF語句的語法。

NULLIF(expression 1, expression 2) 

例子

如果Department等于3,下面的示例返回NULL。否則,它返回Department No值。

SELECT 
   EmployeeNo,  
   NULLIF(DepartmentNo,3) AS department 
FROM Employee;

上述查詢返回以下記錄。 你可以看到員工105有部門號。 作為NULL。

*** Query completed. 5 rows found. 2 columns returned. 
*** Total elapsed time was 1 second. 
 EmployeeNo      department 
-----------  ------------------ 
    101              1 
    104              2 
    102              2 
    105              ? 
    103              2

Teradata - 主索引

主索引用于指定數(shù)據(jù)駐留在Teradata中的位置。 它用于指定哪個AMP獲取數(shù)據(jù)行。 Teradata中的每個表都需要定義主索引。 如果未定義主索引,Teradata會自動分配主索引。 主索引提供了訪問數(shù)據(jù)的最快方式。 主要最多可以有64列。

在創(chuàng)建表時定義主索引。 有兩種類型的主索引。

  • Unique Primary Index(UPI)
  • Non Unique Primary Index(NUPI)

NULLIF...

如果表被定義為具有UPI,則被認為是UPI的列不應該具有任何重復值。 如果插入任何重復值,它們將被拒絕。

創(chuàng)建唯一主索引

以下示例使用列EmployeeNo作為唯一主索引創(chuàng)建了“薪金”表。

CREATE SET TABLE Salary ( 
   EmployeeNo INTEGER, 
   Gross INTEGER,  
   Deduction INTEGER, 
   NetPay INTEGER 
) 
UNIQUE PRIMARY INDEX(EmployeeNo);

非唯一主索引(NUPI)

如果表被定義為具有NUPI,則被視為UPI的列可以接受重復值。

創(chuàng)建非唯一主索引

以下示例創(chuàng)建了將EmployeeNo列作為非唯一主索引的員工帳戶表。 EmployeeNo被定義為非唯一主索引,因為員工在表中可以有多個帳戶; 一個用于薪金帳戶,另一個用于報銷帳戶。

CREATE SET TABLE Employee _Accounts ( 
   EmployeeNo INTEGER, 
   employee_bank_account_type BYTEINT. 
   employee_bank_account_number INTEGER, 
   employee_bank_name VARCHAR(30), 
   employee_bank_city VARCHAR(30) 
) 
PRIMARY INDEX(EmployeeNo);

Teradata - 加入

聯(lián)接用于組合來自多個表的記錄。 基于來自這些表的公共列/值來連接表。

有不同類型的聯(lián)接可用。

  • Inner Join
  • Left Outer Join
  • Right Outer Join
  • Full Outer Join
  • Self Join
  • Cross Join
  • Cartesian Production Join

非唯一主索引(NUPI)...

內(nèi)連接組合來自多個表的記錄,并返回兩個表中存在的值。

句法

以下是INNER JOIN語句的語法。

SELECT col1, col2, col3…. 
FROM  
Table-1 
INNER JOIN 
Table-2 
ON (col1 = col2) 
<WHERE condition>;

例子

考慮下面的員工表和工資表。

員工不 名字 JoinedDate 部門 生日
101 Mike James 3/27/2005 1 1/5/1980
102 Robert Williams 4/25/2007 2 3/5/1983
103 Peter Paul 3/21/2007 2 4/1/1983
104 Alex Stuart 2/1/2008 2 11/6/1984
105 Robert James 1/4/2008 3 12/1/1984
員工不 ... NetPay
101 40,000 4,000 36,000
102 80,000 6,000 74,000
103 90,000 7,000 83,000
104 75,000 5,000 70,000

以下查詢連接公用列EmployeeS上的Employee表和Salary表。 每個表被分配一個別名A&amp; B和列使用正確的別名引用。

SELECT A.EmployeeNo, A.DepartmentNo, B.NetPay 
FROM  
Employee A 
INNER JOIN 
Salary B 
ON (A.EmployeeNo = B. EmployeeNo);

當執(zhí)行上述查詢時,它返回以下記錄。 員工105不包括在結果中,因為它在薪金表中沒有匹配的記錄。

*** Query completed. 4 rows found. 3 columns returned. 
*** Total elapsed time was 1 second. 
 EmployeeNo   DepartmentNo     NetPay 
-----------  ------------   ----------- 
    101           1            36000 
    102           2            74000 
    103           2            83000 
    104           2            70000

外部加入

LEFT OUTER JOIN和RIGHT OUTER JOIN也合并了多個表的結果。

  • LEFT OUTER JOIN和RIGHT OUTER JOIN也合并了多個表的結果。...

  • RIGHT OUTER JOIN 返回右表中的所有記錄,并僅返回左表中匹配的行。

  • FULL OUTER JOIN 結合了LEFT OUTER和RIGHT OUTER JOINS的結果。 它從連接的表返回匹配和不匹配的行。

例子

以下是OUTER JOIN語句的語法。 您需要使用LEFT OUTER JOIN,RIGHT OUTER JOIN或FULL OUTER JOIN中的一個選項。

SELECT col1, col2, col3…. 
FROM  
Table-1 
LEFT OUTER JOIN/RIGHT OUTER JOIN/FULL OUTER JOIN 
Table-2 
ON (col1 = col2) 
<WHERE condition>;

例子

以下是OUTER JOIN語句的語法。 您需要使用LEFT OUTER JOIN,RIGHT OUTER JOIN或FULL OUTER JOIN中的一個選項。...

SELECT A.EmployeeNo, A.DepartmentNo, B.NetPay 
FROM  
Employee A 
LEFT OUTER JOIN 
Salary B 
ON (A.EmployeeNo = B. EmployeeNo) 
ORDER BY A.EmployeeNo; 

當執(zhí)行上述查詢時,它將產(chǎn)生以下輸出。 對于員工105,NetPay值為NULL,因為它在薪金表中沒有匹配的記錄。

*** Query completed. 5 rows found. 3 columns returned. 
*** Total elapsed time was 1 second. 
 EmployeeNo  DepartmentNo     NetPay 
-----------  ------------   ----------- 
    101           1           36000 
    102           2           74000 
    103           2           83000 
    104           2           70000 
    105           3             ?

CROSS JOIN

交叉連接將左表中的每一行連接到右表中的每一行。

例子

以下是CROSS JOIN語句的語法。

SELECT A.EmployeeNo, A.DepartmentNo, B.EmployeeNo,B.NetPay 
FROM  
Employee A 
CROSS JOIN 
Salary B 
WHERE A.EmployeeNo = 101 
ORDER BY B.EmployeeNo;

以下是CROSS JOIN語句的語法。...

*** Query completed. 4 rows found. 4 columns returned. 
*** Total elapsed time was 1 second. 
 EmployeeNo  DepartmentNo   EmployeeNo    NetPay 
-----------  ------------  -----------  ----------- 
    101           1            101         36000 
    101           1            104         70000 
    101           1            102         74000 
    101           1            103         83000

Teradata - 子查詢

子查詢基于另一個表中的值從一個表返回記錄。 它是另一個查詢中的SELECT查詢。 作為內(nèi)部查詢調(diào)用的SELECT查詢將首先執(zhí)行,結果將由外部查詢使用。 它的一些突出特點是 -

  • 子查詢基于另一個表中的值從一個表返回記錄。 它是另一個查詢中的SELECT查詢。 作為內(nèi)部查詢調(diào)用的SELECT查詢將首先執(zhí)行,結果將由外部查詢使用。 它的一些突出特點是 - ...

  • 子查詢不返回重復記錄。

  • 子查詢不返回重復記錄。...

句法

以下是子查詢的通用語法。

SELECT col1, col2, col3,… 
FROM  
Outer Table 
WHERE col1 OPERATOR ( Inner SELECT Query);

例子

考慮以下薪資表。

員工不 扣除 NetPay
101 40,000 4,000 36,000
102 80,000 6,000 74,000
103 90,000 7,000 83,000
104 75,000 5,000 70,000

以下查詢標識最高薪水的員工編號。 內(nèi)部SELECT執(zhí)行聚合函數(shù)以返回最大NetPay值,外部SELECT查詢使用此值返回具有此值的雇員記錄。

SELECT EmployeeNo, NetPay 
FROM Salary 
WHERE NetPay =  
(SELECT MAX(NetPay)  
FROM Salary);

執(zhí)行此查詢時,將生成以下輸出。

*** Query completed. One row found. 2 columns returned. 
*** Total elapsed time was 1 second.  
 EmployeeNo     NetPay 
-----------  ----------- 
    103         83000 

Teradata - 表類型

Teradata支持以下表類型來保存臨時數(shù)據(jù)。

  • Derived Table
  • Volatile Table
  • Global Temporary Table

派生表

Teradata支持以下表類型來保存臨時數(shù)據(jù)。...

例子

以下示例構建具有薪金大于75000的員工的記錄的派生表EmpSal。

SELECT 
Emp.EmployeeNo, 
Emp.FirstName, 
Empsal.NetPay 
FROM 
Employee Emp, 
(select EmployeeNo , NetPay 
from Salary
where NetPay >= 75000) Empsal 
where Emp.EmployeeNo = Empsal.EmployeeNo;

以下示例構建具有薪金大于75000的員工的記錄的派生表EmpSal。...

*** Query completed. One row found. 3 columns returned. 
*** Total elapsed time was 1 second. 
 EmployeeNo            FirstName               NetPay 
-----------  ------------------------------  ----------- 
    103                  Peter                 83000 

揮發(fā)性表

在用戶會話中創(chuàng)建,使用和刪除易失性表。 它們的定義不存儲在數(shù)據(jù)字典中。 它們保存經(jīng)常使用的查詢的中間數(shù)據(jù)。 以下是語法。

例子

CREATE [SET|MULTISET] VOALTILE TABLE tablename 
<table definitions> 
<column definitions> 
<index definitions> 
ON COMMIT [DELETE|PRESERVE] ROWS

例子

CREATE VOLATILE TABLE dept_stat ( 
   dept_no INTEGER, 
   avg_salary INTEGER, 
   max_salary INTEGER, 
   min_salary INTEGER 
) 
PRIMARY INDEX(dept_no) 
ON COMMIT PRESERVE ROWS;

在用戶會話中創(chuàng)建,使用和刪除易失性表。 它們的定義不存儲在數(shù)據(jù)字典中。 它們保存經(jīng)常使用的查詢的中間數(shù)據(jù)。 以下是語法。...

*** Table has been created. 
*** Total elapsed time was 1 second.

全球臨時表

全局臨時表的定義存儲在數(shù)據(jù)字典中,并且它們可以被許多用戶/會話使用。 但是加載到全局臨時表中的數(shù)據(jù)僅在會話期間保留。 每個會話最多可以實現(xiàn)2000個全局臨時表。 以下是語法。

例子

CREATE [SET|MULTISET] GLOBAL TEMPORARY TABLE tablename 
<table definitions> 
<column definitions> 
<index definitions> 

例子

CREATE SET GLOBAL TEMPORARY TABLE dept_stat ( 
   dept_no INTEGER, 
   avg_salary INTEGER, 
   max_salary INTEGER, 
   min_salary INTEGER 
) 
PRIMARY INDEX(dept_no);

全局臨時表的定義存儲在數(shù)據(jù)字典中,并且它們可以被許多用戶/會話使用。 但是加載到全局臨時表中的數(shù)據(jù)僅在會話期間保留。 每個會話最多可以實現(xiàn)2000個全局臨時表。 以下是語法。...

*** Table has been created. 
*** Total elapsed time was 1 second.

Teradata - 空間概念

Teradata中有三種類型的空格可用。

永久空間

Teradata中有三種類型的空格可用。...

不為數(shù)據(jù)庫/用戶預分配永久空間。 它們只是定義為數(shù)據(jù)庫/用戶可以使用的最大空間量。 永久空間的量除以AMP的數(shù)量。 每當每個AMP限制超過,將生成一條錯誤消息。

卷軸空間

假脫機空間是未使用的永久空間,由系統(tǒng)用于保留SQL查詢的中間結果。 沒有假脫機空間的用戶無法執(zhí)行任何查詢。

與永久空間類似,假脫機空間定義了用戶可以使用的最大空間量。 線圈空間除以AMP的數(shù)量。 每當每個AMP限制超過,用戶將得到假脫機空間錯誤。

溫度空間

臨時空間是未使用的永久空間,由全局臨時表使用。 溫度空間也除以AMP的數(shù)量。

Teradata - 空間概念...

表只能包含一個主索引。 更多情況下,您會遇到表包含其他列的情況,使用這些列來頻繁訪問數(shù)據(jù)。 Teradata將對這些查詢執(zhí)行全表掃描。 輔助索引解決此問題。

輔助索引是訪問數(shù)據(jù)的備用路徑。 主索引和輔助索引之間存在一些差異。

  • 次級索引不涉及數(shù)據(jù)分發(fā)。

  • 輔助索引值存儲在子表中。 這些表是在所有AMP中內(nèi)置的。

  • 輔助索引是可選的。

  • 它們可以在創(chuàng)建表期間或在創(chuàng)建表之后創(chuàng)建。

  • 它們占用額外的空間,因為它們構建子表,并且它們還需要維護,因為需要為每個新行更新子表。

有兩種類型的輔助索引 -

  • Unique Secondary Index (USI)
  • Non-Unique Secondary Index (NUSI)

唯一二級指數(shù)(USI)

唯一輔助索引只允許定義為USI的列的唯一值。 通過USI訪問該行是一個雙放大操作。

創(chuàng)建唯一二級索引

以下示例在Employee表的EmployeeNo列上創(chuàng)建USI。

CREATE UNIQUE INDEX(EmployeeNo) on employee;

非唯一二級指數(shù)(NUSI)

非唯一二級索引允許定義為NUSI的列的重復值。 通過NUSI訪問該行是全放大器操作。

創(chuàng)建非唯一二級索引

以下示例在employee表的FirstName列上創(chuàng)建NUSI。

CREATE INDEX(FirstName) on Employee;

Teradata - 統(tǒng)計

Teradata優(yōu)化器提出了每個SQL查詢的執(zhí)行策略。 此執(zhí)行策略基于在SQL查詢中使用的表收集的統(tǒng)計信息。 使用COLLECT STATISTICS命令收集表上的統(tǒng)計信息。 優(yōu)化器需要環(huán)境信息和數(shù)據(jù)人口統(tǒng)計數(shù)據(jù)來制定最佳執(zhí)行策略。

環(huán)境信息

  • Number of Nodes, AMPs and CPUs
  • Amount of memory

數(shù)據(jù)人口統(tǒng)計

  • Number of rows
  • Row size
  • Range of values in the table
  • Number of rows per value
  • Number of Nulls

有三種方法來收集表上的統(tǒng)計信息。

  • Random AMP Sampling
  • Full statistics collection
  • Using SAMPLE option

收集統(tǒng)計

COLLECT STATISTICS命令用于收集表上的統(tǒng)計信息。

句法

以下是收集表上的統(tǒng)計信息的基本語法。

COLLECT [SUMMARY] STATISTICS   
INDEX (indexname) COLUMN (columnname) 
ON <tablename>;

例子

以下示例收集Employee表的EmployeeNo列的統(tǒng)計信息。

COLLECT STATISTICS COLUMN(EmployeeNo) ON Employee;

當執(zhí)行上述查詢時,它將產(chǎn)生以下輸出。

*** Update completed. 2 rows changed. 
*** Total elapsed time was 1 second.

查看統(tǒng)計信息

您可以使用HELP STATISTICS命令查看收集的統(tǒng)計信息。

例子

以下是查看收集的統(tǒng)計信息的語法。

HELP STATISTICS <tablename>; 

例子

以下是查看在Employee表上收集的統(tǒng)計信息的示例。

HELP STATISTICS employee;

當執(zhí)行上述查詢時,它產(chǎn)生以下結果。

  Date       Time      Unique Values           Column Names 
--------   -------- -------------------- ----------------------- 
16/01/01   08:07:04         5                       * 
16/01/01   07:24:16         3                   DepartmentNo 
16/01/01   08:07:04         5                   EmployeeNo

Teradata - 統(tǒng)計...

壓縮用于減少表所使用的存儲。 在Teradata中,壓縮最多可以壓縮255個不同的值,包括NULL。 由于存儲已減少,Teradata可以在塊中存儲更多記錄。 這導致改進的查詢響應時間,因為任何I / O操作可以每塊處理更多行。 可以在使用CREATE TABLE創(chuàng)建表或使用ALTER TABLE命令創(chuàng)建表之后添加壓縮。

限制

  • Only 255 values can be compressed per column.
  • Primary Index column cannot be compressed.
  • Volatile tables cannot be compressed.

多值壓縮(MVC)

下表壓縮值為1,2和3的字段DepatmentNo。對列應用壓縮時,此列的值不與該行一起存儲。 相反,值存儲在每個AMP中的表頭中,只有存在位被添加到該行以指示該值。

CREATE SET TABLE employee ( 
   EmployeeNo integer, 
   FirstName CHAR(30), 
   LastName CHAR(30), 
   BirthDate DATE FORMAT 'YYYY-MM-DD-', 
   JoinedDate DATE FORMAT 'YYYY-MM-DD-', 
   employee_gender CHAR(1), 
   DepartmentNo CHAR(02) COMPRESS(1,2,3) 
) 
UNIQUE PRIMARY INDEX(EmployeeNo);

當在具有有限值的大表中具有列時,可以使用多值壓縮。

Teradata - 解釋

EXPLAIN命令以英語返回解析引擎的執(zhí)行計劃。 它可以與除另一個EXPLAIN命令之外的任何SQL語句一起使用。 當查詢前面有EXPLAIN命令時,解析引擎的執(zhí)行計劃將返回給用戶,而不是AMP。

EXPLAIN的示例

考慮具有以下定義的表Employee。

CREATE SET TABLE EMPLOYEE,FALLBACK ( 
   EmployeeNo INTEGER, 
   FirstName VARCHAR(30), 
   LastName VARCHAR(30),
   DOB DATE FORMAT 'YYYY-MM-DD', 
   JoinedDate DATE FORMAT 'YYYY-MM-DD', 
   DepartmentNo BYTEINT 
) 
UNIQUE PRIMARY INDEX ( EmployeeNo );

下面給出了EXPLAIN計劃的一些示例。

全表掃描(FTS)

當在SELECT語句中沒有指定條件時,優(yōu)化器可以選擇在訪問表的每一行時使用全表掃描。

例子

以下是一個示例查詢,其中優(yōu)化程序可以選擇FTS。

EXPLAIN SELECT * FROM employee;

當執(zhí)行上述查詢時,它將產(chǎn)生以下輸出。 可以看出,優(yōu)化器選擇訪問AMP中的所有AMP和所有行。

1) First, we lock a distinct TDUSER."pseudo table" for read on a 
   RowHash to prevent global deadlock for TDUSER.employee.  
2) Next, we lock TDUSER.employee for read.  
3) We do an all-AMPs RETRIEVE step from TDUSER.employee by way of an
   all-rows scan with no residual conditions into Spool 1 
   (group_amps), which is built locally on the AMPs.  The size of 
   Spool 1 is estimated with low confidence to be 2 rows (116 bytes).  
   The estimated time for this step is 0.03 seconds.  
4) Finally, we send out an END TRANSACTION step to all AMPs involved 
   in processing the request. 
→ The contents of Spool 1 are sent back to the user as the result of 
   statement 1.  The total estimated time is 0.03 seconds.

唯一主索引

當使用唯一主索引訪問行時,則它是一個AMP操作。

EXPLAIN SELECT * FROM employee WHERE EmployeeNo = 101;

當執(zhí)行上述查詢時,它將產(chǎn)生以下輸出。 可以看出,它是單AMP檢索,優(yōu)化器使用唯一的主索引訪問該行。

1) First, we do a single-AMP RETRIEVE step from TDUSER.employee by 
   way of the unique primary index "TDUSER.employee.EmployeeNo = 101" 
   with no residual conditions. The estimated time for this step is 
   0.01 seconds.  
→ The row is sent directly back to the user as the result of 
   statement 1.  The total estimated time is 0.01 seconds.

唯一二級索引

當使用唯一二級索引訪問行時,它是一個雙放大操作。

例子

考慮具有以下定義的表薪水。

CREATE SET TABLE SALARY,FALLBACK ( 
   EmployeeNo INTEGER, 
   Gross INTEGER, 
   Deduction INTEGER, 
   NetPay INTEGER 
)
PRIMARY INDEX ( EmployeeNo ) 
UNIQUE INDEX (EmployeeNo);

請考慮以下SELECT語句。

EXPLAIN SELECT * FROM Salary WHERE EmployeeNo = 101;

當執(zhí)行上述查詢時,它將產(chǎn)生以下輸出。 可以看出,優(yōu)化器在使用唯一二級索引的兩個amp操作中檢索該行。

1) First, we do a two-AMP RETRIEVE step from TDUSER.Salary 
   by way of unique index # 4 "TDUSER.Salary.EmployeeNo = 
   101" with no residual conditions.  The estimated time for this 
   step is 0.01 seconds.  
→ The row is sent directly back to the user as the result of 
   statement 1.  The total estimated time is 0.01 seconds.

附加條款

以下是EXPLAIN計劃中常見的術語列表。

...(最后使用)...

不再需要假脫機文件,并且將在此步驟完成后釋放。

...沒有殘余條件...

所有適用的條件已應用于行。

... END TRANSACTION ...

... END TRANSACTION ... ...

...消除重復行...

...消除重復行... ...

...通過遍歷索引#n僅提取行id ... ...

...通過遍歷索引#n僅提取行id ... ... ...

構建了一個假脫機文件,其中包含在輔助索引(索引#n)中找到的行標識...

...我們做一個短信(設置操作步驟)... ...

...由散列碼重新分配給所有AMP。

...由散列碼重新分配給所有AMP。...

...在所有AMP上重復。

在準備加入時,從較小的表(根據(jù)SPOOL)復制數(shù)據(jù)。

...(one_AMP)或(group_AMPs)

...(one_AMP)或(group_AMPs)...

Teradata - 解釋...

基于主索引值將行分配給特定的AMP。 Teradata使用散列算法來確定哪個AMP獲取行。

基于主索引值將行分配給特定的AMP。 Teradata使用散列算法來確定哪個AMP獲取行。...

Hashing Algorithm

以下是插入數(shù)據(jù)的步驟。

  • 以下是插入數(shù)據(jù)的步驟。...

  • 解析器接收查詢并將記錄的PI值傳遞給散列算法。

  • 解析器接收查詢并將記錄的PI值傳遞給散列算法。...

  • 行散列(前16位)的高階位用于標識散列映射條目。 哈希映射包含一個AMP#。 哈希映射是包含特定AMP#的桶的數(shù)組。

  • BYNET將數(shù)據(jù)發(fā)送到標識的AMP。

  • AMP使用32位行散列來定位其磁盤中的行。

  • AMP使用32位行散列來定位其磁盤中的行。...

  • 行散列和唯一性ID的組合稱為行ID。

  • 行散列和唯一性ID的組合稱為行ID。...

  • AMP中的每個表行都按其行ID進行邏輯排序。

如何存儲表

AMP中的每個表行都按其行ID進行邏輯排序。...

行哈希 唯一性ID 員工不 名字 名字...
2A01 2611 0000 0001 101 Mike James
2A01 2612 0000 0001 104 Alex Stuart
2A01 2613 0000 0001 102 Robert Williams
2A01 2614 0000 0001 105 Robert James
2A01 2615 0000 0001 103 Peter Paul

Teradata - JOIN索引

JOIN INDEX是一個物化視圖。 其定義是永久存儲的,并且只要更新連接索引中引用的基表,就會更新數(shù)據(jù)。 JOIN INDEX可以包含一個或多個表,并且還包含預聚合數(shù)據(jù)。 連接索引主要用于提高性能。

JOIN INDEX是一個物化視圖。 其定義是永久存儲的,并且只要更新連接索引中引用的基表,就會更新數(shù)據(jù)。 JOIN INDEX可以包含一個或多個表,并且還包含預聚合數(shù)據(jù)。 連接索引主要用于提高性能。...

  • Single Table Join Index (STJI)
  • Multi Table Join Index (MTJI)
  • Aggregated Join Index (AJI)

單表連接索引

單表聯(lián)接索引允許基于不同于基表中的主索引列的主索引列來分區(qū)大表。

例子

單表聯(lián)接索引允許基于不同于基表中的主索引列的主索引列來分區(qū)大表。...

CREATE JOIN INDEX <index name> 
AS 
<SELECT Query> 
<Index Definition>;

例子

考慮以下員工和薪資表。

CREATE SET TABLE EMPLOYEE,FALLBACK ( 
   EmployeeNo INTEGER, 
   FirstName VARCHAR(30) , 
   LastName VARCHAR(30) , 
   DOB DATE FORMAT 'YYYY-MM-DD', 
   JoinedDate DATE FORMAT 'YYYY-MM-DD', 
   DepartmentNo BYTEINT 
) 
UNIQUE PRIMARY INDEX ( EmployeeNo );

CREATE SET TABLE SALARY,FALLBACK ( 
   EmployeeNo INTEGER, 
   Gross INTEGER, 
   Deduction INTEGER, 
   NetPay INTEGER 
) 
PRIMARY INDEX ( EmployeeNo ) 
UNIQUE INDEX (EmployeeNo);

考慮以下員工和薪資表。...

CREATE JOIN INDEX Employee_JI 
AS 
SELECT EmployeeNo,FirstName,LastName, 
BirthDate,JoinedDate,DepartmentNo 
FROM Employee 
PRIMARY INDEX(FirstName);

如果用戶在EmployeeNo上提交帶有WHERE子句的查詢,那么系統(tǒng)將使用唯一的主索引查詢Employee表。 如果用戶使用employee_name查詢employee表,則系統(tǒng)可以使用employee_name訪問連接索引Employee_JI。 連接索引的行在employee_name列上進行散列。 如果未定義連接索引且employee_name未定義為輔助索引,則系統(tǒng)將執(zhí)行全表掃描以訪問耗時的行。

您可以運行以下EXPLAIN計劃并驗證優(yōu)化程序計劃。 在以下示例中,您可以看到,當表使用Employee_Name列查詢時,優(yōu)化程序正在使用Join Index而不是base Employee表。

EXPLAIN SELECT * FROM EMPLOYEE WHERE FirstName='Mike'; 
*** Help information returned. 8 rows. 
*** Total elapsed time was 1 second. 
Explanation 
------------------------------------------------------------------------ 
   1) First, we do a single-AMP RETRIEVE step from EMPLOYEE_JI by 
      way of the primary index "EMPLOYEE_JI.FirstName = 'Mike'" 
      with no residual conditions into Spool 1 (one-amp), which is built 
      locally on that AMP.  The size of Spool 1 is estimated with low 
      confidence to be 2 rows (232 bytes).  The estimated time for this 
      step is 0.02 seconds.
   → The contents of Spool 1 are sent back to the user as the result of 
      statement 1.  The total estimated time is 0.02 seconds. 

多表連接索引

您可以運行以下EXPLAIN計劃并驗證優(yōu)化程序計劃。 在以下示例中,您可以看到,當表使用Employee_Name列查詢時,優(yōu)化程序正在使用Join Index而不是base Employee表。...

例子

以下示例通過連接Employee和Salary表來創(chuàng)建一個名為Employee_Salary_JI的JOIN INDEX。

CREATE JOIN INDEX Employee_Salary_JI 
AS 
SELECT a.EmployeeNo,a.FirstName,a.LastName, 
a.BirthDate,a.JoinedDate,a.DepartmentNo,b.Gross,b.Deduction,b.NetPay 
FROM Employee a 
INNER JOIN Salary b 
ON(a.EmployeeNo = b.EmployeeNo) 
PRIMARY INDEX(FirstName);

以下示例通過連接Employee和Salary表來創(chuàng)建一個名為Employee_Salary_JI的JOIN INDEX。...

聚合聯(lián)接索引

如果表在某些列上始終聚合,則可以在表上定義聚合連接索引以提高性能。 聚合連接索引的一個限制是它僅支持SUM和COUNT函數(shù)。

例子

在以下示例中,加入員工和工資以確定每個部門的總工資。

CREATE JOIN INDEX Employee_Salary_JI 
AS 
SELECT a.DepartmentNo,SUM(b.NetPay) AS TotalPay 
FROM Employee a 
INNER JOIN Salary b 
ON(a.EmployeeNo = b.EmployeeNo)
GROUP BY a.DepartmentNo 
Primary Index(DepartmentNo); 

Teradata - JOIN索引...

視圖是由查詢構建的數(shù)據(jù)庫對象。 可以使用單個表或通過連接的多個表來構建視圖。 它們的定義永久存儲在數(shù)據(jù)字典中,但它們不存儲數(shù)據(jù)的副本。 視圖的數(shù)據(jù)是動態(tài)構建的。

視圖可以包含表的行的子集或表的列的子集。

創(chuàng)建視圖

視圖是使用CREATE VIEW語句創(chuàng)建的。

例子

下面是創(chuàng)建視圖的語法。

CREATE/REPLACE VIEW <viewname> 
AS  
<select query>; 

例子

考慮以下Employee表。

員工不 名字 ...
101 Mike James 1/5/1980
104 Alex Stuart 11/6/1984
102 Robert Williams 3/5/1983
105 Robert James 12/1/1984
103 Peter Paul 4/1/1983

以下示例在Employee表上創(chuàng)建視圖。

CREATE VIEW Employee_View 
AS 
SELECT 
EmployeeNo, 
FirstName, 
LastName, 
FROM  
Employee;

使用視圖

以下示例在Employee表上創(chuàng)建視圖。...

例子

以下示例從Employee_View中檢索記錄;

SELECT EmployeeNo, FirstName, LastName FROM Employee_View;

當執(zhí)行上述查詢時,它將產(chǎn)生以下輸出。

*** Query completed. 5 rows found. 3 columns returned. 
*** Total elapsed time was 1 second.  
 EmployeeNo            FirstName                       LastName 
-----------  ------------------------------  --------------------------- 
    101                  Mike                           James 
    104                  Alex                           Stuart 
    102                  Robert                         Williams 
    105                  Robert                         James 
    103                  Peter                          Paul 

修改視圖

當執(zhí)行上述查詢時,它將產(chǎn)生以下輸出。...

以下是修改視圖的語法。

REPLACE VIEW <viewname> 
AS  
<select query>;

例子

以下是修改視圖的語法。...

REPLACE VIEW Employee_View 
AS 
SELECT 
EmployeeNo, 
FirstName, 
BirthDate,
JoinedDate 
DepartmentNo 
FROM  
Employee; 

下降視圖

可以使用DROP VIEW語句刪除現(xiàn)有視圖。

例子

可以使用DROP VIEW語句刪除現(xiàn)有視圖。...

DROP VIEW <viewname>; 

例子

下面是一個刪除視圖Employee_View的示例。

DROP VIEW Employee_View; 

視圖的優(yōu)點

  • 下面是一個刪除視圖Employee_View的示例。...

  • 用戶只能訪問視圖而不是基表。

  • 用戶只能訪問視圖而不是基表。...

Teradata - 宏

宏是一組SQL語句,通過調(diào)用宏名稱來存儲和執(zhí)行。 宏的定義存儲在數(shù)據(jù)字典中。 用戶只需要EXEC特權來執(zhí)行宏。 用戶不需要對宏中使用的數(shù)據(jù)庫對象具有單獨的特權。 宏語句作為單個事務執(zhí)行。 如果宏中的某個SQL語句失敗,則所有語句都將回滾。 宏可以接受參數(shù)。 宏可以包含DDL語句,但應該是宏中的最后一個語句。

創(chuàng)建宏

宏是一組SQL語句,通過調(diào)用宏名稱來存儲和執(zhí)行。 宏的定義存儲在數(shù)據(jù)字典中。 用戶只需要EXEC特權來執(zhí)行宏。 用戶不需要對宏中使用的數(shù)據(jù)庫對象具有單獨的特權。 宏語句作為單個事務執(zhí)行。 如果宏中的某個SQL語句失敗,則所有語句都將回滾。 宏可以接受參數(shù)。 宏可以包含DDL語句,但應該是宏中的最后一個語句。...

句法

以下是CREATE MACRO命令的通用語法。

CREATE MACRO <macroname> [(parameter1, parameter2,...)] ( 
   <sql statements> 
);

例子

以下是CREATE MACRO命令的通用語法。...

員工不 名字 生日
101 Mike James 1/5/1980
104 Alex Stuart 11/6/1984
102 Robert Williams 3/5/1983
105 Robert James 12/1/1984
103 Peter Paul 4/1/1983

下面的示例創(chuàng)建一個名為Get_Emp的宏。 它包含一個select語句來從employee表中檢索記錄。

CREATE MACRO Get_Emp AS ( 
   SELECT 
   EmployeeNo, 
   FirstName, 
   LastName 
   FROM  
   employee 
   ORDER BY EmployeeNo; 
);

執(zhí)行宏

下面的示例創(chuàng)建一個名為Get_Emp的宏。 它包含一個select語句來從employee表中檢索記錄。...

例子

以下是EXECUTE MACRO命令的語法。

EXEC <macroname>; 

例子

以下示例執(zhí)行宏名稱Get_Emp; 執(zhí)行以下命令時,它將從employee表中檢索所有記錄。

EXEC Get_Emp; 
*** Query completed. 5 rows found. 3 columns returned. 
*** Total elapsed time was 1 second.  
EmployeeNo             FirstName                      LastName 
-----------  ------------------------------  --------------------------- 
   101                  Mike                          James 
   102                  Robert                        Williams 
   103                  Peter                         Paul 
   104                  Alex                          Stuart 
   105                  Robert                        James 

參數(shù)化宏

Teradata宏可以接受參數(shù)。 在宏內(nèi),這些參數(shù)用引用; (分號)。

Teradata宏可以接受參數(shù)。 在宏內(nèi),這些參數(shù)用引用; (分號)。...

CREATE MACRO Get_Emp_Salary(EmployeeNo INTEGER) AS ( 
   SELECT 
   EmployeeNo, 
   NetPay 
   FROM  
   Salary 
   WHERE EmployeeNo = :EmployeeNo; 
);

執(zhí)行參數(shù)化宏

宏使用EXEC命令執(zhí)行。 您需要EXEC特權才能執(zhí)行宏。

例子

以下是EXECUTE MACRO語句的語法。

EXEC <macroname>(value);

例子

以下是EXECUTE MACRO語句的語法。...

EXEC Get_Emp_Salary(101); 
*** Query completed. One row found. 2 columns returned. 
*** Total elapsed time was 1 second.
 
EmployeeNo      NetPay 
-----------  ------------ 
   101           36000 

Teradata - 宏...

存儲過程包含一組SQL語句和過程語句。 它們可能只包含程序性聲明。 存儲過程的定義存儲在數(shù)據(jù)庫中,參數(shù)存儲在數(shù)據(jù)字典表中。

優(yōu)點

  • 存儲過程包含一組SQL語句和過程語句。 它們可能只包含程序性聲明。 存儲過程的定義存儲在數(shù)據(jù)庫中,參數(shù)存儲在數(shù)據(jù)字典表中。...

  • 提供更好的安全性,因為通過存儲過程訪問數(shù)據(jù),而不是直接訪問它們。

  • 提供更好的安全性,因為通過存儲過程訪問數(shù)據(jù),而不是直接訪問它們。...

執(zhí)行參數(shù)化宏...

存儲過程使用CREATE PROCEDURE語句創(chuàng)建。

句法

存儲過程使用CREATE PROCEDURE語句創(chuàng)建。...

CREATE PROCEDURE <procedurename> ( [parameter 1 data type, parameter 2 data type..] ) 
BEGIN 
   <SQL or SPL statements>; 
END;

例子

考慮下面的薪資表。

員工不 扣除 NetPay
101 40,000 4,000 36,000
102 80,000 6,000 74,000
103 90,000 7,000 83,000
104 75,000 5,000 70,000

考慮下面的薪資表。...

CREATE PROCEDURE InsertSalary ( 
   IN in_EmployeeNo INTEGER, IN in_Gross INTEGER, 
   IN in_Deduction INTEGER, IN in_NetPay INTEGER 
) 
BEGIN 
   INSERT INTO Salary ( 
      EmployeeNo, 
      Gross, 
      Deduction, 
      NetPay 
   ) 
   VALUES ( 
      :in_EmployeeNo, 
      :in_Gross, 
      :in_Deduction, 
      :in_NetPay 
   ); 
END;

執(zhí)行程序

存儲過程使用CALL語句執(zhí)行。

例子

以下是CALL語句的通用語法。

CALL <procedure name> [(parameter values)];

例子

以下示例調(diào)用存儲過程InsertSalary,并將記錄插入到“薪金表”中。

CALL InsertSalary(105,20000,2000,18000);

執(zhí)行上述查詢后,它將生成以下輸出,您可以在Salary表中看到插入的行。

員工不 扣除 NetPay
101 40,000 4,000 36,000
102 80,000 6,000 74,000
103 90,000 7,000 83,000
104 75,000 5,000 70,000
105 20,000 2,000 18,000

Teradata - JOIN策略

執(zhí)行上述查詢后,它將生成以下輸出,您可以在Salary表中看到插入的行。...

執(zhí)行程序...

Teradata使用不同的連接方法來執(zhí)行連接操作。 一些常用的Join方法是 -

  • Merge Join
  • Nested Join
  • Product Join

合并加入

Teradata使用不同的連接方法來執(zhí)行連接操作。 一些常用的Join方法是 - ...

例子...

如果連接列是相應表的主索引,則連接行已在同一AMP上。 在這種情況下,不需要分配。

如果連接列是相應表的主索引,則連接行已在同一AMP上。 在這種情況下,不需要分配。...

CREATE SET TABLE EMPLOYEE,FALLBACK ( 
   EmployeeNo INTEGER, 
   FirstName VARCHAR(30) , 
   LastName VARCHAR(30) , 
   DOB DATE FORMAT 'YYYY-MM-DD', 
   JoinedDate DATE FORMAT 'YYYY-MM-DD', 
   DepartmentNo BYTEINT 
) 
UNIQUE PRIMARY INDEX ( EmployeeNo );
CREATE SET TABLE Salary ( 
   EmployeeNo INTEGER, 
   Gross INTEGER,  
   Deduction INTEGER, 
   NetPay INTEGER 
) 
UNIQUE PRIMARY INDEX(EmployeeNo); 

當這兩個表在EmployeeNo列上連接時,不會發(fā)生重新分配,因為EmployeeNo是正在連接的兩個表的主索引。

策略#2

當這兩個表在EmployeeNo列上連接時,不會發(fā)生重新分配,因為EmployeeNo是正在連接的兩個表的主索引。...

CREATE SET TABLE EMPLOYEE,FALLBACK (
   EmployeeNo INTEGER, 
   FirstName VARCHAR(30) , 
   LastName VARCHAR(30) , 
   DOB DATE FORMAT 'YYYY-MM-DD', 
   JoinedDate DATE FORMAT 'YYYY-MM-DD', 
   DepartmentNo BYTEINT 
) 
UNIQUE PRIMARY INDEX ( EmployeeNo );
CREATE SET TABLE DEPARTMENT,FALLBACK ( 
   DepartmentNo BYTEINT, 
   DepartmentName CHAR(15) 
) 
UNIQUE PRIMARY INDEX ( DepartmentNo );

如果這兩個表在DeparmentNo列上連接,那么這些行需要重新分布,因為DepartmentNo是一個表中的主索引和另一個表中的非主索引。 在這種情況下,加入行可能不在同一個AMP上。 在這種情況下,Teradata可能會在DepartmentNo列重新分發(fā)employee表。

策略#3

如果這兩個表在DeparmentNo列上連接,那么這些行需要重新分布,因為DepartmentNo是一個表中的主索引和另一個表中的非主索引。 在這種情況下,加入行可能不在同一個AMP上。 在這種情況下,Teradata可能會在DepartmentNo列重新分發(fā)employee表。...

合并加入...

嵌套連接不使用所有AMP。 對于嵌套連接發(fā)生,其中一個條件應該是一個表的唯一主索引上的相等,然后將此列連接到另一個表上的任何索引。

嵌套連接不使用所有AMP。 對于嵌套連接發(fā)生,其中一個條件應該是一個表的唯一主索引上的相等,然后將此列連接到另一個表上的任何索引。...

產(chǎn)品加盟

Product Join將來自一個表的每個限定行與來自其他表的每個限定行進行比較。 產(chǎn)品加入可能由于以下某些因素而發(fā)生:

  • Where condition is missing.
  • Join condition is not based on equality condition.
  • Table aliases is not correct.
  • Multiple join conditions.

Teradata - 分區(qū)主索引

分區(qū)主索引(PPI)是一種索引機制,可用于提高某些查詢的性能。 當將行插入到表中時,它們存儲在AMP中并按其行散列順序排列。 當使用PPI定義表時,行按其分區(qū)編號排序。 在每個分區(qū)中,它們按其行散列排列。 根據(jù)定義的分區(qū)表達式將行分配給分區(qū)。

產(chǎn)品加盟...

  • 避免對某些查詢進行全表掃描。

  • 避免使用需要額外物理結構和額外I / O維護的輔助索引。

  • 快速訪問大表的子集。

  • 快速刪除舊數(shù)據(jù)并添加新數(shù)據(jù)。

例子

考慮以下OrderNo主索引的Orders表。

StoreNo 訂單號 訂購日期 合計訂單
101 7501 2015-10-01 900
101 7502 2015-10-02 1,200
102 7503 2015-10-02 3,000
102 7504 2015-10-03 2,454
101 7505 2015-10-03 1201
103 7506 2015-10-04 2,454
101 7507 2015-10-05 1201
101 7508 2015-10-05 1201

假設記錄分布在AMP之間,如下表所示。 記錄存儲在AMP中,基于它們的行哈希排序。

AMP 1
RowHash 訂單號 訂購日期
1 7505 2015-10-03
2 7504 2015-10-03
3 7501 2015-10-01
4 7508 2015-10-05

AMP 2
RowHash 訂單號 訂購日期
1 7507 2015-10-05
2 7502 2015-10-02
3 7506 2015-10-04
4 7503 2015-10-02

如果運行查詢以提取特定日期的訂單,則優(yōu)化程序可以選擇使用全表掃描,然后可以訪問AMP中的所有記錄。 為了避免這種情況,您可以將訂單日期定義為分區(qū)主索引。 將行插入到訂單表中時,它們按訂單日期進行分區(qū)。 在每個分區(qū)中,它們將按其行哈希排序。

以下數(shù)據(jù)顯示如果記錄按訂單日期分區(qū),則記錄將如何存儲在AMP中。 如果運行查詢以按訂單日期訪問記錄,則只會訪問包含該特定訂單的記錄的分區(qū)。

以下數(shù)據(jù)顯示如果記錄按訂單日期分區(qū),則記錄將如何存儲在AMP中。 如果運行查詢以按訂單日期訪問記錄,則只會訪問包含該特定訂單的記錄的分區(qū)。...

AMP 1
劃分 RowHash 訂單號 訂購日期
0 3 7501 2015-10-01
1 1 7505 2015-10-03
1 2 7504 2015-10-03
2 4 7508 2015-10-05

AMP 2
劃分 RowHash RowHash... 訂購日期
0 2 7502 2015-10-02
0 4 7503 2015-10-02
1 3 7506 2015-10-04
2 1 7507 2015-10-05

以下是創(chuàng)建具有分區(qū)primary Index的表的示例。 PARTITION BY子句用于定義分區(qū)。

CREATE SET TABLE Orders (
   StoreNo SMALLINT, 
   OrderNo INTEGER, 
   OrderDate DATE FORMAT 'YYYY-MM-DD', 
   OrderTotal INTEGER 
) 
PRIMARY INDEX(OrderNo) 
PARTITION BY RANGE_N  (
   OrderDate BETWEEN DATE '2010-01-01' AND '2016-12-31' EACH INTERVAL '1' DAY
);

在上面的示例中,表由OrderDate列分區(qū)。 每天將有一個單獨的分區(qū)。

Teradata - OLAP函數(shù)

OLAP函數(shù)類似于聚合函數(shù),除了聚合函數(shù)只返回一個值,而OLAP函數(shù)將提供聚合以外的各行。

句法

以下是OLAP函數(shù)的一般語法。

<aggregate function> OVER  
([PARTITION BY] [ORDER BY columnname][ROWS BETWEEN 
UNBOUDED PRECEDING AND UNBOUNDED FOLLWOING) 

聚合函數(shù)可以是SUM,COUNT,MAX,MIN,AVG。

例子

考慮以下薪資表。

員工不 扣除 NetPay
101 40,000 4,000 36,000
102 80,000 6,000 74,000
103 90,000 7,000 83,000
104 75,000 5,000 70,000

以下是查找工資表上NetPay的累計金額或運行總計的示例。 記錄按EmployeeNo排序,累積和計算在NetPay列上。

SELECT  
EmployeeNo, NetPay, 
SUM(Netpay) OVER(ORDER BY EmployeeNo ROWS  
UNBOUNDED PRECEDING) as TotalSalary 
FROM Salary;

當執(zhí)行上述查詢時,它將產(chǎn)生以下輸出。

EmployeeNo     NetPay     TotalSalary 
-----------  -----------  ----------- 
   101         36000        36000 
   102         74000        110000 
   103         83000        193000 
   104         70000        263000 
   105         18000        281000 

例子...

當執(zhí)行上述查詢時,它將產(chǎn)生以下輸出。...

例子

以下是使用RANK函數(shù)的通用語法。

RANK() OVER 
([PARTITION BY columnnlist] [ORDER BY columnlist][DESC|ASC])

例子

考慮以下Employee表。

員工不 名字 JoinedDate DepartmentID 生日
101 Mike James 3/27/2005 1 1/5/1980
102 Robert Williams 4/25/2007 2 3/5/1983
103 Peter Paul 3/21/2007 2 4/1/1983
104 Alex Stuart 2/1/2008 2 11/6/1984
105 Robert James 1/4/2008 3 12/1/1984

以下查詢通過加入日期對雇員表的記錄進行排序,并在“加入日期”中分配排名。

SELECT EmployeeNo, JoinedDate,RANK() 
OVER(ORDER BY JoinedDate) as Seniority 
FROM Employee;

當執(zhí)行上述查詢時,它將產(chǎn)生以下輸出。

EmployeeNo   JoinedDate   Seniority 
-----------  ----------  ----------- 
   101       2005-03-27       1 
   103       2007-03-21       2 
   102       2007-04-25       3 
   105       2008-01-04       4 
   104       2008-02-01       5 

PARTITION BY子句按照在PARTITION BY子句中定義的列對數(shù)據(jù)進行分組,并在每個組中執(zhí)行OLAP功能。 以下是使用PARTITION BY子句的查詢的示例。

SELECT EmployeeNo, JoinedDate,RANK() 
OVER(PARTITION BY DeparmentNo ORDER BY JoinedDate) as Seniority 
FROM Employee;

當執(zhí)行上述查詢時,它將產(chǎn)生以下輸出。 您可以看到每個部門都重置了排名。

EmployeeNo  DepartmentNo  JoinedDate   Seniority 
-----------  ------------  ----------  ----------- 

    101           1        2005-03-27       1 
    103           2        2007-03-21       1 
    102           2        2007-04-25       2 
    104           2        2008-02-01       3 
    105           3        2008-01-04       1 

Teradata - 數(shù)據(jù)保護

本章討論Teradata中數(shù)據(jù)保護的可用功能。

瞬態(tài)雜志

Teradata使用瞬態(tài)日志來保護數(shù)據(jù)免受事務故障的影響。 無論何時運行任何事務,Transient journal都會保留受影響行的before映像的副本,直到事務成功或回滾成功。 然后,丟棄之前的圖像。 瞬時日志保存在每個AMP中。 這是一個自動過程,不能禁用。

倒退

回退通過將表的行的第二副本存儲在稱為回退AMP的另一AMP上來保護表數(shù)據(jù)。 如果一個AMP出現(xiàn)故障,則會訪問回退行。 這樣,即使一個AMP出現(xiàn)故障,通過備用AMP仍然可以獲得數(shù)據(jù)。 Fallback選項可用于表創(chuàng)建或表創(chuàng)建后。 回退確保表的行的第二副本總是存儲在另一個AMP中以保護數(shù)據(jù)免于AMP故障。 但是,回退占用的存儲空間和I / O的兩倍,用于插入/刪除/更新。

下圖顯示了如何將行的后備副本存儲在另一個AMP中。

Fallback

下降AMP恢復

當AMP故障并且表受回退保護時,將激活Down AMP恢復日志。 此日志記錄對失敗的AMP的數(shù)據(jù)的所有更改。 在集群中剩余的AMP上激活日志。 這是一個自動過程,不能禁用。 一旦失敗的AMP生效,則來自下行AMP恢復日志的數(shù)據(jù)與AMP同步。 一旦完成,日志將被丟棄。

Down AMP Recovery Journal

Cliques

Clique是Teradata用來保護數(shù)據(jù)免受節(jié)點故障的機制。 clique只是一組共享一組公共磁盤陣列的Teradata節(jié)點。 當節(jié)點出現(xiàn)故障時,來自故障節(jié)點的vprocs將遷移到clique中的其他節(jié)點,并繼續(xù)訪問其磁盤陣列。

Cliques...

熱備節(jié)點是不參與生產(chǎn)環(huán)境的節(jié)點。 如果節(jié)點出現(xiàn)故障,則故障節(jié)點的vprocs將遷移到熱備份節(jié)點。 一旦故障節(jié)點恢復,它將成為熱備份節(jié)點。 熱備節(jié)點用于在節(jié)點故障的情況下維持性能。

襲擊

熱備節(jié)點是不參與生產(chǎn)環(huán)境的節(jié)點。 如果節(jié)點出現(xiàn)故障,則故障節(jié)點的vprocs將遷移到熱備份節(jié)點。 一旦故障節(jié)點恢復,它將成為熱備份節(jié)點。 熱備節(jié)點用于在節(jié)點故障的情況下維持性能。...

RAID 1通常用于Teradata。 在RAID 1中,每個磁盤與鏡像磁盤相關聯(lián)。 對主磁盤中的數(shù)據(jù)的任何更改也反映在鏡像副本中。 如果主磁盤發(fā)生故障,則可以訪問來自鏡像磁盤的數(shù)據(jù)。

RAID

Teradata - 用戶管理

本章討論了Teradata中用戶管理的各種策略。

襲擊...

本章討論了Teradata中用戶管理的各種策略。...

例子

以下是CREATE USER的語法。

CREATE USER username 
AS  
[PERMANENT|PERM] = n BYTES 
PASSWORD = password 
TEMPORARY = n BYTES 
SPOOL = n BYTES;

創(chuàng)建用戶時,用戶名,永久空間和密碼的值是必需的。 其他字段是可選的。

例子

以下是創(chuàng)建用戶TD01的示例。

CREATE USER TD01 
AS  
PERMANENT = 1000000 BYTES 
PASSWORD = ABC$124 
TEMPORARY = 1000000 BYTES 
SPOOL = 1000000 BYTES;

帳戶

在創(chuàng)建新用戶時,可以將用戶分配到帳戶。 CREATE USER中的ACCOUNT選項用于分配帳戶。 用戶可以分配到多個帳戶。

例子

以下是具有帳戶選項的CREATE USER的語法。

CREATE USER username 
PERM = n BYTES 
PASSWORD = password 
ACCOUNT = accountid

例子

以下是具有帳戶選項的CREATE USER的語法。...

CREATE USER TD02 
AS  
PERMANENT = 1000000 BYTES 
PASSWORD = abc$123 
TEMPORARY = 1000000 BYTES 
SPOOL = 1000000 BYTES 
ACCOUNT = (‘IT’,’Admin’);

用戶可以在登錄Teradata系統(tǒng)或使用SET SESSION命令登錄系統(tǒng)后指定帳戶ID。

.LOGON username, passowrd,accountid 
OR 
SET SESSION ACCOUNT = accountid 

帳戶...

GRANT命令用于將數(shù)據(jù)庫對象的一個或多個特權分配給用戶或數(shù)據(jù)庫。

例子

以下是GRANT命令的語法。

GRANT privileges ON objectname TO username;

特權可以是INSERT,SELECT,UPDATE,REFERENCES。

例子

以下是GRANT語句的示例。

GRANT SELECT,INSERT,UPDATE ON Employee TO TD01;

撤銷特權

REVOKE命令從用戶或數(shù)據(jù)庫中刪除特權。 REVOKE命令只能刪除顯式權限。

例子

以下是REVOKE命令的基本語法。

REVOKE [ALL|privileges] ON objectname FROM username;

例子

以下是REVOKE命令的示例。

REVOKE INSERT,SELECT ON Employee FROM TD01;

Teradata - 用戶管理...

本章討論Teradata中性能調(diào)整的過程。

撤銷特權...

性能調(diào)整的第一步是在查詢中使用EXPLAIN。 EXPLAIN計劃提供了優(yōu)化程序如何執(zhí)行查詢的詳細信息。 在解釋計劃中,檢查關鍵字,如置信度級別,使用的連接策略,假脫機文件大小,重新分配等。

收集統(tǒng)計數(shù)據(jù)

優(yōu)化程序使用數(shù)據(jù)受眾特征來制定有效的執(zhí)行策略。 COLLECT STATISTICS命令用于收集表的數(shù)據(jù)人口統(tǒng)計。 確保在列上收集的統(tǒng)計數(shù)據(jù)是最新的。

  • 收集在WHERE子句中使用的列以及在連接條件中使用的列上的統(tǒng)計信息。

  • 收集唯一主索引列的統(tǒng)計信息。

  • 收集非唯一二級索引列的統(tǒng)計信息。 優(yōu)化器將決定是否可以使用NUSI或全表掃描。

  • 通過基表上的統(tǒng)計信息收集聯(lián)接索引的統(tǒng)計信息。

  • 收集分區(qū)列上的統(tǒng)計信息。

數(shù)據(jù)類型

確保使用正確的數(shù)據(jù)類型。 這將避免使用超過所需的過量存儲。

數(shù)據(jù)類型...

請確保連接條件中使用的列的數(shù)據(jù)類型兼容,以避免顯式數(shù)據(jù)轉換。

分類

刪除不必要的ORDER BY子句,除非必需。

分類...

如果查詢超過該用戶的每個AMP卷軸空間限制,則會生成假脫機空間錯誤。 驗證解釋計劃并識別占用更多假脫機空間的步驟。 這些中間查詢可以拆分并單獨放置以構建臨時表。

主索引

確保為表正確定義了主索引。 主索引列應均勻分布數(shù)據(jù),應經(jīng)常用于訪問數(shù)據(jù)。

主索引...

如果定義了SET表,那么優(yōu)化器將檢查記錄是否與插入的每個記錄重復。 要刪除重復檢查條件,可以為表定義唯一輔助索引。

更新大表

更新大表將是耗時的。 您可以刪除記錄,并插入帶有修改行的記錄,而不是更新表。

更新大表...

刪除臨時表(臨時表)和揮發(fā)性(如果不再需要它們)。 這將釋放永久空間和假脫機空間。

MULTISET表

如果確定輸入記錄不具有重復記錄,則可以將目標表定義為MULTISET表,以避免SET表使用重復行檢查。

Teradata - FastLoad

FastLoad實用程序用于將數(shù)據(jù)加載到空表。 由于它不使用臨時日志,因此可以快速加載數(shù)據(jù)。 即使目標表是MULTISET表,它也不會加載重復行。

局限性

目標表不應該有二級索引,連接索引和外鍵引用。

MULTISET表...

FastLoad在兩個階段執(zhí)行。

階段1

  • 解析引擎從輸入文件中讀取記錄,并向每個AMP發(fā)送一個塊。

  • 每個AMP存儲記錄塊。

  • 然后AMP散列每個記錄,并將它們重新分配到正確的AMP。

  • 然后AMP散列每個記錄,并將它們重新分配到正確的AMP。...

階段2

  • 階段2在FastLoad接收到END LOADING語句時啟動。

  • 每個AMP對行散列上的記錄進行排序,并將它們寫入磁盤。

  • 釋放目標表上的鎖,并刪除錯誤表。

例子

釋放目標表上的鎖,并刪除錯誤表。...

101,Mike,James,1980-01-05,2010-03-01,1  
102,Robert,Williams,1983-03-05,2010-09-01,1 
103,Peter,Paul,1983-04-01,2009-02-12,2 
104,Alex,Stuart,1984-11-06,2014-01-01,2 
105,Robert,James,1984-12-01,2015-03-09,3

下面是一個示例FastLoad腳本將上述文件加載到Employee_Stg表中。

LOGON 192.168.1.102/dbc,dbc;  
   DATABASE tduser;  
   BEGIN LOADING tduser.Employee_Stg  
      ERRORFILES Employee_ET, Employee_UV  
      CHECKPOINT 10;  
      SET RECORD VARTEXT ",";  
      DEFINE in_EmployeeNo (VARCHAR(10)), 
         in_FirstName (VARCHAR(30)), 
         in_LastName (VARCHAR(30)), 
         in_BirthDate (VARCHAR(10)), 
         in_JoinedDate (VARCHAR(10)), 
         in_DepartmentNo (VARCHAR(02)), 
         FILE = employee.txt;
      INSERT INTO Employee_Stg (
         EmployeeNo,
         FirstName,
         LastName,
         BirthDate,
         JoinedDate, 
         DepartmentNo
      ) 
      VALUES (  
         :in_EmployeeNo, 
         :in_FirstName, 
         :in_LastName, 
         :in_BirthDate (FORMAT 'YYYY-MM-DD'), 
         :in_JoinedDate (FORMAT 'YYYY-MM-DD'),
         :in_DepartmentNo
      ); 
   END LOADING;  
LOGOFF;

執(zhí)行FastLoad腳本

創(chuàng)建輸入文件employee.txt并將FastLoad腳本命名為EmployeeLoad.fl后,可以在UNIX和Windows中使用以下命令運行FastLoad腳本。

FastLoad < EmployeeLoad.fl;

一旦執(zhí)行上述命令,F(xiàn)astLoad腳本將運行并產(chǎn)生日志。 在日志中,您可以看到FastLoad處理的記錄數(shù)和狀態(tài)代碼。

**** 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:   Fri Jan  8 03:19:13 2016 
   End  :   Fri Jan  8 03:19:14 2016 
**** 03:19:14 Application Phase statistics: 
              Elapsed time: 00:00:01 (in hh:mm:ss) 
0008  LOGOFF; 
**** 03:19:15 Logging off all sessions

執(zhí)行FastLoad腳本...

以下是FastLoad腳本中使用的常用術語列表。

  • LOGON - 登錄到Teradata并啟動一個或多個會話。

  • DATABASE - 設置默認數(shù)據(jù)庫。

  • BEGIN LOADING - 標識要加載的表。

  • ERRORFILES - 標識需要創(chuàng)建/更新的2個錯誤表。

  • CHECKPOINT - 定義何時采取檢查點。

  • SET RECORD - 指定輸入文件格式是格式化,二進制,文本還是未格式化。

  • DEFINE - 定義輸入文件布局。

  • FILE - 指定輸入文件名和路徑。

  • INSERT - 將輸入文件中的記錄插入目標表中。

  • INSERT - 將輸入文件中的記錄插入目標表中。...

  • LOGOFF - 結束所有會話并終止FastLoad。

Teradata - MultiLoad

MultiLoad可以一次加載多個表,它還可以執(zhí)行不同類型的任務,如INSERT,DELETE,UPDATE和UPSERT。 它一次最多可以加載5個表,并在腳本中執(zhí)行多達20個DML操作。 MultiLoad不需要目標表。

MultiLoad支持兩種模式 -

  • IMPORT
  • DELETE

除了目標表之外,MultiLoad還需要一個工作表,一個日志表和兩個錯誤表。

  • 日志表 - 用于維護在加載期間采用的檢查點,用于重新啟動。

  • 錯誤表 - 在發(fā)生錯誤時,在加載期間插入這些表。 第一個錯誤表存儲轉換錯誤,而第二個錯誤表存儲重復記錄。

  • 日志表 - 維護MultiLoad每個階段的結果,以便重新啟動。

  • 工作表 - MultiLoad腳本為每個目標表創(chuàng)建一個工作表。 工作表用于保留DML任務和輸入數(shù)據(jù)。

局限性

MultiLoad有一些限制。

  • Unique Secondary Index not supported on target table.
  • Referential integrity not supported.
  • Triggers not supported.

MultiLoad如何工作

MultiLoad導入有五個階段 -

  • MultiLoad導入有五個階段 - ...

  • 階段2 - DML事務階段 - 驗證DML語句的語法并將其帶到Teradata系統(tǒng)。

  • 階段3 - 獲取階段 - 將輸入數(shù)據(jù)置于工作表中并鎖定表。

  • 階段4 - 應用程序階段 - 應用所有DML操作。

  • 階段4 - 應用程序階段 - 應用所有DML操作。...

MultiLoad腳本中涉及的步驟是 -

  • 步驟1 - 設置日志表。

  • 步驟2 - 登錄到Teradata。

  • 步驟3 - 指定目標,工作和錯誤表。

  • 步驟3 - 指定目標,工作和錯誤表。...

  • 步驟5 - 定義DML查詢。

  • 步驟6 - 命名IMPORT文件。

  • 步驟7 - 指定要使用的布局。

  • 步驟8 - 啟動加載。

  • 步驟9 - 完成加載并終止會話。

例子

創(chuàng)建具有以下記錄的文本文件,并將該文件命名為employee.txt。

101,Mike,James,1980-01-05,2010-03-01,1  
102,Robert,Williams,1983-03-05,2010-09-01,1 
103,Peter,Paul,1983-04-01,2009-02-12,2 
104,Alex,Stuart,1984-11-06,2014-01-01,2 
105,Robert,James,1984-12-01,2015-03-09,3 

以下示例是一個MultiLoad腳本,它從employee表中讀取記錄并加載到Employee_Stg表中。

.LOGTABLE tduser.Employee_log;  
.LOGON 192.168.1.102/dbc,dbc; 
   .BEGIN MLOAD TABLES Employee_Stg;  
      .LAYOUT Employee;  
      .FIELD in_EmployeeNo * VARCHAR(10);  
      .FIELD in_FirstName * VARCHAR(30); 
      .FIELD in_LastName * VARCHAR(30);  
      .FIELD in_BirthDate * VARCHAR(10); 
      .FIELD in_JoinedDate * VARCHAR(10);  
      .FIELD in_DepartmentNo * VARCHAR(02);

      .DML LABEL EmpLabel; 
      INSERT INTO Employee_Stg (
         EmployeeNo,
         FirstName,
         LastName,
         BirthDate,
         JoinedDate,
         DepartmentNo
      )  
      VALUES (
         :in_EmployeeNo,
         :in_FirstName,
         :in_Lastname,
         :in_BirthDate,
         :in_JoinedDate,
         :in_DepartmentNo
      );
      .IMPORT INFILE employee.txt  
      FORMAT VARTEXT ','
      LAYOUT Employee
      APPLY EmpLabel;  
   .END MLOAD;  
LOGOFF;

執(zhí)行MultiLoad腳本

以下示例是一個MultiLoad腳本,它從employee表中讀取記錄并加載到Employee_Stg表中。...

Multiload < EmployeeLoad.ml;

Teradata - FastExport

FastExport實用程序用于將Teradata表中的數(shù)據(jù)導出為平面文件。 它還可以生成報告格式的數(shù)據(jù)。 可以使用Join從一個或多個表中提取數(shù)據(jù)。 由于FastExport導出64K塊中的數(shù)據(jù),因此它可用于提取大量數(shù)據(jù)。

例子

考慮以下Employee表。

員工不 名字 生日
101 Mike James 1/5/1980
104 Alex Stuart 11/6/1984
102 Robert Williams 3/5/1983
105 Robert James 12/1/1984
103 Peter Paul 4/1/1983

以下是FastExport腳本的示例。 它從employee表導出數(shù)據(jù),并寫入文件employeedata.txt。

.LOGTABLE tduser.employee_log;  
.LOGON 192.168.1.102/dbc,dbc;  
   DATABASE tduser;  
   .BEGIN EXPORT SESSIONS 2;  
      .EXPORT OUTFILE employeedata.txt  
      MODE RECORD FORMAT TEXT;
      SELECT CAST(EmployeeNo AS CHAR(10)), 
         CAST(FirstName AS CHAR(15)), 
         CAST(LastName AS CHAR(15)), 
         CAST(BirthDate AS CHAR(10))   
      FROM
      Employee;
   .END EXPORT;
.LOGOFF;

執(zhí)行MultiLoad腳本...

一旦腳本被編寫并命名為employee.fx,您可以使用以下命令來執(zhí)行腳本。

fexp < employee.fx

執(zhí)行上述命令后,您將在employeedata.txt文件中收到以下輸出。

103       Peter          Paul           1983-04-01 
101       Mike           James          1980-01-05 
102       Robert         Williams       1983-03-05 
105       Robert         James          1984-12-01 
104       Alex           Stuart         1984-11-06

FastExport條款

以下是FastExport腳本中常用的術語列表。

  • LOGTABLE - 指定用于重新啟動目的的日志表。

  • LOGON - 登錄到Teradata并啟動一個或多個會話。

  • DATABASE - 設置默認數(shù)據(jù)庫。

  • DATABASE - 設置默認數(shù)據(jù)庫。...

  • EXPORT - 指定目標文件和導出格式。

  • SELECT - 指定要導出數(shù)據(jù)的選擇查詢。

  • END EXPORT - 指定FastExport的結束。

  • LOGOFF - 結束所有會話并終止FastExport。

Teradata - FastExport...

LOGOFF - 結束所有會話并終止FastExport。...

FastExport條款...

以下是BTEQ腳本中常用的術語列表。

  • LOGON - 用于登錄Teradata系統(tǒng)。

  • ACTIVITYCOUNT - 返回受上一個查詢影響的行數(shù)。

  • ERRORCODE - 返回上一個查詢的狀態(tài)代碼。

  • DATABASE - 設置默認數(shù)據(jù)庫。

  • DATABASE - 設置默認數(shù)據(jù)庫。...

  • RUN FILE - 執(zhí)行文件中包含的查詢。

  • GOTO - 將控制權轉移到標簽。

  • LOGOFF - 從數(shù)據(jù)庫注銷并終止所有會話。

  • IMPORT - 指定輸入文件路徑。

  • EXPORT - 指定輸出文件路徑并啟動導出。

例子

以下是BTEQ示例腳本。

.LOGON 192.168.1.102/dbc,dbc; 
   DATABASE tduser;

   CREATE TABLE employee_bkup ( 
      EmployeeNo INTEGER, 
      FirstName CHAR(30), 
      LastName CHAR(30), 
      DepartmentNo SMALLINT, 
      NetPay INTEGER 
   )
   Unique Primary Index(EmployeeNo);

   .IF ERRORCODE <> 0 THEN .EXIT ERRORCODE;
  
   SELECT * FROM  
   Employee 
   Sample 1; 
   .IF ACTIVITYCOUNT <> 0 THEN .GOTO InsertEmployee;  

   DROP TABLE employee_bkup;
  
   .IF ERRORCODE <> 0 THEN .EXIT ERRORCODE; 
 
   .LABEL InsertEmployee 
   INSERT INTO employee_bkup 
   SELECT a.EmployeeNo, 
      a.FirstName, 
      a.LastName, 
      a.DepartmentNo, 
      b.NetPay 
   FROM  
   Employee a INNER JOIN Salary b 
   ON (a.EmployeeNo = b.EmployeeNo);  

   .IF ERRORCODE <> 0 THEN .EXIT ERRORCODE; 
.LOGOFF; 

上述腳本執(zhí)行以下任務。

  • 登錄到Teradata系統(tǒng)。

  • 設置缺省數(shù)據(jù)庫。

  • 創(chuàng)建名為employee_bkup的表。

  • 從Employee表中選擇一個記錄,以檢查表是否有任何記錄。

  • 如果表為空,則刪除employee_bkup表。

  • 如果表為空,則刪除employee_bkup表。...

  • 在每個SQL語句之后,檢查ERRORCODE以確保語句成功。

  • ACTIVITYCOUNT返回先前SQL查詢選擇/影響的記錄數(shù)。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號