volatile table 和 multiset volatile table 有什么区别?
What is the difference between volatile table and multiset volatile table?
我正在查看一些 SAS/Teradata 代码并对下面的内容感到困惑。这有一个 volatile table 和一个 multiset volatile table。两者有什么区别?另外,为什么要指定 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);
/* 引用 TABLE */
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;
易失性 table 就像 SAS 中的工作 table,它只用于特定会话。
Teradata 有两种table,一种是集合table,另一种是多重集合table。 Set table 不允许行级重复,而 multiset table 允许行级重复。如果在 create table 语句中未提及任何内容,则默认设置为 table。
Teradata 还需要一个主索引,并且需要与数据主索引(索引名称)一起提及。有数据获取数据另一种选择是没有数据
collect stats 是一个大概念,基本上它收集主要索引的人口统计数据,这在 return 有助于将来依赖该索引的查询。
我正在查看一些 SAS/Teradata 代码并对下面的内容感到困惑。这有一个 volatile table 和一个 multiset volatile table。两者有什么区别?另外,为什么要指定 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);
/* 引用 TABLE */
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;
易失性 table 就像 SAS 中的工作 table,它只用于特定会话。
Teradata 有两种table,一种是集合table,另一种是多重集合table。 Set table 不允许行级重复,而 multiset table 允许行级重复。如果在 create table 语句中未提及任何内容,则默认设置为 table。
Teradata 还需要一个主索引,并且需要与数据主索引(索引名称)一起提及。有数据获取数据另一种选择是没有数据
collect stats 是一个大概念,基本上它收集主要索引的人口统计数据,这在 return 有助于将来依赖该索引的查询。