SnowConvert AI - Teradata Issues¶
SSC-EWI-TD0001¶
Recursive forward alias error.
Note
Some parts in the output code are omitted for clarity reasons.
Severity¶
Low
Description¶
This EWI is shown whenever SnowConvert AI detects recursion within aliased expressions, therefore being unable to execute the Forward Alias transformation required for the correct functionality of aliases within Snowflake environment.
A recursive alias happens when an aliased expression contains another alias, and the second aliased expression contains the first alias. This may not be as trivial as the example shows, since the recursion can happen further down the line in a transitive way.
Example Code¶
Note: Recursive aliases are not supported in Snowflake, however, some simple instances are.
Note
Note that recursive alias is not supported in Snowflake, however, some simple instances are. Check the examples below.
The following example code works in Snowflake after migration:
Teradata:¶
Snowflake Scripting:¶
However, the following example code does not work:
Teradata:¶
Snowflake Scripting:¶
Best Practices¶
Review your code and make sure recursive forward aliases are not present. The EWI shows the name of the first instance of an alias that has recursive references, but that does not mean that is the only one that has them in your code.
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TD0002¶
Interval type not supported.
This EWI is deprecated since SnowConvert AI 28.1.100 release
Severity
High
Description
When the selector of a column in a SQL statement is type INTERVAL, the EWI will be added and a Stub function will be created too. This is a type that is not supported in Snowflake and therefore implies pending work after SnowConvert AI finishes.
Example Code
Teradata:
Snowflake Scripting:
Best Practices
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TD0003
Collation not supported in trim functions, add original collation to function result to preserve it.
Severity
Low
Description
In Snowflake, trim functions (LTRIM, RTRIM, or TRIM) do not support collation unless the characters to trim are empty or white space characters.
If SnowConvert AI detects a LTRIM, RTRIM or TRIM LEADING, TRAILING, or both function with the scenario mentioned above, the COLLATE function will be automatically generated to create a copy without collation of the input column. This EWI is generated to point out that the column collation was removed before the trim function, meaning the result of the function will not have collation, and that this may change the results of further comparisons using the result.
Example Code
Teradata:
Snowflake Scripting:
Best Practices
To avoid functional differences during comparisons, please add the original collation of the column to the
TRIMfunction result string, this can be achieved using theCOLLATEfunction and specifying the original column collation as the second argument, this argument has to be a literal string with the collation value.If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TD0004
Not supported SQL Exception on continue handler.
Severity
Low
Description
In Snowflake procedures there is no equivalent transformation for Teradata Continue Handler. For some supported Exception codes, SnowConvert AI does some treatment to emulate this behavior. This EWI is added to Continue Handler statements having an exception code that is not supported.
Example Code
Teradata:
Snowflake Scripting:
Best Practices
Check the possible statements that can throw the exception code and encapsulate them in a similar code block as seen in Continue Handler Translation Reference.
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TD0005
The statement was converted but its functionality is not implemented yet.
Severity
Critical
Description
The statement was recognized and it was converted but the converted code will not have the expected functionality because the implementation is not done yet.
The warning is added for the user to be aware that when the script uses this statement the script will not have the expected functionally equivalent.
Example source
BTEQ Input code:
Python Output code:
Best Practices
For more information please refer to translation spec of BTEQ to Python.
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TD0006
Invalid default value.
Severity
Low
Description
The DEFAULT TIME / DEFAULT DATE / DEFAULT CURREN_DATE / DEFAULT DEFAULT CURRENT_TIME / DEFAULT CURRENT_TIMESTAMP column specifications are not supported for the FLOAT data type.
Example Code
Teradata:
CREATE TABLE T_2004
(
-- In the output code all of these columns will be FLOAT type
-- and will include the SSC-EWI-TD0006 message.
COL1 FLOAT DEFAULT TIME,
COL2 FLOAT DEFAULT DATE,
COL3 FLOAT DEFAULT CURRENT_DATE,
COL4 FLOAT DEFAULT CURRENT_TIME,
COL5 FLOAT DEFAULT CURRENT_TIMESTAMP
);
Snowflake Scripting:
Best Practices
No additional user actions are required.
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TD0007
GROUP BY clause unsupported in Teradata Mode for string comparison
Severity
Low
Description
This error message indicates a possible issue when migrating Teradata SQL queries to Snowflake, particularly related to differences in how the GROUP BY clause handles string comparison sensitivity in Teradata mode.
In Teradata mode, string comparisons in GROUP BY clauses are case-insensitive by default (NOT CASESPECIFIC), whereas Snowflake is case-sensitive unless columns are explicitly defined with a case-insensitive COLLATE clause. This difference can cause queries that rely on case-insensitive grouping in Teradata to produce different results in Snowflake.
Example Code
Teradata:
Snowflake Scripting:
Expected Behavior Differences
Platform |
Grouping Behavior |
Example Result Rows |
|---|---|---|
Teradata Mode |
Groups ‘John’, ‘JOHN’, and ‘john’ together |
|
Snowflake |
Treats ‘John’, ‘JOHN’, and ‘john’ as separate |
|
Best Practices
Review GROUP BY clauses involving string columns when migrating from Teradata mode to ensure expected grouping behavior.
Note: When using expressions like RTRIM(UPPER(first_name)) or RTRIM(first_name) in the GROUP BY clause to achieve case-insensitive or trimmed grouping, you must apply the same expression consistently in all parts of the query where the column is referenced. For example:
This ensures that filtering, selection, and grouping all use the same logic, avoiding mismatches or unexpected results.
Define columns with COLLATE during table creation if consistent case-insensitive behavior is required:
Enable the –UseCollateForCaseSpecification CLI flag or Conversion Setting to use COLLATE for case specification during conversion. This option ensures that case specification (such as CASESPECIFIC or NOT CASESPECIFIC) is handled using COLLATE functions instead of UPPER functions. For details, refer to the CLI documentation or conversion settings.
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TD0008
Function for comparing strings is not supported
Severity
Low
Description
Currently, there is no equivalence for some string-comparing functions in Snowflake.
This EWI is added whenever the comparison type is jaro, n_gram, LD, LDWS, OSA, DL, hamming, LCS, jaccard, cosine and soundexcode.
Example Code
Teradata:
Snowflake Scripting:
Best Practices
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TD0009
TEMPORAL column not supported.
Severity
Low
Description
Teradata provides temporal table support at the column level using derived period columns. These columns are not supported in Snowflake.
Example Code
Teradata:
Snowflake Scripting:
Best Practices
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TD0010
UPPERCASE not supported by Snowflake.
Severity
Low
Description
The UPPERCASE column attribute is not supported in Snowflake.
Example Code
Teradata:
Snowflake Scripting:
Best Practices
Since the
UPPERCASEclause indicates that characters typed as ‘aaa’ are stored as ‘AAA’, a possible workaround can be adding to all the insert references the UPPER function. However, external data loading by ETL processes would also have to be modified.If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TD0012
Binary does not support default.
Severity
Low
Description
This EWI is shown when SnowConvert AI finds a data type BINARY along with a DEFAULT value specification. Since default values are not allowed in BINARY columns, it is removed.
Example Code
Teradata:
Snowflake Scripting:
Best Practices
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TD0017
Global temporary table trace functionality not supported.
Severity
Low
Description
This EWI is shown when SnowConvert AI finds a Create Table with the GLOBAL TEMPORARY TRACE option. Review the following Teradata documentation about the TRACE functionality. Since it is not supported in Snowflake, it is removed.
Example Code
Teradata:
Snowflake Scripting:
Best Practices
Note: It might be possible to replicate some tracing functionality in Snowflake by using an
EVENT TABLE. Review the following Snowflake documentation about Loggin and Tracing.If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TD0020
Regexp_Substr Function only supports POSIX regular expressions.
Note
This EWI is deprecated, please refer to SSC-EWI-0009 documentation
Severity¶
Low
Description¶
Currently, there is no support in Snowflake for extended regular expression beyond the POSIX Basic Regular Expression syntax.
This EWI is added every time a function call to REGEX_SUBSTR, REGEX_REPLACE, or REGEX_INSTR is transformed to Snowflake to warn the user about possible unsupported regular expressions. Some of the features not supported are lookahead, lookbehind, and non-capturing groups.
Example Code¶
Teradata:¶
Snowflake Scripting:¶
Best Practices¶
Check the regular expression used in each case to determine whether it needs manual intervention. More information about expanded regex support and alternatives in Snowflake can be found here.
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TD0023¶
ACTIVITY_COUNT inside SELECT/SET INTO VARIABLE requires manual fix
Severity¶
Low
Description¶
The ACTIVITY_COUNT status variable returns the number of rows affected by an SQL DML statement in an embedded SQL or stored procedure application. For more information, see the Teradata ACTIVITY_COUNT documentation.
As explained in its translation specification, there is a workaround to emulate ACTIVITY_COUNT’s behavior through:
When using ACTIVITY_COUNT in a SELECT/SET INTO VARIABLE statement, it can not be simply replaced by the workaround mentioned above.
Example Code¶
Teradata¶
REPLACE PROCEDURE InsertEmployeeSalaryAndLog_4 ()
BEGIN
DECLARE rowCount INT;
DECLARE message VARCHAR(100);
INSERT INTO employees (employee_id, first_name, last_name, department_id, salary)
VALUES (101, 'Alice', 'Smith', 10, 70000.00);
SELECT ACTIVITY_COUNT INTO rowCount;
SET message = 'ROWS INSERTED: ' || rowCount;
-- Insert the ACTIVITY_COUNT into the activity_log table
INSERT INTO activity_log (operation, row_count)
VALUES (message, rowCount);
END;
Snowflake¶
Manual Fix¶
Part of the workaround presented above can be used to still get the number of rows inserted/updated/deleted like this:
Instead of using the complete query, it needs to be adapted manually to Snowflake’s SELECT INTO VARIABLE syntax.
Furthermore, if RESULT_SCAN(LAST_QUERY_ID()) is giving incorrect results, check SSC-FDM-TD0033(../functional-difference/teradataFDM.md#ssc-fdm-td0033) for how to handle possible limitations of using LAST_QUERY_ID.
Best Practices¶
Manually adapt the proposed workaround.
Check SSC-FDM-TD0033(../functional-difference/teradataFDM.md#ssc-fdm-td0033) for how to handle possible limitations of using
LAST_QUERY_ID.If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TD0024¶
Abort statement is not supported due to an aggregate function.
Severity¶
Low
Description¶
This EWI appears when an AGGREGATE function is part of an ABORT statement inside of a stored procedure. The statement is commented out.
Example Code¶
Teradata:¶
Snowflake Scripting:¶
Best Practices¶
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TD0025¶
Output format not supported.
Severity¶
Low
Description¶
This EWI appears when a CAST function specifies an output format not supported by Snowflake scripting.
Code Example¶
Teradata:¶
Snowflake Scripting:¶
Best Practices¶
Check if the output code has functional equivalence with the original code.
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TD0027¶
Snowflake does not support Teradata built-in time dimensions column options
Severity¶
Low
Description¶
The EWI is generated because Snowflake does not support the Teradata built-in time dimensions attributes like VALIDTIME or TRANSACTIONTIME.
Example Code¶
Teradata input:¶
Snowflake output:¶
Best Practices¶
Manually create TIMESTAMP columns with default values such as CURRENT_TIMESTAMP.
Leverage the use of table streams, they can record data manipulation changes made to tables as well as metadata about each change. (Guide)
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TD0029¶
Queue table functionality is not supported.
Severity¶
Low
Description¶
This warning appears when a TABLE with the QUEUE attribute is migrated. The QUEUE keyword is removed because it is not supported in snowflake.
Example Code¶
Input:¶
Output:¶
Best Practices¶
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TD0031¶
The result may differ due to char type having a fixed length in Teradata
Severity¶
Low
Description¶
Since Teradata CHAR data type has a fixed length, some functions such as LIKE will try to match the complete column instead of the word inserted into the column, resulting in false matches. However, Snowflake the CHAR type is of variable size, meaning that the LIKE functions will always try to match against the inserted values. Take the following code as an example:
Example Code¶
Input:¶
Output:¶
Best Practices¶
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TD0034¶
Multistatement SQL is not supported.
Note
Some parts in the output code are omitted for clarity reasons.
Severity¶
Low
Description¶
Multistatement SQL execution is not supported. The request was handled as a transaction.
Note
The following EWI is only generated when the PL Target Language flag is set to Javascript, like this: ‘–PLTargetLanguage Javascript’
Example Code¶
Input:¶
-- Additional Params: --PLTargetLanguage Javascript
REPLACE PROCEDURE proc1()
BEGIN
BEGIN REQUEST;
SELECT* FROM TABLE1;
END REQUEST;
END;
Output:¶
Best Practices¶
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TD0039¶
Input format not supported.
Severity¶
Medium
Description¶
The specified input format is not supported in Snowflake.
Example Code¶
Input:¶
Output:¶
Best Practices¶
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TD0040¶
The format in a table is not supported.
Severity¶
Low
Description¶
The specified format is not supported.
Example Code¶
Input:¶
Output:¶
SSC-EWI-TD0041¶
Trunc function was added to ensure integer.
Severity¶
Low
Description¶
When migrating Teradata to Snowflake, you may encounter differences in how numeric conversions are handled. In Teradata, casting a value to INTEGER will implicitly truncate any decimal part, even if the original value is a floating-point number or a string representation of a number. However, in Snowflake, casting a non-integer numeric or a string directly to INTEGER can result in errors or unexpected results if the value is not already an integer.
To ensure compatibility, the TRUNC() function is applied before casting to INTEGER. This strips any decimal portion, allowing safe conversion to an integer. However, if the source value is not numeric or is a non-numeric string, errors may still occur and manual intervention may be required. For example, if SnowConvert AI cannot determine the column type due to missing references, you may need to manually adjust the conversion.
Example Code¶
Input:¶
Output:¶
Best Practices¶
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TD0046¶
Built-in reference is not supported in Snowflake.
Severity¶
Medium
Description¶
This error appears when there is a reference to a DBC table and the selected column has no equivalence in Snowflake.
Example Code¶
Input:¶
Output:¶
Best Practices¶
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TD0049¶
TPT-Statement not processed.
Severity¶
High
Description¶
A DML statement in TPT could not be processed and converted by the tool. This can happen for reasons like using concatenation with script variables or using escaping quotes inside the DML statement.
Example code¶
Input Code:¶
Generated Code:¶
Best Practices¶
For this issue, you can type the insert statement manually, and/or since the DML statement is not being supported yet, ask the SnowConvert AI team to add support for that specific case.
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TD0051¶
Teradata BYTES function results differs from Snowflake LENGTH function for byte columns
Severity¶
Low
Description¶
Since Teradata byte datatype has a fixed length, BYTES function will always count the trailing zeros inserted to fit smaller byte type values into the column, returning the size of the column instead of the size of the value inserted originally. However, Snowflake binary type has variable size, meaning that the LENGTH function will always return the size of the inserted values. Take the following code as an example:
Teradata:
Equivalent code in Snowflake:
Example code:¶
Input code:¶
Generated Code:¶
Best Practices¶
Analyze the use given to the BYTES function results, the Snowflake LENGTH function behavior was the one desired from the start and no changes are required.
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TD0052¶
Snowflake implicit conversion to numeric differs from Teradata and may fail for non-literal strings
Severity¶
Low
Description¶
Both Teradata and Snowflake allow string values to function that expect numeric parameters, these strings are then parsed and converted to their numeric equivalent.
However, there are differences on what the two languages consider a valid numeric string, Teradata is more permissive and successfully parses cases like empty / whitespace-only strings, embedded dashes, having no digits in the mantissa or exponent, currency signs, digit separators or specifying the sign of the number after the digits. For example, the following strings are valid:
'1-2-3-4-5' -> 12345'$50' -> 50'5000-' -> -5000'1,569,284.55' -> 1569284.55
Snowflake applies automatic optimistic string conversion, expecting the strings to match either the TM9 or TME formats, so conversion fails for most of the cases mentioned. To solve these differences, SnowConvert AI processes string literals passed to functions that do an implicit conversion to numeric and generates equivalent strings that match TM9 or TME so they can be parsed by Snowflake. This only applies to literal string values, meaning non-literal values have no guarantee to be parsed by Snowflake.
Example code¶
Input code:¶
Generated Code:¶
Best Practices¶
No additional user actions are required.
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TD0053¶
Snowflake does not support the period datatype, all periods are handled as varchar instead
Note
Some parts in the output code are omitted for clarity reasons.
Note
This EWI is deprecated, please refer to SSC-FDM-TD0036 documentation
Precision of generated varchar representations¶
PERIOD_UDF generates the varchar representation of a period using the default formats for timestamps and time specified in Snowflake, this means timestamps will have three precision digits and time variables will have zero, because of this you may find that the results have a higher/lower precision from the expected, there are two options to modify how many precision digits are included in the resulting string:
Use the three parameters version of PERIOD_UDF: This overload of the function takes the
PRECISIONDIGITSparameter, an integer between 0 and 9 to control how many digits of the fractional time part will be included in the result. Note that even if Snowflake supports up to nine digits of precision the maximum in Teradata is six. Example:
Call |
Result |
|---|---|
|
|
|
|
|
|
Alter the session parameters
TIMESTAMP_NTZ_OUTPUT_FORMATandTIME_OUTPUT_FORMAT: The commandsALTER SESSION SET TIMESTAMP_NTZ_OUTPUT_FORMAT = <format>andALTER SESSION SET TIME_OUTPUT_FORMAT = <format>can be used to modify the formats Snowflake uses by default for the current session, modifying them to include the desired number of precision digits changes the result of future executions of PERIOD_UDF for the current session.
Example code¶
Input code:¶
Generated Code:¶
Best Practices¶
Since the behavior of
PERIODand its related functions is emulated using varchar, we recommend reviewing the results obtained to ensure its correctness.If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TD0055¶
Snowflake supported formats for TO_CHAR differ from Teradata and may fail or have different behavior
Note
This EWI is deprecated, please refer to SSC-FDM-TD0029 documentation
Format elements that depend on session parameters¶
Some Teradata format elements are mapped to Snowflake functions that depend on the value of session parameters. To avoid functional differences in the results you should set these session parameters to the same values they have in Teradata. Identified format elements that are mapped to this kind of functions are:
D: Mapped to
DAYOFWEEKfunction, the results of this function depend on theWEEK_STARTsession parameter, by default Teradata considers Sunday as the first day of the week, while in Snowflake it is Monday.WW: Mapped to
WEEKfunction, this function depends on the session parameterWEEK_OF_YEAR_POLICYwhich by default is set to use the ISO standard (the first week of year is the first to contain at least four days of January) but in Teradata is set to consider January first as the start of the first week.
To modify session parameters, use ALTER SESSION SET parameter_name = value. For more information, see the Snowflake session parameters reference.
Single parameter version of TO_CHAR¶
The single parameter version of TO_CHAR(Datetime) makes use of the default formats specified in the session parameters TIMESTAMP_LTZ_OUTPUT_FORMAT, TIMESTAMP_NTZ_OUTPUT_FORMAT, TIMESTAMP_TZ_OUTPUT_FORMAT and TIME_OUTPUT_FORMAT. To avoid differences in behavior please set them to the same values used in Teradata.
For TO_CHAR(Numeric) Snowflake generates the varchar representation using either the TM9 or TME formats to get a compact representation of the number, Teradata also generates compact representations of the numbers so no action is required.
Example Code¶
Input Code:¶
Generated Code:¶
Best Practices¶
When using FF either try to use DateTime types with the same precision that you use in Teradata or add a precision to the format element to avoid the different behavior.
When using timezone-related format elements, use the first parameter of type
TIMESTAMP_TZto avoid different behavior. Also remember that theTIMEtype cannot have time zone information in Snowflake.Set the necessary session parameters with the default values from Teradata to avoid different behavior.
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TD0057¶
Binary data in NEW JSON is not supported
Severity¶
Low
Description¶
The NEW JSON function accepts the JSON data represented as a string or in binary format. when the data is in its binary representation the function is not transformed since this binary format is not valid in Snowflake because it cannot interpret the metadata about the JSON object, for more information about this please see Teradata NEW JSON documentation.
Example Code¶
Input Code¶
Generated Code¶
Best Practices¶
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TD0059¶
Snowflake user default time zone may require configuration to match Teradata value
Severity¶
Low
Description¶
Same as Teradata, setting a default time zone value to the user will make sessions start using that time zone until a new value is defined for the session.
This warning is generated to remind that the same time zone that was defined for the user in Teradata should be set for the Snowflake user, to do this please use the following query in Snowflake: ALTER SESSION SET TIMEZONE = 'equivalent_timezone', remember that Snowflake only accepts IANA Time Zone Database standard time zones.
Example Code¶
Input Code:¶
Generated Code:¶
Best Practices¶
Remember to set the default time zone of the user to a time zone equivalent to the one set for the Teradata user.
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TD0060¶
JSON_TABLE not transformed, column names could not be retrieved from semantic information
Note
Some parts in the output code are omitted for clarity reasons.
Severity¶
Low
Description¶
The JSON_TABLE function can be transformed by SnowConvert AI, however, this transformation requires knowing the name of the columns that are being selected in the JSON_TABLE ON subquery.
This message is generated to warn the user that the column names were not explicitly put in the subquery (for example, a SELECT * was used) and the semantic information of the tables being referenced was not found, meaning the column names could not be extracted.
If you want know how to load JSON data into a table check this page
Example code¶
Input Code:¶
Generated Code:¶
Best Practices¶
Please check the code provided to SnowConvert AI is complete, if you did not provide the table definition please re-execute the code with the table definition present.
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TD0061¶
TD_UNPIVOT transformation requires column information that could not be found, columns missing in result
Severity¶
Low
Description¶
SnowConvert AI not supports and transforms the TD_UNPIVOT function, which can be used to represent columns from a table as rows.
However, this transformation requires information about the table/tables columns to work, more specifically the names of the columns. When this information is not present the transformation may be left in an incomplete state where columns are missing from the result, this EWI is generated in these cases.
Example code¶
Input Code:¶
Generated Code:¶
Best Practices¶
There are two ways of supplying the information about columns to the conversion tool: put the table specification in the same file as the TD_UNPIVOT call or specify a column list in the SELECT query of the ON expression instead of SELECT * or the table name.
This issue can be safely ignored if ALL the columns from the input table/tables are unpivoted, otherwise, the result will have missing columns.
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TD0063¶
JSON path was not recognized
Note
Some parts in the output code are omitted for clarity reasons.
Severity¶
Medium
Description¶
This message is shown when SnowConvert AI cannot deserialize a JSON path because the string does not have the expected JSON format.
Example code¶
Input Code:¶
Generated Code:¶
Best Practices¶
Check if the Json path have an unexpected character, or do not have the right format.
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TD0066¶
The following identifier has one or more Unicode escape characters that are invalid in snowflake
Note
Some parts in the output code are omitted for clarity reasons.
Severity¶
Low
Description¶
This message is shown when SnowConvert AI transforms a Teradata Unicode Delimited Identifier with invalid characters in Snowflake.
Example code¶
Input Code:¶
Generated Code:¶
Best Practices¶
Use identifiers with valid Unicode characters in Snowflake.
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TD0068¶
Snowflake does not support profiles, referencing role instead
Severity¶
Medium
Description¶
Teradata profiles allow defining of multiple common parameters related to storage space and password constraints management.
However, Snowflake works with cloud architecture and automatically manages and optimizes storage, meaning no storage customization is done on the user side. Also, Snowflake currently has a password policy defined that applies to all user passwords and is not modifiable.
This error is generated when a reference to a Teradata profile is found to indicate that it was changed to a reference to the user’s role, which is the nearest approximation to a profile in Snowflake, although there might be differences in the query results unless the profile and role names of a user are the same.
Example code¶
Input Code:¶
Generated Code:¶
Best Practices¶
Avoid referencing user profiles, they are not supported, and query results will be different unless the user has the same name for both its profile and role.
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TD0069¶
ST_DISTANCE results are slightly different from ST_SPHERICALDISTANCE
Note
This EWI is deprecated, please refer to SSC-FDM-TD0031 documentation
Severity¶
Low
Description¶
The Teradata function ST_SPHERICALDISTANCE calculates the distance between two spherical coordinates on the planet using the Haversine formula, on the other side, the Snowflake ST_DISTANCE function does not utilize the haversine formula to calculate the minimum distance between two geographical points.
Example Code¶
Input Code:¶
Generated Code¶
Best Practices¶
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TD0070¶
A return statement was added at the end of the label section to ensure the same execution flow
Note
This EWI is deprecated, please refer to SSC-FDM-TD0030 documentation
Severity¶
Medium
Description¶
When a Goto statement is replaced with a Label section and does not contain a return statement, one is added at the end of the section to ensure the same execution flow.
BTEQ after a Goto command is executed, the statements between the goto command and the label command with the same name are ignored. So, to avoid those statements being executed the label section should contain a return statement.
In addition, it is worth value mentioning the Goto command skips all the other statements except for the Label with the same name, which is when the execution resumes. Therefore, the execution will never resume in a label section defined before the Goto command.
Example Code¶
Input Code:¶
Generated Code¶
Best Practices¶
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TD0076¶
The use of foreign tables is not supported in Snowflake.
Severity¶
Medium
Description¶
Foreign tables enable access to data in external object storage, such as semi-structured and unstructured data in Amazon S3, Azure Blob storage, and Google Cloud Storage. This syntax is not supported in Snowflake. However, there are other alternatives in Snowflake that can be used instead, such as external tables, iceberg tables, and standard tables.
Example code¶
Input code:¶
Generated Code:¶
Best Practices¶
Instead of foreign tables in Teradata, you can use Snowflake external tables. External tables reference data files located in a cloud storage (Amazon S3, Google Cloud Storage, or Microsoft Azure) data lake. This enables querying data stored in files in a data lake as if it were inside a database. External tables can access data stored in any format supported by COPY INTO <table> statements.
Another alternative is Snowflake’s Iceberg tables. So, you can think of Iceberg tables as tables that use open formats and customer-supplied cloud storage. This data is stored in Parquet files.
Finally, there are the standard Snowflake tables which can be an option to cover the functionality of foreign tables in Teradata
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TD0077¶
RESET WHEN clause is not supported in this scenario due to its condition
Note
Some parts in the output code are omitted for clarity reasons.
Severity¶
Medium
Description¶
SnowConvert AI currently only supports RESET WHEN clauses with binary conditions (<=, >= or =). Any other type of condition, such as IS NOT NULL, the RESET WHEN clause will be removed and an error message will be added since it is not supported in Snowflake.
This error message also appears when the RESET WHEN condition references an expression whose definition was not found by the migration tool. Currently, the tool supports the alias references to a column that was defined in the same query.
Example Code¶
Condition is not binary¶
Input Code:¶
Generated Code¶
Condition expression was not found¶
Input Code:¶
Generated Code¶
Best Practices¶
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TD0079¶
The required period type column was not found
Note
Some parts in the output code are omitted for clarity reasons.
Severity¶
Low
Description¶
This warning is shown because the Period column necessary to replicate the functionality of Normalize clause was not found.
Example Code¶
Input Code:¶
Generated Code¶
Best Practices¶
To fix this warning manually you just need to find which was the first period column and remove all its references except where is defined, and then replace PeriodColumn with the column found.
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TD0082¶
Translate function using the current encoding is not supported
Severity¶
Medium
Description¶
The usage of the Translate function using the current encoding arguments is not supported in Snowflake. The function is commented out during translation.
Example Code¶
Input Code:¶
Generated Code¶
Best Practices¶
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TD0083¶
Not able to transform two or more complex Select clauses at a time
Note
Some parts in the output code are omitted for clarity reasons.
Severity¶
Medium
Description¶
SnowConvert AI is not able to transform two or more complex SELECT clauses, as it is necessary to map them to a CTE or composite FROM clause, which causes the mapped code to not compile or enter into a logical cycle.
What do we consider a SELECT complex clause?¶
Those that required to be mapped to a CTE or composite FROM clause such as NORMALIZE, EXPAND ON, or RESET WHEN.
Example Code¶
Input Code:¶
Generated Code¶
Best Practices¶
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TD0087¶
GOTO statement was removed due to if statement inversion.
Note
This EWI is deprecated, please refer to SSC-FDM-TD0026 documentation
Note
Some parts in the output code are omitted for clarity reasons.
Severity¶
Medium
Description¶
It is common to use GOTO command with IF and LABEL commands to replicate the functionality of an SQL if statement. When used in this way, it is possible to transform them directly into an if, if-else, or even an if-elseif-else statement. However, in these cases, the GOTO commands become unnecessary and should be removed to prevent them from being replaced by a LABEL section.
Example Code¶
Input Code:¶
-- Additional Params: --scriptsTargetLanguage SnowScript
.If ActivityCount = 0 THEN .GOTO endIf
DROP TABLE TABLE1;
.Label endIf
SELECT A FROM TABLE1;
Generated Code¶
Best Practices¶
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TD0091¶
Expression converted as cast with possible errors due to missing dependencies.
Note
Some parts in the output code are omitted for clarity reasons
Severity¶
Medium
Description¶
In Teradata scripts, you can use the following syntax to CAST expressions:
Unfortunately, this syntax generates ambiguity when trying to convert a CAST to DATE or TIME since these keywords also behave as the CURRENT_DATE and CURRENT_TIME functions respectively.
Thus, without context about the expression to be CAST, there is no sure way to differentiate when we are dealing with an actual case of CAST or a function that accepts DATE or TIME as parameters.
In other words, it is required to know whether <expression> is a column or a user-defined function (UDF). To achieve this, when converting the code, one must add the CREATE TABLE or CREATE FUNCTION from which <expression> is dependant on.
E.g. check the following SELECT statement. With no context about AMBIGUOUS_EXPR, we have no way to determine if we are dealing with a function call or CAST to DATE. However, we do know that COL1 (DATE) is indeed a CAST since COL1 is a column from the table TAB.
Example Code¶
Input Code:¶
Generated Code¶
Best Practices¶
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TD0092¶
Translation for Teradata Built-In Table/View is not currently supported
Severity¶
Low
Description¶
This EWI is added when SnowConvert AI finds a Teradata system table that is currently not translated.
Example Code¶
Input Code:¶
Generated Code¶
Best Practices¶
Search in Snowflake’s internal tables, such as
Information_SchemaorSNOWFLAKE.ACCOUNT_USAGEfor equivalentsIf you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TD0093¶
Format not supported and must be updated in all its varchar casting uses.
Severity¶
High
Description¶
This EWI is added when the CAST function is used to cast a numeric expression to another numeric type with a specified format. While the format does not impact the numeric value itself, if the result is subsequently cast to a string, the intended format will not be correctly applied. Therefore, it is necessary to update all instances where the result is cast to VARCHAR, ensuring the format defined in the EWI is used.
Example Code¶
Input Code:¶
Generated Code¶
Best Practices¶
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TD0094¶
The IMPORT command was not converted.
Severity¶
High
Description¶
This issue indicates that an .IMPORT command was not converted because it uses unsupported features. The original MLoad layout, DML, and import statements are commented out and each line is annotated with this EWI.
Features pending translation:
BINARYformatFASTLOADformat.TABLEtype layoutINMODoptionAXSMODoptionNon
INSERT-VALUESDML statements
Missing required definitions:
.LAYOUTdefinition was not found in the script.DML LABELwas not found in the script
Example Code¶
Teradata:¶
Snowflake Scripting:¶
Best Practices¶
Convert the source file to a supported format (
VARTEXT,TEXT, orUNFORMAT) before running SnowConvert AI.Manually rewrite the load using Snowflake stages and
COPY INTO.If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TD0095¶
DML statement in IMPORT command is pending translation.
Severity¶
Medium
Description¶
This issue happens when a .IMPORT command uses a DML label that includes statements other than a basic INSERT ... VALUES (for example, UPDATE, DELETE, or more complex INSERT logic). In these cases, the converter will only transform the simple INSERT ... VALUES part into a COPY INTO statement for Snowflake. Any other DML statements are left in the output with a warning annotation, and are not automatically converted. This means that important logic—like updates or deletes—will not be migrated, which can affect your results. Please review and update your script to handle these cases, such as by using a MERGE statement for upserts.
Example Code¶
Teradata:¶
Snowflake Scripting:¶
Best Practices¶
Implement the equivalent upsert logic in Snowflake using
MERGE.Load data into a staging table first, then merge into the target table.
If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TD0096¶
COPY INTO requires an explicit target file name.
Severity¶
Medium
Description¶
When the .IMPORT INFILE path consists solely of a bash variable (for example, ${FILE_PATH}) and no explicit file name can be inferred, this EWI is raised for the COPY INTO source. The converter cannot determine the file name to use in the stage path.
Example Code¶
Teradata:¶
Snowflake Scripting:¶
Best Practices¶
Adjust the original MLoad script so that the file name is explicit (separate directory and file name).
Use a literal file name with variable directory, for example,
.IMPORT INFILE ${DATA_DIR}/employees.csv ...If you need more support, you can email us at snowconvert-support@snowflake.com
SSC-EWI-TD0097¶
Local variables not supported in PUT or COPY INTO.
Severity¶
Medium
Description¶
This issue indicates the use of local MLoad variables, such as &FILE_NAME, defined with .SET in INFILE paths. These cannot be resolved in the generated PUT or COPY INTO statements because Snowflake’s PUT command only supports literal paths or SnowSQL session variables (&{VAR}), not Snowflake Scripting variables (:var).
Example Code¶
Teradata:¶
Snowflake Scripting:¶
Best Practices¶
Replace local variables with bash variables (resolved by SnowSQL before execution).
Alternatively, hard-code the file name directly.
If you need more support, you can email us at snowconvert-support@snowflake.com