簡體   English   中英

易失表和多集易失表有什么區別?

[英]What is the difference between volatile table and multiset volatile table?

我正在查看一些SAS / Teradata代碼,並在下面感到困惑。 它具有一個易失表和一個多集易失表。 兩者有什么區別? 另外,為什么要指定WITH DATA PRIMARY INDEX? 同樣對於第二個,為什么要收集統計信息?

  PROC SQL ;
CONNECT TO TERADATA (AUTHDOMAIN=IDWPRD SERVER= IDWPRD MODE=TERADATA);
EXECUTE(
CREATE VOLATILE TABLE REQ1_1_CODE_INS AS (
SELECT 
    ACCT_REF_NB, 
    CAST(NON_MNTR_TXN_PST_TS AS DATE) AS ADJ_DT,
    SRC_DATA_DT,
    NON_MNTR_TXN_SEQ_NB,
    SRC_CRE_USER_ID,
    PROC_TRAN_CD,
    PROC_TRCK_ID,
    MAX(CASE WHEN NON_MNTR_TXN_SBTP_CD = '0009' THEN TRIM(NEW_NON_MNTR_TXN_DTL_TX) ELSE NULL END) AS CARD_NB
FROM DWHMGR.PST_NON_MNTR_TXN
WHERE NON_MNTR_TXN_TP_CD ='255'
    AND CAST(NON_MNTR_TXN_PST_TS AS DATE) >= '2016-03-13'
    AND CAST(NON_MNTR_TXN_PST_TS AS DATE) <= '2017-11-09'
GROUP BY 1,2,3,4,5,6,7
HAVING TXN_DT <= ADD_MONTHS(ADJ_DT, -24) 
        OR UPPER(MRCH_NM) LIKE '%CHECK TO%' 
        OR UPPER(MRCH_NM) LIKE '%BALANCE TRANSFER%' 
)WITH DATA PRIMARY INDEX(ACCT_REF_NB) ON COMMIT PRESERVE ROWS;
) BY TERADATA;
CREATE TABLE UNIX.REQ1_1_CODE_INS AS SELECT * FROM CONNECTION TO TERADATA(SELECT * FROM REQ1_1_CODE_INS);

/ *參考表* /

EXECUTE(
CREATE MULTISET VOLATILE TABLE _ACCTS_00 AS (
    SELECT DISTINCT ACCT_REF_NB FROM REQ1_1_CODE_INS
) WITH DATA PRIMARY INDEX(ACCT_REF_NB) ON COMMIT PRESERVE ROWS;
) BY TERADATA;
EXECUTE( COLLECT STATISTICS ON _ACCTS_00 PRIMARY INDEX(ACCT_REF_NB); ) BY TERADATA;

易失性表就像SAS中的工作表一樣,僅用於特定會話。

Teradata有2種表,一種是設置表,另一種是多集表。 集合表不允許行級重復,而多集表則允許行級重復。 如果create table語句中未提及任何內容,則默認設置為set table。

Teradata還需要一個主索引,並且需要與數據主索引(索引名稱)一起提及。 有數據獲取數據另一個選擇是沒有數據

收集統計信息是一個大概念,基本上它收集主要索引的人口統計數據,這反過來有助於將來依賴該索引的查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM