Time to Mobilize
    Snowflake Database Migration Services

    Migrate Teradata to Snowflake

    Move to the #1 rated cloud data platform with
    Snowconvert, migrates Teradata to Snowflake


    Free Teradata to Snowflake Assessment Tool

    Save time and money.
    Ensure your migration is a success with Mobilize.Net.

    Migrating from one data warehouse to another is a painstaking, detail oriented process. It requires the right plan and the right tools, which you can learn more about by watching our co-webinar with Snowflake on ensuring successful migrations from Teradata to Snowflake. If you're looking for a solution for the entire migration process, check out Mobilize.Net's complete migration services. But if you're looking for a product that solves the hard problem in a migration from Teradata to Snowflake, Mobilize.Net SnowConvert for Teradata is the right solution.

    Mobilize.Net SnowConvert for Teradata

    Mobilize.Net SnowConvert for Teradata

    SnowConvert automates all pieces of the code conversion process. Whether it's DDL, DML, stored procedures or proprietary scripts like BTEQ or FastLoad, we've seen it all... and converted it all. As a close partner with Snowflake, Mobilize.Net creates functionally equivalent Snowflake code from the source Teradata code. SnowConvert is not a glorified find and replace or regex tool, but rather a tool that builds code understanding of the source by creating an abstract syntax tree (AST) and a complete symbol table. Watch our demo of SnowConvert for Teradata to see how it all works, and click on the button below to get access to our free assessment tool.

    Free Teradata to Snowflake Assessment Tool

    318.7 MM

    >318.7 million
    lines of code converted

     

    7.3 MM

    >7.3 million objects converted
    (Tables, Views, Procedures, Macros, BTEQ [Teradata])

    96.45%

    Average level of automation for initial workloads is 96.45%.

    99%

    Median level of automation for initial workloads is 99%.



    Target Conversion Architecture

    Mobilize.Net SnowConvert for Teradata converts Teradata SQL, sprocs, and proprietary scripts to the most functionally equivalent code in Snowflake. Specifically:

    • Teradata SQL (*.sql) statements converted to Snowflake SQL
    • Stored procedures (*.sql) converted to JavaScript
    • BTEQ files (*.bteq) converted to Python
    • Other supported extensions: Fastload (*.fl, *.fload) and Multiload(*.ml, *.mload)

    The following diagram illustrates the conversion architecture:

    Architecture Diagram Teradata to Snowflake

    Note that the source to target code pairs were developed in partnership with Snowflake Professional Services. As a result, you can expect the output to be as functionally equivalent in Snowflake as the original was in Teradata. 

    More than just DDL SQL Translation

    While DDL translation can sometimes pose challenges to your average migration company, it's really the stored procedures and scripts written in outdated scripting languages (such as BTEQ for Teradata) that get them stalled. Mobilize.Net automates the conversion of BTEQ as efficiently as with DDL written in SQL. As mentioned previously, we do not create glorified regex or find-and-replace tools. A complete understanding of each workload is created with a full symbol table and a comprehensive AST.  

    To illustrate this functional equivalence, here's a quick conversion example of a stored procedure written in Teradata. The source code is given here:

    -- Teradata Stored Procedure
    REPLACE PROCEDURE MY_DATABASE.DYNAMIC_RESULT_SETS()
    DYNAMIC RESULT SETS 2
    BEGIN
    DECLARE SQL_CMD_0, SQL CMD_1 VARCHAR(20000) DEFAULT ' ';
    DECLARE RESULT_SET_0 CURSOR WITH RETURN ONLY FOR FIRST_STATEMENT_0;
    DECLARE RESULT_SET_1 CURSOR WITH RETURN ONLY FOR FIRST_STATEMENT_1;

    --- MAIN ---
    SET SQL_CMD_0 = 'SEL * FROM MY_DATABASE.EMPLOYEE';
    SET SQL_CMD_1 = 'SEL * FROM MY_DATABASE.EMPLOYEE_PHONE_INFO';

    --- CURSORS ---
    PREPARE FIRST_STATEMENT_0 FROM SQL_CMD_0;
    OPEN RESULT_SET_0;

    PREPARE FIRST_STATEMENT_1 FROM SQL_CMD_1;
    OPEN RESULT_SET_1;
    END;
     

    And the output in Snowflake is done in embedded JavaScript inside of Snowflake's SQL:

    -- Snowflake Stored Procedure as JavaScript
    CREATE OR REPLACE PROCEDURE
    MY_DATABASE.PUBLIC.DYNAMIC_RESULT_SETS()

     RETURNS STRING
    LANGUAGE JAVASCRIPT
    EXECUTE AS CALLER
    AS
    $$
    var procname = `SNOWCONVERT.PUBLIC.DYNAMIC_RESULT_SETS`;
    var temptable_prefix, tablelist = [];
    var INSERT_TEMP = function (query,parameters) {
    if (!temptable_prefix) {
    var sql_stmt = `select current_session() || '_' || to_varchar(current_timestamp, 'yyyymmddhh24missss')`;
    var rs = snowflake.createStatement({
    sqlText : sql_stmt,
    binds : []
    }).execute();
    temptable_prefix = rs.next() && (procname + '_TEMP_' + rs.getColumnValue(1) + '_');
    }
    var tablename = temptable_prefix + tablelist.length;
    tablelist.push(tablename);
    var sql_stmt = `CREATE TEMPORARY TABLE ${tablename} AS ${query}`;
    var rs = snowflake.createStatement({
    sqlText : sql_stmt,
    binds : parameters
    });
    var rows = rs.execute();
    return [tablename,rs,rows];
    };
    {
    var SQL_CMD = ` `;
    var SQL_CMD_1 = ` `;
    var _RS, ROW_COUNT, _ROWS, MESSAGE_TEXT, SQLCODE, SQLSTATE, ERROR_HANDLERS, ACTIVITY_COUNT, INTO;
    var fixBind = function (arg) {
    arg = arg == undefined ? null : arg instanceof Date ? arg.toISOString() : arg;
    return arg;
    };
    var fetch = (count,rows,stmt) => (count && rows.next() && Array.apply(null,Array(stmt.getColumnCount())).map((_,i) => rows.getColumnValue(i + 1))) || [];
    var CURSOR = function (stmt,binds,withReturn) {
    var rs = {
    }, rows = {
    }, row_count = {
    }, opened = false;
    this.OPEN = function (usingParams) {
    try {
    if (usingParams) binds = usingParams;
    if (binds instanceof Function) binds = binds();
    binds = binds && binds.map(fixBind);
    if (stmt instanceof Function) stmt = stmt();
    if (withReturn) [_,rs,rows] = INSERT_TEMP(stmt,binds); else {
    rs = snowflake.createStatement({
    sqlText : stmt,
    binds : binds
    });
    rows = rs.execute();
    }
    row_count = rs.getRowCount();
    opened = true;
    } catch(error) {
    ERROR_HANDLERS && ERROR_HANDLERS(error);
    }
    }
    this.FETCH = function () {
    var res = fetch(row_count,rows,rs);
    if (opened) if (res.length > 0) {
    SQLCODE = 0;
    SQLSTATE = '00000';
    } else {
    SQLCODE = 7362;
    SQLSTATE = '02000';
    } else {
    SQLCODE = 7631;
    SQLSTATE = '24501';
    }
    };
    };
    var RESULTSET = new CURSOR(() => FIRSTSTATEMENT,[],true);
    var RESULTSET1 = new CURSOR(() => FIRSTSTATEMENT1,[],true);
    //------ MAIN --------
    SQL_CMD = `SELECT * FROM SNOWCONVERT.PUBLIC.EMPLOYEE`;
    SQL_CMD_1 = `SELECT * FROM SNOWCONVERT.PUBLIC.EMPLOYEE_PHONE_INFO`;
    //------ CURSORS --------
    var FIRSTSTATEMENT = SQL_CMD;
    RESULTSET.OPEN();
    var FIRSTSTATEMENT1 = SQL_CMD_1;
    RESULTSET1.OPEN();
    }
    return tablelist;

    $$;

    This is just one example of how Mobilize.Net automates the "hard problems" of sProcs and proprietary script conversions in a database migration. You can learn more about how Mobilize.Net fits code conversions into a complete strategy for migrating legacy data warehouses to Snowflake by visiting our database migration services page.

    TD_SF

    Upgrade your data warehouse today.

    Free Teradata to Snowflake Assessment Tool

    Performance
    goes up

    SnowConvert_ToTheCloud_Graphic
    Time to Mobilize
    Modernization Solutions

    Maintenance and cost go down

    Mobilize-Testimonials

    Mobilize.Net offers valuable technology and services that help customers easily modernize their legacy applications for use on today’s modern platforms and devices program at Microsoft.

    - Shawn Nandi, Sr Director, Cloud App Development, Data & AI Marketing

    “I am very pleased with the tool and your responsiveness. I have had at least 3 other aborted efforts to convert and hundreds of man-hours wasted. To get a clean compile after only 2 days is thrilling. I suspect that with about a week of effort, I can have a working .NET equivalent app.”

    - Scott Lee, President, Superior Labels

    We ran a proof of concept comparing the Visual Basic Upgrade Companion (VBUC) with other VB6 migration tools and we definitely preferred the way VBUC handled the conversion.

    - James Lewis Stevenson II – Software Design Engineer, GT Software

    “NTCNA Chassis Dynamics chose Mobilize.Net VBUC because the automated migration technology greatly sped up our move off VB6.”

    - Aaron Bickel, Senior Manager, Nissan NA

    “Mobilize tools create readable, maintainable, quality code,” said. “Mobilize uses familiar architecture and patterns which made it easy to immediately step into the code.”

    - Matt Gropel, Director of Technology at AgWorks Software

    Trusted by 80% of the Global 2000
    logo-IRS
    microsoft
    nissan
    CFM-materials
    logo-AgWorks