Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sas volatile表和multiset volatile表之间的区别是什么?_Sas_Teradata - Fatal编程技术网

Sas volatile表和multiset volatile表之间的区别是什么?

Sas volatile表和multiset volatile表之间的区别是什么?,sas,teradata,Sas,Teradata,我正在查看一些SAS/Teradata代码,并对下面的内容感到困惑。它有一个volatile表和一个multiset volatile表。这两者的区别是什么?另外,为什么要指定数据主索引?还有第二个问题,为什么要收集统计数据 PROC SQL ; CONNECT TO TERADATA (AUTHDOMAIN=IDWPRD SERVER= IDWPRD MODE=TERADATA); EXECUTE( CREATE VOLATILE TABLE REQ1_1_CODE_INS AS ( SE

我正在查看一些SAS/Teradata代码,并对下面的内容感到困惑。它有一个volatile表和一个multiset volatile表。这两者的区别是什么?另外,为什么要指定数据主索引?还有第二个问题,为什么要收集统计数据

  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);

Volatile表类似于SAS中的工作表,它只是为特定的会话而存在

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

Teradata还需要一个主索引,并且需要与data primary indexindex name一起提及。使用数据获取数据另一个选项是不使用数据


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

Teradata“应该由主索引确定数据在AMP中的散列分布方式。”。Teradata的最新版本支持无主索引NoPI的概念,但这是它自己的主题,如Collect Statistics.tgreat points@Rob,我尝试将信息尽可能简单,以免混淆SAS程序员。尽管我自己也是SAS程序员,但在将近5年的时间里,我所做的只是编写Teradata代码。我还写了至少2篇论文,其中以稍微更详细的方式讨论了SAS和Teradata的各个方面。事实上,这两篇文章都很奇怪:第一篇应该是多集的,每个值可能有大量行,但是对于第二个MULTISET是无用的,因为由于DISTINCT,只有唯一的值,因此应该有唯一的主索引
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;