This is a deprecated version of the SnowConvert documentation, please visit the official site HERE.
Severity
Medium
Description
This section describes the different issues that could be triggered by PIVOT and UNPIVOT clauses. The not supported scenarios are presented in the following table.
MULTIPLE COLUMN
Multiple column is not supported by PIVOT and UNPIVOT clauses.
Example Code
Input Code:
SELECT*FROM star1p UNPIVOT ((sales,cogs) FOR yr_qtrIN ((Q101Sales, Q101Cogs) AS'Q101A', (Q201Sales, Q201Cogs) AS'Q201A', (Q301Sales, Q301Cogs) AS'Q301A')) AS Tmp;
Output Code:
SELECT*FROM-- ** MSC-ERROR - MSCEWI1015 - PIVOT/UNPIVOT MULTIPLE COLUMN NOT SUPPORTED **-- PUBLIC.star1p UNPIVOT ((sales,cogs) FOR yr_qtr--IN ((Q101Sales, Q101Cogs) AS 'Q101A', (Q201Sales, Q201Cogs) AS 'Q201A', (Q301Sales, Q301Cogs) AS 'Q301A')) AS Tmp ;
RENAME COLUMN
Renaming columns with aliases is not supported in snowflake UNPIVOT clauses, Snow Convert is going to remove aliases for functions or columns in order to create a valid query, check that this change does not affect the original functionality.
For PIVOT, the use of column aliases is only supported in SnowConvert for Teradata if the following two conditions are true: all expressions inside the IN clause have an alias associated and Snowconvert has information about the columns that will be generated as result, either by providing the table definition or using a subquery with an explicit column list as input to the clause.
Example Code
Input Code:
CREATETABLEstar1( country VARCHAR(20),stateVARCHAR(10), yr INTEGER, qtr VARCHAR(3), sales INTEGER, cogs INTEGER);--SAMPLE 1SELECT*FROM db1.star1p UNPIVOT (column1 FOR for_column IN (col1 AS'as_col1', col2 AS'as_col2')) Tmp;--SAMPLE 2SELECT*FROM star1 PIVOT ( SUM(sales) as ss1 FOR qtr
IN ('Q1' AS Quarter1,
'Q2'AS Quarter2, 'Q3'AS Quarter3))Tmp;--SAMPLE 3SELECT*FROM (SELECT country,state, yr, qtr, sales, cogsFROM star1 ) APIVOT ( SUM(sales) as ss1 FOR qtr
IN ('Q1' AS Quarter1,
'Q2'AS Quarter2, 'Q3'AS Quarter3))Tmp;
Output Code:
CREATETABLEstar1 ( country VARCHAR(20),stateVARCHAR(10), yr INTEGER, qtr VARCHAR(3), sales INTEGER, cogs INTEGER);--SAMPLE 1SELECT*FROM db1.PUBLIC.star1p UNPIVOT(column1 FOR for_column IN (col1, col2) /*** MSC-ERROR - MSCEWI1015 - PIVOT/UNPIVOT RENAME COLUMN NOT SUPPORTED ***/) Tmp;
--SAMPLE 2SELECT*FROM star1 PIVOT(SUM(sales) FOR qtr IN ('Q1','Q2','Q3'))Tmp ( country,state, yr, cogs, Quarter1_ss1, Quarter2_ss1, Quarter3_ss1 );--SAMPLE 3SELECT*FROM (SELECT country,state, yr, qtr, sales, cogsFROM star1 ) A PIVOT(SUM(sales) FOR qtr IN ('Q1','Q2','Q3'))Tmp ( country,state, yr, cogs, Quarter1_ss1, Quarter2_ss1, Quarter3_ss1 );
SELECT*FROM STAR1 PIVOT(SUM(COL1), SUM(COL2) FOR YR IN ('Y1', 'Y2', 'Y3'))TMP;
Output Code:
SELECT*FROM-- ** MSC-ERROR - MSCEWI1015 - PIVOT/UNPIVOT MULTIPLE FUNCTION NOT SUPPORTED **-- PUBLIC.STAR1 PIVOT(SUM(COL1), SUM(COL2) FOR YR IN ('Y1', 'Y2', 'Y3'))TMP ;
WITH CLAUSE
Teradata PIVOT has an optional WITH clause, this is not allowed in snowflake's PIVOT.
Example Code
Input Code:
SELECT*FROM STAR1 PIVOT(SUM(COL1) FOR YR IN ('Y1', 'Y2', 'Y3') WITHSUM(*) AS withalias)TMP;
Output Code:
SELECT*FROM PUBLIC.STAR1 PIVOT(SUM(COL1) FOR YR IN ('Y1', 'Y2', 'Y3')-- ** MSC-ERROR - MSCEWI1015 - PIVOT/UNPIVOT WITH CLAUSE NOT SUPPORTED **-- WITH SUM(*) AS withalias )TMP;
XML OUTPUT FORMAT
XML output for PIVOT clause is not supported by snowflake.
Example Code
Input Code:
SELECT*FROM (SELECT product_code, quantity FROM pivot_test)PIVOT XML (SUM(quantity) FOR (product_code) IN ('A','B','C'));
Output Code:
SELECT*FROM (SELECT product_code, quantity FROM MYDB.PUBLIC.pivot_test)/*** MSC-ERROR - MSCEWI1015 - PIVOT/UNPIVOT XML OUTPUT FORMAT NOT SUPPORTED ***/PIVOT (SUM(quantity) FOR product_code IN ( 'A', 'B', 'C'));
IN CLAUSE SUBQUERY
Subqueries for IN clause are not supported.
Example Code
Input Code:
SELECT*FROM s1 PIVOT(SUM(COL1) FOR FORCOL IN (SELECT SELCOL FROM S2))DT;
Output Code:
SELECT*FROM-- ** MSC-ERROR - MSCEWI1015 - PIVOT/UNPIVOT IN CLAUSE SUBQUERY NOT SUPPORTED **-- PUBLIC.s1 PIVOT(SUM(COL1) FOR FORCOL IN (SELECT--SELCOL--FROM PUBLIC.S2))DT ;
IN CLAUSE ANY SEQUENCE
This error is triggered when ANY keyword is used in IN clause. This is currently not supported.
Example Code
Input Code:
SELECT*FROM (SELECT product_code, quantity FROM pivot_test)PIVOT (SUM(quantity)FOR product_code IN (ANY, ANY, ANY));
Output Code:
SELECT*FROM (SELECT product_code, quantity FROM MYDB.PUBLIC.pivot_test)-- ** MSC-ERROR - MSCEWI1015 - PIVOT/UNPIVOT IN CLAUSE ANY SEQUENCE NOT SUPPORTED **--PIVOT (SUM(quantity) FOR product_code IN (ANY, ANY, ANY)) ;
INCLUDE/EXCLUDE NULLS
INCLUDE NULLS or EXCLUDE NULLS are not valid options for UNPIVOT clauses in snowflake.
Example Code
Input Code:
SELECT*FROM db1.star1p UNPIVOT INCLUDENULLS (column1 FOR for_column IN (col1, col2)) Tmp;
Output Code:
SELECT*FROM/*** MSC-ERROR - MSCEWI1015 - PIVOT/UNPIVOT INCLUDE/EXCLUDE NULLS NOT SUPPORTED ***/ db1.PUBLIC.star1p UNPIVOT(column1 FOR for_column IN (col1, col2)) Tmp;
Recommendations
Re-write the query if possible, otherwise, no additional user actions are required.