LogoLogo
SnowflakeDocumentation Home
  • Snowflake SnowConvert Documentation
  • General (Beta)
    • Getting Started
      • System Requirements
      • Download and Access
      • Best practices
      • End User License Agreement
      • Release Notes ( Beta)
    • General Issues and Troubleshooting
      • FAQ and Troubleshooting
      • Complex Pattern Issues
        • MSCCP0001
        • MSCCP0002
        • MSCCP0003
        • MSCCP0004
        • MSCCP0005
        • MSCCP0006
        • MSCCP0007
        • MSCCP0008
        • MSCCP0009
        • MSCCP0010
        • MSCCP0011
      • Conversion Issues
        • MSCEWI1001
        • MSCEWI1002
        • MSCEWI1003
        • MSCEWI1004
        • MSCEWI1005
        • MSCEWI1006
        • MSCEWI1007
        • MSCEWI1009
        • MSCEWI1010
        • MSCEWI1011
        • MSCEWI1012
        • MSCEWI1013
        • MSCEWI1014
        • MSCEWI1015
        • MSCEWI1016
        • MSCEWI1017
        • MSCEWI1018
        • MSCEWI1019
        • MSCEWI1020
        • MSCEWI1021
        • MSCEWI1022
        • MSCEWI1023
        • MSCEWI1024
        • MSCEWI1025
        • MSCEWI1026
        • MSCEWI1027
        • MSCEWI1028
        • MSCEWI1029
        • MSCEWI1030
        • MSCEWI1031
        • MSCEWI1032
        • MSCEWI1033
        • MSCEWI1034
        • MSCEWI1035
        • MSCEWI1036
        • MSCEWI1037
        • MSCEWI1038
        • MSCEWI1039
        • MSCEWI1040
        • MSCEWI1041
        • MSCEWI1042
        • MSCEWI1043
        • MSCEWI1044
        • MSCEWI1045
        • MSCEWI1046
        • MSCEWI1047
        • MSCEWI1048
        • MSCEWI1049
        • MSCEWI1050
        • MSCEWI1051
        • MSCEWI1052
        • MSCEWI1053
        • MSCEWI1054
        • MSCEWI1055
        • MSCEWI1056
        • MSCEWI1057
        • MSCEWI1058
          • Teradata
          • Oracle
          • SQL Server
        • MSCEWI1059
        • MSCEWI1060
        • MSCEWI1061
        • MSCEWI1062
        • MSCEWI1063
        • MSCEWI1064
        • MSCEWI1065
        • MSCEWI1066
        • MSCEWI1067
        • MSCEWI1068
        • MSCEWI1069
        • MSCEWI1070
        • MSCEWI1071
        • MSCEWI1072
        • MSCEWI1073
        • MSCEWI1074
        • MSCEWI1075
        • MSCEWI1076
        • MSCEWI1077
        • MSCEWI1078
        • MSCEWI1079
        • MSCEWI1080
        • MSCEWI1081
        • MSCEWI1082
        • MSCEWI1083
        • MSCEWI1084
        • MSCEWI1086
        • MSCEWI1087
        • MSCEWI1088
        • MSCEWI1089
        • MSCEWI1090
        • MSCEWI1091
        • MSCEWI1092
        • MSCEWI1093
        • MSCEWI1094
        • MSCEWI1095
        • MSCEWI1096
        • MSCEWI1097
        • MSCEWI1098
        • MSCEWI1099
        • MSCEWI1100
        • MSCEWI1101
        • MSCEWI1102
        • MSCEWI1108
      • Informative Issues
        • MSCINF0001
        • MSCINF0002
        • MSCINF0003
        • MSCINF0004
        • MSCINF0005
        • MSCINF0006
        • MSCINF0007
        • MSCINF0008
    • Review Results
      • Output Code
      • Reports
        • Assessment Report
          • Overall Conversion Summary
          • SQL Conversion Summary
          • Scripts Line Conversion Summary
          • Object Conversion Summary
          • File and Object Level Breakdown - SQL Files
          • File and Object Level Breakdown - SQL Identified Objects
          • Scripts - Files
          • Scripts - Identified Objects
          • Schemas
          • Databases & Schemas
        • Top-Level Objects Report
        • Top-Level Queries Report
        • Issues Report
        • HTML Report
        • Missing Objects Report
        • Object References Report
        • Elements Report
    • How to Use SnowConvert with Docker
  • User Guide (Beta)
    • User Guide
    • How to install the tool
      • Linux
      • Windows
      • MacOS
    • How to update the tool
    • How to request an access code
    • What is a SnowConvert Project?
    • Supported Source Platforms
    • Assessment
      • Analyzing subfolders
    • Conversion
      • Converting subfolders
      • General Conversion Settings
      • Teradata Conversion Settings
      • Oracle Conversion Settings
      • SQL Server Conversion Settings
    • How to use the SnowConvert CLI
    • Additional Parameters
      • SnowConvert for SQL
      • Spark SnowConvert
    • Command Line Interface
  • FOR SQL LANGUAGES (BETA)
    • Release Notes
      • 2024
      • 2023
    • General Issues and Troubleshooting
  • General (Legacy)
    • Getting Started
      • Download and Access
      • Installation and Licensing
      • End User License Agreement
    • Contact Us
  • Function Reference
    • Teradata
      • CHAR2HEXINT_UDF
      • CHCKNUM_UDF
      • DATEADD_UDF
      • TIMESTAMP_DIFFERENCE_UDF
      • EXTRACT_TIMESTAMP_DIFFERENCE_UDF
      • TIME_DIFFERENCE_UDF
      • DATE_TO_INT_UDF
      • INT_TO_DATE_UDF
      • FIRST_DAY_OF_MONTH_ISO_UDF
      • DAYNUMBER_OF_MONTH_UDF
      • DAYNUMBER_OF_YEAR_UDF
      • COMPUTE_EXPAND_ON_UDF
      • EXPAND_ON_UDF
      • DIFFTTIME_PERIOD_UDF
      • ROW_COUNT_UDF
      • GETQUERYBANDVALUE_UDF
      • GETQUERYBANDVALUE_UDF
      • INSTR_UDF
      • INSTR_UDF
      • INSTR_UDF
      • INTERVAL_MULTIPLY_UDF
      • INTERVAL_ADD_UDF
      • INTERVAL_TO_MONTHS_UDF
      • INTERVAL_TO_SECONDS_UDF
      • JSON_EXTRACT_DOT_NOTATION_UDF
      • JSON_EXTRACT_UDF
      • JULIAN_TO_DATE_UDF
      • MONTHS_BETWEEN_UDF
      • NULLIFZERO_UDF
      • NVP_UDF
      • PERIOD_INTERSECT_UDF
      • PERIOD_OVERLAPS_UDF
      • QUARTERNUMBER_OF_YEAR_UDF
      • ROUND_DATE_UDF
      • SUBSTR_UDF
      • SUBSTR_UDF
      • TD_DAY_OF_CALENDAR_UDF
      • TD_DAY_OF_WEEK_UDF
      • TD_DAY_OF_WEEK_COMPATIBLE_UDF
      • TD_WEEK_OF_YEAR_UDF
      • TD_DAY_OF_WEEK_COMPATIBLE_UDF
      • FIRST_DAY_JANUARY_OF_ISO_UDF
      • YEAR_BEGIN_ISO_UDF
      • TD_YEAR_BEGIN_UDF
      • LAST_DAY_DECEMBER_OF_ISO_UDF
      • YEAR_END_ISO_UDF
      • TD_YEAR_END_UDF
      • TIMESTAMP_ADD_UDF
      • DAY_OF_WEEK_LONG_UDF
      • MONTH_NAME_LONG_UDF
      • TO_BYTES_HEX_UDF
      • CENTURY_UDF
      • DAYNAME_LONG_UDF
      • DAYNAME_LONG_UDF
      • DATE_LONG_UDF
      • FULL_MONTH_NAME_UDF
      • ISO_YEAR_PART_UDF
      • JULIAN_DAY_UDF
      • MONTH_SHORT_UDF
      • ROMAN_NUMERALS_MONTH_UDF
      • SECONDS_PAST_MIDNIGHT_UDF
      • WEEK_OF_MONTH_UDF
      • YEAR_PART_UDF
      • YEAR_WITH_COMMA_UDF
      • INSERT_CURRENCY_UDF
      • WRAP_NEGATIVE_WITH_ANGLE_BRACKETS_UDF
      • TRANSLATE_CHK_UDF
      • WEEK_NUMBER_OF_QUARTER_COMPATIBLE_UDF
      • WEEK_NUMBER_OF_QUARTER_ISO_UDF
      • WEEK_NUMBER_OF_QUARTER_COMPATIBLE_UDF
      • WEEKNUMBER_OF_MONTH_UDF
  • For Teradata
    • Introduction
    • Getting Started (LEGACY)
      • Training and Support
      • Code Extraction
      • Using SnowConvert
      • Review Results
        • Assessment.csv Report
        • Assessment.docx Report
        • Elements Report
        • Issues Report
        • Lineage Report
        • Output code
        • TopLevelObjects Report
    • Command Line Interface
      • Renaming feature
    • Code Extraction
    • Processing the code
      • Preprocess tasks
    • SQL Translation Reference
    • Issues and Troubleshooting
      • General Issues
      • MSCEWI2001
      • MSCEWI2002
      • MSCEWI2003
      • MSCEWI2004
      • MSCEWI2005
      • MSCEWI2006
      • MSCEWI2007
      • MSCEWI2008
      • MSCEWI2009
      • MSCEWI2010
      • MSCEWI2011
      • MSCEWI2012
      • MSCEWI2013
      • MSCEWI2014
      • MSCEWI2015
      • MSCEWI2016
      • MSCEWI2017
      • MSCEWI2018
      • MSCEWI2019
      • MSCEWI2020
      • MSCEWI2021
      • MSCEWI2022
      • MSCEWI2023
      • MSCEWI2024
      • MSCEWI2025
      • MSCEWI2026
      • MSCEWI2027
      • MSCEWI2028
      • MSCEWI2029
      • MSCEWI2030
      • MSCEWI2031
      • MSCEWI2032
      • MSCEWI2033
      • MSCEWI2034
      • MSCEWI2035
      • MSCEWI2036
      • MSCEWI2037
      • MSCEWI2038
      • MSCEWI2039
      • MSCEWI2040
      • MSCEWI2041
      • MSCEWI2042
      • MSCEWI2043
      • MSCEWI2044
      • MSCEWI2045
      • MSCEWI2046
      • MSCEWI2047
      • MSCEWI2049
      • MSCEWI2050
      • MSCEWI2051
      • MSCEWI2052
      • MSCEWI2053
      • MSCEWI2054
      • MSCEWI2055
      • MSCEWI2056
      • MSCEWI2057
      • MSCEWI2058
      • MSCEWI2059
      • MSCEWI2060
      • MSCEWI2061
      • MSCEWI2062
      • MSCEWI2063
      • MSCEWI2064
      • MSCEWI2065
      • MSCEWI2066
      • MSCEWI2067
      • MSCEWI2068
      • MSCEWI2069
      • MSCEWI2070
      • MSCEWI2071
      • MSCEWI2072
      • MSCEWI2073
      • MSCEWI2074
      • MSCEWI2075
      • MSCEWI2076
      • MSCEWI2077
      • MSCEWI2078
      • MSCEWI2079
      • MSCEWI2080
      • MSCEWI2081
      • MSCEWI2082
      • MSCEWI2083
      • MSCEWI2084
      • MSCEWI2085
      • MSCEWI2086
      • MSCEWI2087
      • MSCEWI2088
      • MSCEWI2089
      • MSCEWI2090
      • MSCEWI2091
    • Release Notes
      • 2024
      • 2023
      • 2022
      • 2021
      • 2020
      • Roadmap
    • Considerations
  • For Oracle
    • Introduction
    • Getting Started (LEGACY)
      • Using SnowConvert
      • Review Results
        • Output Code
        • Assessment Report
        • Issues Report
        • Top-Level Objects Report
    • Command Line Interface
    • Code Extraction
    • Processing the code
      • Preprocess tasks
    • Issues and Troubleshooting
      • General Issues
      • MSCEWI3001
      • MSCEWI3002
      • MSCEWI3003
      • MSCEWI3004
      • MSCEWI3005
      • MSCEWI3006
      • MSCEWI3007
      • MSCEWI3008
      • MSCEWI3009
      • MSCEWI3010
      • MSCEWI3011
      • MSCEWI3012
      • MSCEWI3013
      • MSCEWI3014
      • MSCEWI3015
      • MSCEWI3016
      • MSCEWI3017
      • MSCEWI3018
      • MSCEWI3019
      • MSCEWI3020
      • MSCEWI3021
      • MSCEWI3022
      • MSCEWI3023
      • MSCEWI3024
      • MSCEWI3025
      • MSCEWI3026
      • MSCEWI3027
      • MSCEWI3028
      • MSCEWI3029
      • MSCEWI3030
      • MSCEWI3031
      • MSCEWI3032
      • MSCEWI3033
      • MSCEWI3034
      • MSCEWI3035
      • MSCEWI3036
      • MSCEWI3037
      • MSCEWI3038
      • MSCEWI3039
      • MSCEWI3040
      • MSCEWI3041
      • MSCEWI3042
      • MSCEWI3043
      • MSCEWI3044
      • MSCEWI3046
      • MSCEWI3047
      • MSCEWI3048
      • MSCEWI3049
      • MSCEWI3050
      • MSCEWI3051
      • MSCEWI3052
      • MSCEWI3053
      • MSCEWI3054
      • MSCEWI3055
      • MSCEWI3056
      • MSCEWI3057
      • MSCEWI3058
      • MSCEWI3059
      • MSCEWI3060
      • MSCEWI3061
      • MSCEWI3062
      • MSCEWI3063
      • MSCEWI3064
      • MSCEWI3065
      • MSCEWI3066
      • MSCEWI3067
      • MSCEWI3068
      • MSCEWI3069
      • MSCEWI3070
      • MSCEWI3071
      • MSCEWI3072
      • MSCEWI3073
      • MSCEWI3074
      • MSCEWI3075
      • MSCEWI3076
      • MSCEWI3077
      • MSCEWI3078
      • MSCEWI3079
      • MSCEWI3080
      • MSCEWI3081
      • MSCEWI3082
      • MSCEWI3083
      • MSCEWI3084
      • MSCEWI3085
      • MSCEWI3086
      • MSCEWI3087
      • MSCEWI3088
      • MSCEWI3089
      • MSCEWI3090
      • MSCEWI3091
      • MSCEWI3092
      • MSCEWI3093
      • MSCEWI3094
      • MSCEWI3095
      • MSCEWI3096
      • MSCEWI3097
      • MSCEWI3098
      • MSCEWI3099
      • MSCEWI3100
      • MSCEWI3101
      • MSCEWI3102
      • MSCEWI3103
      • MSCEWI3104
      • MSCEWI3105
      • MSCEWI3106
      • MSCEWI3107
      • MSCEWI3108
      • MSCEWI3109
      • MSCEWI3110
      • MSCEWI3111
      • MSCEWI3112
      • MSCEWI3113
      • MSCEWI3114
      • MSCEWI3115
      • MSCEWI3116
      • MSCEWI3117
      • MSCEWI3118
      • MSCEWI3119
      • MSCEWI3120
      • MSCEWI3121
      • MSCEWI3122
      • MSCEWI3123
      • MSCEWI3124
      • MSCEWI3125
      • MSCEWI3126
      • MSCEWI3127
      • MSCEWI3128
      • MSCEWI3129
      • MSCEWI3130
      • MSCEWI3131
      • MSCEWI3132
      • MSCEWI3133
      • MSCEWI3135
    • Release Notes
      • 2023
      • 2022
      • 2021
      • 2020
      • Roadmap
    • SQL Translation Reference
  • FOR SQL SERVER
    • Introduction
    • Getting Started (LEGACY)
      • Training and Support
      • Arrange the Source Code
      • Review Results
        • Output Code
        • Assessment Report
        • Issues Report
        • TopLevelObjects Report
      • Using SnowConvert
    • Command Line Interface
    • Code Extraction
    • Translation Reference
    • Issues and Troubleshooting
      • General Issues
      • MSCEWI4001
      • MSCEWI4002
      • MSCEWI4003
      • MSCEWI4004
      • MSCEWI4005
      • MSCEWI4006
      • MSCEWI4007
      • MSCEWI4008
      • MSCEWI4009
      • MSCEWI4010
      • MSCEWI4011
      • MSCEWI4012
      • MSCEWI4013
      • MSCEWI4014
      • MSCEWI4015
      • MSCEWI4016
      • MSCEWI4017
      • MSCEWI4018
      • MSCEWI4019
      • MSCEWI4020
      • MSCEWI4021
      • MSCEWI4022
      • MSCEWI4023
      • MSCEWI4024
      • MSCEWI4025
      • MSCEWI4026
      • MSCEWI4027
      • MSCEWI4028
      • MSCEWI4029
      • MSCEWI4030
      • MSCEWI4031
      • MSCEWI4032
      • MSCEWI4033
      • MSCEWI4034
      • MSCEWI4035
      • MSCEWI4036
      • MSCEWI4037
      • MSCEWI4038
      • MSCEWI4039
      • MSCEWI4040
      • MSCEWI4041
      • MSCEWI4042
      • MSCEWI4043
      • MSCEWI4044
      • MSCEWI4045
      • MSCEWI4046
      • MSCEWI4047
      • MSCEWI4048
      • MSCEWI4049
      • MSCEWI4050
      • MSCEWI4051
      • MSCEWI4052
      • MSCEWI4053
      • MSCEWI4054
      • MSCEWI4055
      • MSCEWI4056
      • MSCEWI4057
      • MSCEWI4058
      • MSCEWI4059
      • MSCEWI4060
      • MSCEWI4061
      • MSCEWI4062
      • MSCEWI4063
      • MSCEWI4064
      • MSCEWI4065
      • MSCEWI4066
      • MSCEWI4067
      • MSCEWI4068
      • MSCEWI4069
      • MSCEWI4070
      • MSCEWI4071
      • MSCEWI4072
      • MSCEWI4073
      • MSCEWI4074
      • MSCEWI4075
    • Release Notes
      • 2023
      • 2022
      • 2021
      • Roadmap
  • For IBM DB2
    • Introduction
    • Getting Started (LEGACY)
      • Using SnowConvert
      • Review Results
        • Output
        • Reports
    • Command Line Interface
    • Translation Reference
    • Issues and Troubleshooting
      • MSCEWI5001
      • MSCEWI5002
      • MSCEWI5003
      • MSCEWI5004
      • MSCEWI5005
      • MSCEWI5006
      • MSCEWI5007
      • MSCEWI5008
      • MSCEWI5009
      • MSCEWI5010
      • MSCEWI5011
      • MSCEWI5012
      • MSCEWI5013
      • MSCEWI5014
      • MSCEWI5015
      • MSCEWI5016
      • MSCEWI5017
      • MSCEWI5018
      • MSCEWI5019
      • MSCEWI5020
      • MSCEWI5021
      • MSCEWI5022
    • Release Notes
      • 2022
  • For PostgreSQL
    • Introduction
    • Getting Started (LEGACY)
      • Using SnowConvert
      • Review Results
        • Output
        • Reports
    • Command Line Interface
    • Translation Reference
    • Issues and Troubleshooting
      • MSC-PG0000
      • MSC-PG0001
      • MSC-PG0002
      • MSC-PG0003
      • MSC-PG0004
      • MSC-PG0005
      • MSC-PG0006
      • MSC-PG0007
      • MSC-PG0008
      • MSC-PG0009
      • MSC-PG0010
      • MSC-PG0011
      • MSC-PG0012
      • MSC-PG0013
      • MSC-PG0014
      • MSC-PG0015
      • MSC-PG0016
      • MSC-PG0017
      • MSC-PG0018
      • MSC-PG0019
      • MSC-PG0020
      • MSC-PG0021
      • MSC-PG0022
      • MSC-PG0023
      • MSC-PG0024
      • MSC-PG0025
      • MSC-PG0026
      • MSC-PG0027
      • MSC-PG0028
    • Release Notes
      • 2022
  • For Greenplum
    • Introduction
    • Getting Started (LEGACY)
      • Using SnowConvert
      • Review Results
        • Output
        • Reports
    • Command Line Interface
    • Translation Reference
    • Issues and Troubleshooting
      • MSC-GP0000
      • MSC-GP0001
      • MSC-GP0002
      • MSC-GP0003
    • Release Notes
      • 2022
  • For Amazon RedShift
    • Introduction
    • Getting Started (LEGACY)
      • Using SnowConvert
      • Review Results
        • Output
        • Reports
    • Command Line Interface
    • Translation Reference
    • Issues and Troubleshooting
      • MSC-RS0004
      • MSC-RS0005
      • MSC-RS0011
      • MSC-RS0012
      • MSC-RS0013
      • MSC-RS0014
    • Release Notes
      • 2022
  • For Google BigQuery
    • Introduction
    • Getting Started (LEGACY)
      • Using SnowConvert
      • Review Results
        • Output
        • Reports
    • Command Line Interface
    • Translation Reference
    • Issues and Troubleshooting
      • General Issues
      • MSC-BQ0001
      • MSC-BQ0002
      • MSC-BQ0003
      • MSC-BQ0004
      • MSC-BQ0005
      • MSC-BQ0006
      • MSC-BQ0007
      • MSC-BQ0008
      • MSC-BQ0009
      • MSC-BQ0010
      • MSC-BQ0011
      • MSC-BQ0012
      • MSC-BQ0013
      • MSC-BQ0014
      • MSC-BQ0015
      • MSC-BQ0016
    • Release Notes
      • 2022
  • For Apache Hive
    • Introduction
    • Getting Started (LEGACY)
      • Using SnowConvert
      • Review Results
        • Output
        • Reports
    • Command Line Interface
    • Translation Reference
    • Issues and Troubleshooting
    • Release Notes
      • 2022
  • For Vertica
    • Introduction
    • Getting Started (LEGACY)
      • Using SnowConvert
      • Review Results
        • Output
        • Reports
    • Command Line Interface
    • Translation Reference
    • Issues and Troubleshooting
    • Release Notes
      • 2022
  • for Spark (Scala)
    • Snowpark Migration Accelerator for Spark Scala
  • FOR SPARK (PYTHON)
    • Snowpark Migration Accelerator for PySpark
  • Databricks workloads
    • Getting started
      • DBC files explode
Powered by GitBook
On this page
  • Numeric Data Operations
  • Calculation Precision
  • Integer-Integer Division
  • Banker Rounding
  • Decimal to Integer Conversion
  • Number without Precision/Scale
  • Truncation on INSERT for SQL DML Statements
  • Float Default Issue Example:
  • Float Data Aggregation
  • Other Considerations
  • Join Elimination
  • References
  1. For Teradata

Considerations

PreviousRoadmapNextIntroduction

Last updated 1 year ago

This is a deprecated version of the SnowConvert documentation, please visit the official site .

Numeric Data Operations

Calculation Precision

Calculations in Teradata round after every step based upon the data types in the operation. For decimal types, this will keep the larger precision used in the calculation. NUMBER data types will keep full precision. Since Snowflake stores everything as a number, it keeps full precision throughout the calculation which can result in different outcomes for any number type (decimal, integer, float...) other than NUMBER. This behavior is not modified through code conversion as it is typically not an intended desired result by the programmer.

Teradata: SELECT (1.00/28) * 15.00 = 0.60

Snowflake: SELECT (1.00/28) * 15.00 = 0.535710 = 0.54

Integer-Integer Division

Teradata performs a truncation or floor when dividing two integer values in, whereas Snowflake will ultimately perform a round operation. This scenario is accounted for in the automated code conversion by adding a TRUNC statement wherever this happens.

Teradata: SELECT (5/3) = 1

Snowflake: SELECT (5/3) = 1.6666666 = 2

Converted Snowflake: SELECT TRUNC(5/3) = 1

Banker Rounding

Teradata has the option to use Banker rounding by setting the parameter ROUNDHALFWAYMAGUP while Snowflake only uses normal rounding.

SQL
Teradata
Snowflake

CAST( 1.05 AS DECIMAL(9,1))

1.0

1.1

CAST( 1.15 AS DECIMAL(9,1))

1.2

1.2

CAST( 1.25 AS DECIMAL(9,1))

1.2

1.3

CAST( 1.35 AS DECIMAL(9,1))

1.4

1.4

CAST( 1.45 AS DECIMAL(9,1))

1.4

1.5

CAST( 1.55 AS DECIMAL(9,1))

1.6

1.6

CAST( 1.65 AS DECIMAL(9,1))

1.6

1.7

CAST( 1.75 AS DECIMAL(9,1))

1.8

1.8

CAST( 1.85 AS DECIMAL(9,1))

1.8

1.9

CAST( 1.95 AS DECIMAL(9,1))

2.0

2.0

Decimal to Integer Conversion

Teradata truncates the decimal values while Snowflake rounds to the nearest integer. This is accounted for in the conversion by inserting a TRUNC statement.

SQL
Teradata
Snowflake

CAST( 1.0 AS INTEGER)

1

1

CAST( 1.1 AS INTEGER)

1

1

CAST( 1.2 AS INTEGER)

1

1

CAST( 1.3 AS INTEGER)

1

1

CAST( 1.4 AS INTEGER)

1

1

CAST( 1.5 AS INTEGER)

1

2

CAST( 1.6 AS INTEGER)

1

2

CAST( 1.7 AS INTEGER)

1

2

CAST( 1.8 AS INTEGER)

1

2

CAST( 1.9 AS INTEGER)

1

2

Number without Precision/Scale

Number when defined without a scale/precision in Teradata allows for a flexible scale value for any given record from 0 to 38 provided the total precision never exceeds 38. Snowflake does not allow this and always has a fixed scale/precision. An example of numbers defined in a table this way:

CREATE MULTISET TABLE DATABASEXYZ.TABLE_NUMS
     (NUM_COL1 NUMBER(*),
      NUM_COL2 NUMBER,
      NUM_COL3 NUMBER(38,*));

In this table, the example of 2 values below that would not fit into a single Snowflake column but could be found in any of the columns shown in the table above in Teradata:

Value 1: 123,345,678,901,234,567,891,012.0123456789

Value 2: 123.12345678901234567890

These two values would require a fixed precision/scale of NUMBER(42, 20) which exceeds the maximum available in Snowflake precision of 38. Snowflake is currently developing the functionality for flexible precision/scale.

Truncation on INSERT for SQL DML Statements

Teradata will auto-truncate a string value upon insert if the string is too large to fit into the specified field. SnowConvert will convert fields on a like-to-like basis (ex: VARCHAR(20) -> VARCHAR(20)). If an ingestion process is relying on auto-truncation, that process will need to be adjusted manually to truncate the data using a LEFT() function. SnowConvert does not automatically add this as there are multiple implications to doing this across an entire code base.

Float Default Issue Example:

/* <sc-table> TABLE DUMMY.EXAMPLE </sc-table> */
/**** WARNING: SET TABLE FUNCTIONALITY NOT SUPPORTED ****/
CREATE TABLE DUMMY.PUBLIC.EXAMPLE (
LOGTYPE INTEGER,
OPERSEQ INTEGER DEFAULT 0,
RUNTIME FLOAT /**** ERROR: DEFAULT CURRENT_TIME NOT VALID FOR DATA TYPE ****/
);

Float Data Aggregation

Float data types are by definition approximations and as such different databases may aggregate differently due to how these approximations are handled at different points in the internal calculations of the database.

Other Considerations

Join Elimination

Snowflake does not currently eliminate un-required joins in any SQL that is run. It executes the SQL assuming that all objects included will potentially affect the result sets. Teradata has built-in join elimination features by leveraging primary-foreign key relationships that are defined in the DDL. The primary reason for this is to help avoid improperly written queries and is rarely an issue where code has not been written to intentionally take advantage of this feature. If a design decision was taken in views or DML to purposefully exploit this feature, code conversion cannot address this and re-architecting some of that solution design may be required.

Using max() over (order by) and other non-rank-related window functions

Teradata behavior and defaults:

Default: In the presence of an ORDER BY clause and the absence of a ROWS or ROWS BETWEEN clause, Teradata SQL window aggregate functions use ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING.

Snowflake behavior and defaults:

Default: In the presence of an ORDER BY clause and the absence of a ROWS or ROWS BETWEEN clause, Snowflake window aggregate functions use ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW.

Example:

Below is a TEST_WIN table containing salary information for different employees in different departments.

DEPT_NM
DEPT_NO
EMP_NO
SALARY

SALES

10

11

5000

SALES

10

12

6000

HR

20

21

1000

HR

20

22

2000

PS

30

31

7000

PS

30

32

9000

Executing the below code in Teradata returns the maximum salary of an employee across departments.

SELECT DEPT_NM, SALARY ,DEPT_NO,
MAX(SALARY) OVER ( ORDER BY DEPT_NO  ) AS MAX_DEPT_SALARY
FROM TEST_WIN;
DEPT_NM
SALARY
DEPT_NO
MAX_DEPT_SALARY

SALES

6000

10

9000

SALES

5000

10

9000

HR

2000

20

9000

HR

1000

20

9000

PS

7000

30

9000

PS

9000

30

9000

However, executing the same code (code converted by Snowflake-SnowConvert) produces different results (highlighted values), which are correct as per the defaults of Snowflake.

SELECT DEPT_NM, SALARY ,DEPT_NO,
MAX(SALARY) OVER ( ORDER BY DEPT_NO  ) AS MAX_DEPT_SALARY
FROM TEST_WIN;
DEPT_NM
SALARY
DEPT_NO
MAX_DEPT_SALARY

SALES

5000

10

6000

SALES

6000

10

6000

HR

1000

20

6000

HR

2000

20

6000

PS

7000

30

9000

PS

9000

30

9000

In order to produce the same results as in Teradata, it requires adding the ROWS/RANGE value as per the below code.

SELECT DEPT_NM, SALARY ,DEPT_NO,
MAX(SALARY) OVER ( ORDER BY DEPT_NO RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS MAX_DEPT_SALARY
FROM TEST WIN;
DEPT_NM
SALARY
DEPT_NO
MAX_DEPT_SALARY

SALES

5000

10

9000

SALES

6000

10

9000

HR

1000

20

9000

HR

2000

20

9000

PS

7000

30

9000

PS

9000

30

9000

The above addition of the RANGE/ROWS clause is to explicitly specify how the ORDER BY clause is working, similar behavior can also be achieved by omitting the order by clause altogether.

References

Snowflake: Teradata:

HERE
https://docs.snowflake.com/en/sql-reference/functions-analytic.html
https://docs.teradata.com/r/756LNiPSFdY~4JcCCcR5Cw/dIV_fAtkK3UeUIQ5_uucQw