【问题标题】:What is the difference between volatile table and multiset volatile table?volatile table 和 multiset volatile table 有什么区别?
【发布时间】:2019-07-20 12:21:57
【问题描述】:

我正在查看一些 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


    【解决方案1】:

    Volatile table 就像 SAS 中的工作表,它只是用于特定会话。

    Teradata 有两种表,一种是集合表,另一种是多集合表。 Set table 不允许行级重复,而 multiset table 允许行级重复。如果 create table 语句中未提及任何内容,则默认为 set table。

    Teradata 还需要一个主索引,并且需要与数据主索引(索引名称)一样提及。有数据获取数据另一个选项是没有数据

    收集统计数据是一个大概念,基本上它为主索引收集人口统计数据,这反过来有助于将来依赖该索引的查询。

    【讨论】:

    • Teradata 应该主索引确定数据在 AMPS 中的散列分布方式。最近发布的 Teradata 支持无主索引 (NoPI) 的概念,但这是它自己的主题,例如收集统计信息。
    • tgreat points @Rob,我确实尝试尽可能简单地提供信息,以免混淆 SAS 程序员。尽管我自己是 SAS 程序员,将近 5 年,但我所做的只是编写 Teradata 代码。我还写了至少 2 篇论文,其中以更详细的方式讨论了 SAS 和 Teradata 的各个方面。
    • 事实上,两个 Create 都很奇怪:第一个应该是 MULTISET(每个值可能有大量行),但是对于第二个 MULTISET 是没用的,因为由于 DISTINCT 只有唯一值,因此应该成为唯一的主要索引
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-13
    • 1970-01-01
    • 2020-02-01
    • 2021-06-05
    • 1970-01-01
    • 2015-04-14
    • 2020-01-24
    相关资源
    最近更新 更多