Using SnowConvert
On this page, you will find information about how to use SnowConvert. The configuration and settings, the conversion process, and some of the most common errors.
Before we get started, recall that we highly recommend that you go through our training labs in order to get the most out of SnowConvert.
When you first start Mobilize.Net SnowConvert, you will see the following screen (or one just like it depending on your target):
Initial screen
Each time you start SnowConvert, the program will check to see if you have any notifications. These will appear in the top right corner of the screen. If you do not have any notification, nothing will appear. The most common types of notifications that you will receive are listed below.
Mobilize.Net is constantly working to improve SnowConvert. If there is an update available, you will get a notification indicating that you may download the latest version. There will be an "Update" button in the notification, and you can download the newest version of SnowConvert by simply pressing that button. A download will automatically start. You do not need to enter new license information as that will be kept automatically. Once the download is complete, you will be prompted to run the installer. (You can see "Execute the Installer" above to learn more about installing SnowConvert.) The upgrade installation for SnowConvert will behave exactly as though you are downloading it for the first time, with the exception that you will not have to re-enter your license information.
When you launch the upgraded version of SnowConvert for the first time, it will prompt you to see the release notes about this latest version of SnowConvert. This will open your default browser and take you to the release notes section of our documentation site.
If you have a time-based license, you will receive notifications as you approach the end of your license period. These will come in three different stages:
- 1.The first notification will let you know that your license expires in 15 days.
- 2.The second will notify you when your license expires in 2 days.
- 3.You will get a final notification if you open SnowConvert and your license has expired indicating that you need to renew your license. Note that you will not be able to use the migrator if your license has expired.
You will be prompted to reach out to [email protected] by each of these notifications to renew your license.
If you are using a lines-of-code-based license, you will not get a notification when you try to run the migrator indicating that the following run will exceed your maximum lines of code. As with the time-based license, you will be prompted to reach out to [email protected] to renew or upgrade your license.
If you're not interested in changing any of the default settings, you can start the conversion process by simply clicking on the "Let's begin" button in the center of the window. If you do want to configure any of the settings first, you can choose File (in the top left of the application) -> Settings. That will bring up the following screen:

General settings
Note that you can also reach this screen from the input/output folder screen (described in the next section). Once you have started the conversion process, you can not change any of these settings unless you restart SnowConvert.
There are five pages in the Conversion Settings Window:
- General
- DB Object Names
- Prepare Code
- Format Conversion
- Convert to Snowflake Scripting
These pages are described in more detail below.
On the general page (as is shown above), there are three options you can select. Each is described below.
- Generate debug log: This allows you to specify if you want a debug log to be written while SnowConvert is performing the conversion. Note that you will get a general conversion log and various reports each time you run the tool. The debug log is very detailed and can be helpful in working through any critical errors that may have occurred during the conversion process. This log is set to be generated by default unless you change it here.
- Comment objects with missing dependencies: SnowConvert can comment out dependencies that are not created in the source code or it can provide a comment in the output code that declares that a given dependency is missing. The default setting is to provide a comment declaring that a dependency is missing, but the code will still be converted. An example is given below with one single view created without the declaration of any dependencies:REPLACE VIEW VIEW1 AS SELECT * FROM TABLE1;If you leave the default setting, this is the resulting code:/**** WARNING: MISSING DEPENDENT OBJECT "table1" ****/CREATE OR REPLACE VIEW PUBLIC.view1ASSELECT * FROM PUBLIC.table1;If you enable this option, then the resulting code will be:/**** WARNING: MISSING DEPENDENT OBJECT "table1" ****//*CREATE OR REPLACE VIEW PUBLIC.view1ASSELECT*FROM PUBLIC.table1;*/Note that SnowConvert uses an Abstract Syntax Tree (AST) to build relationships between each of the elements in the code you are converting. Due to this architecture, the more complete the codeset you put into SnowConvert, the more complete your output will be. As an example, if you have a table that is created in one .sql file and called in another, but you have not included the .sql file in the input folder... SnowConvert will still convert the input code, but will give you a "missing object warning" regarding the missing table as illustrated above. You could encounter some more serious errors if multiple dependencies are excluded, so please try to include the most complete version of your source code in the Input folder.
- Disable EWI comments generation: This option allows you to disable the generation of comments for Errors, Warnings, and Issues on the converted code. The default value for this setting is false because the generation of EWIs provides the user an overview of general problems and troubleshooting after the migration process. However, if the user is aware of it and wants a cleaner final code, this option can be enabled.
- Generate XML-tags for SQL statements in stored procedure (only available for migrations to JavaScript): This option allows you to generate xml-like tags for the following statements in Stored Procedures: SELECT, INSERT, CREATE, DELETE, UPDATE, DROP, MERGE. This feature is used for easy statements identification on the migrated code. Wrapping these statements within these XML-like tags allows for other programs to quickly find and extract them. The decorated code looks like this://<SQL_DELETEEXEC(DELETE FROM SB_EDP_SANDBOX_LAB.PUBLIC.USER_LIST,[])//SQL_DELETE!>
- Transform Period Data-Type definitions and their usages into two Date-Time fields holding the begin and end fields as separated values: Activating this flag will cause SnowConvert to transform any field of type period to be separated into two datetime fields, any use of period values in operations, functions or queries will also be transformed to use the two separated datetime fields instead of the original period value. Please consider the following example:CREATE TABLE table1 (col1 PERIOD(DATE));The result code for not using the flag is the following:CREATE TABLE PUBLIC.table1 (col1 VARCHAR(24) /*** MSC-WARNING - MSCEWI2053 - SNOWFLAKE DOES NOT SUPPORT THE PERIOD DATATYPE, ALL PERIODS ARE HANDLED AS VARCHAR INSTEAD ***/);Activating the flag will cause the code to be migrated like this:CREATE TABLE PUBLIC.table1 (col1_begin DATE,col1_end DATE /*** MSC-WARNING - MSCEWI2074 - PERIOD DATA TYPES ARE HANDLED AS TWO DATA FIELDS ***/);
- Set Encoding of the Input Files (Skip Auto Detection) SnowConvert tries to automatically detect the file encoding. However, it's not always possible to identify the correct encoding, and this can sometimes (rarely) cause an error. In such a scenario, you can manually select the file encoding for the files to process. Below are the encodings supported by .NET Core (the platform used to build SnowConvert):Descriptive NameNameCodeUS-ASCIIUS-ASCII20127Unicode (UTF-7)UTF-765000Unicode (UTF-8)UTF-865001UnicodeUTF-161200Unicode (Big Endian)UnicodeFFFE1201Unicode (UTF-32)UTF-3212000Unicode (UTF-32 Big Endian)UTF-32BE12001Western European (ISO)ISO-8859-128591If you have input code that is saved with Western European (or any other encoding) and you specify a different encoding in the dropdown menu, then you may get an error similar to the one below. Which, can be avoided by ensuring that you've selected the correct encoding (if you are selecting an encoding at all).:

Conversion Error
.png?alt=media&token=6ae496af-e72e-4f87-a00a-a352b4e2a784)
Object Name Customization screen.
On this page, you can set database or schema names that can be applied to the objects that are converted by SnowConvert. Snowflake uses the DATABASE.SCHEMA.OBJECT naming convention and Teradata generally uses the DATABASE.OBJECT naming convention, let's take for example the following code and then we will convert it with the available conversion options:
CREATE MULTISET TABLE TABLE1
(
COL1 NUMBER
);
CREATE MULTISET TABLE MYDB.TABLE2
(
COL1 NUMBER
);
REPLACE VIEW VIEW1 AS
SELECT * FROM TABLE1
UNION ALL
SELECT * FROM MYDB.TABLE2;
- Schema: If you'd prefer the Teradata database name to be used as the schema name, then you can specify a database name to be applied to the Snowflake output instead. If you specify a Schema Name
MyMobilizeSchema
, you will get the following converted code:
CREATE TABLE MyMobilizeSchema.TABLE1
(
COL1 NUMBER(38, 19)
);
CREATE TABLE MyMobilizeSchema.TABLE2
(
COL1 NUMBER(38, 19)
);
CREATE OR REPLACE VIEW MyMobilizeSchema.VIEW1
AS
SELECT * FROM MyMobilizeSchema.TABLE1
UNION ALL
SELECT * FROM MyMobilizeSchema.TABLE2;
- Database: And, if you specify a Database name
MyMobilizeDb
, you will get the following converted code:
CREATE TABLE MyMobilizeDb.PUBLIC.TABLE1
(
COL1 NUMBER(38, 19)
);
CREATE TABLE MyMobilizeDb.MYDB.TABLE2
(
COL1 NUMBER(38, 19)
);
CREATE OR REPLACE VIEW MyMobilizeDb.PUBLIC.VIEW1
AS
SELECT * FROM MyMobilizeDb.PUBLIC.TABLE1
UNION ALL
SELECT * FROM MyMobilizeDb.MYDB.TABLE2;
- None (default): With this option, no additional schemas or databases will be added to the input code. The output names will remain the same. As seen below:
CREATE TABLE TABLE1
(
COL1 NUMBER(38, 19)
);
CREATE TABLE MYDB.TABLE2
(
COL1 NUMBER(38, 19)
);
CREATE OR REPLACE VIEW VIEW1
AS
SELECT * FROM TABLE1
UNION ALL
SELECT * FROM MYDB.TABLE2;
- Use Existing Name Qualification: This is a flag, it is only available when a Schema or Database options above are selected. It preserves the name qualification from the input code, placing either Schemas or Databases only where they are missing. Opposite, when this flag is disabled, it will add Schemas or Databases everywhere, overwriting those that come in the input code. See the examples below where a new schema is included:
Use Existing Name Qualification Enabled
Use Existing Name Qualification Disabled
CREATE TABLE MyMobilizeSchema.TABLE1
(
COL1 NUMBER(38, 19)
);
CREATE TABLE MYDB.TABLE2
(
COL1 NUMBER(38, 19)
);
CREATE OR REPLACE VIEW MyMobilizeSchema.VIEW1
AS
SELECT * FROM MyMobilizeSchema.TABLE1
UNION ALL
SELECT * FROM MYDB.TABLE2;
CREATE TABLE MyMobilizeSchema.TABLE1
(
COL1 NUMBER(38, 19)
);
CREATE TABLE MYDB.MyMobilizeSchema.TABLE2
(
COL1 NUMBER(38, 19)
);
CREATE OR REPLACE VIEW MyMobilizeSchema.VIEW1
AS
SELECT * FROM MyMobilizeSchema.TABLE1
UNION ALL
SELECT * FROM MYDB.MyMobilizeSchema.TABLE2;
- Keep Teradata database as Snowflake data warehouse: This flag must be used with a custom Schema. When enabled the schema will be included as schema within the code migrated to Snowflake, and Teradata database will act as the Snowflake data warehouse. As shown below where
customSchema
will be included.
Input
Don't keep Teradata database
Keep Teradata database
SELECT * FROM databaseName.tableName;
SELECT * FROM customSchema.tableName;
SELECT * FROM databaseName.customSchema.tableName;

Prepare Code
On this page, you can choose to execute additional tasks that may prepare the code for better results. It is turned off by default.
This preprocessing step organizes the input files by top-level objects and creates a new file for each object. It also organizes the script files depending on the script type. For more information you can check Preprocess Tasks.

Format conversion settings
On this page, you will find several options to help customize some of the formattings of your conversion. As with the previous page.
- Format Conversion Settings: In Teradata, there is a feature of explicit cast conversion where one expression can be cast from one type to another type. For some explicit casting where the code doesn't indicate the format, Teradata uses default formats in order to parse the given cast value. However, some Teradata users may modify the default formats globally, so in this case, SnowConvert also provides you to specify those default formats.
- Example for default Timestamp format: (default is YYYY/MM/DD HH:MI:SS )-- TeradataSELECTCAST('2007-12-31 23:59:59.999999' AS TIMESTAMP(6) WITH TIME ZONE)FROM TABLE1;-- SnowflakeSELECTTO_TIMESTAMP_TZ('2007-12-31 23:59:59.999999', 'YYYY/MM/DD HH:MI:SS'),FROM PUBLIC.TABLE1;
- Example for default source TIMEZONE: (default is GMT-5 )-- TeradataSELECTCAST(TIME_COL AS TIMESTAMP(1) AT SOURCE TIME ZONE)-- SnowflakeSELECTCONVERT_TIMEZONE('GMT-5',TO_TIMESTAMP_LTZ(CURRENT_DATE || ' ' || TIME_COL))FROM SampleTable;
- Example for Character to Number default scale: (default is 10)-- TeradataSELECTCAST("123.233" AS FLOAT FORMAT 'ZZZ.Z') FROM TABLE1;