SnowConvert AI - Assessment Report

一般摘要

The purpose of this document is to provide guidance for users to understand the summary results from the SnowConvert AI conversion tools. It will guide through the different metrics returned and how these metrics can be used to determine the automation level achieved, and the amount of manual effort needed to make the output code into functionally equivalent Snowflake code.

图像

本文档中呈现的大部分概念在报告首页中已有解释。但是,以下是有关上图中最重要信息的进一步说明:

  • 总解析错误数:表示转换工具在转换过程中发现无法识别为语法正确的源语言元素的文本片段的次数。解析错误的影响可大可小。重要的是要确定受解析错误影响的 LOC 及其在总工作负载中的占比。有时,解析错误可能是由于编码问题或工作负载尚需预处理所致。

  • Code Conversion Rate: The conversion rate is the percentage of the total source code that was successfully converted by SnowConvert AI into functionally equivalent Snowflake code. Every time that the tool identifies not supported elements, i.e, fragments in the input source code that were not converted into Snowflake, this will affect the conversion rate.

  • Identified Objects: The count of all the Top Level DDL Objects ( Table, View, Procedure, etc.. ) that the SnowConvert AI identified. If there were a parsing error on an object, it wouldn't be an Identified Object.
    Example: The first objects from line #1 to line #6. There is evidently a parsing error, so the SnowConvert AI cannot identify that as an object.

转换率模式

如前所述,当元素被标记为不支持(由于解析错误或因为 Snowflake 中不支持该元素)时,转换率将受到影响。每个不支持的元素对转换率的影响程度取决于所选的代码单元,有两个单位可选:字符或行。

使用字符计算转换率

当选择代码字符时,输入源中的字符总量将代表要转换的总单位。因此,如果总共有 100 个字符,且其中只有一个不支持的元素包含 10 个字符,则转换率为 90%。使用字符计算转换率更为精确,因为只有属于不支持元素的字符才会受到影响,但是,人工计算和理解起来比较困难。

使用代码行计算转换率

当选择代码行(默认选项)时,输入源代码中的代码行数将代表要转换的总单位,而包含不支持元素的行将被 完全 视为不支持的代码单位。因此,如果将包含这 100 个字符的相同输入代码拆分为 5 行代码,并且不支持的元素仅在其中一行,则转换率为 80%;包含不支持元素的 整行 也被视为不支持。使用行进行计算的转换率更容易理解,但是不太准确,因为包含不支持元素的整行代码都会受到影响(即使同一行中有其他支持的元素)。

下一示例演示如何使用这两个指标计算转换率。

转换率示例

输入源代码

--Comment123
CREATE TABLE Table1(
 Prefix_Employee_Name CHAR(25),
 !ERROR_Col,
 Prefix_Employee_Sal DECIMAL(8))
Copy

The above code has exactly 100 code characters because whitespaces and line breaks are not considered code characters. The comment above Table1 belongs to the table and is part of those 100 characters. This is the output code that SnowConvert AI generates for this input.

输出源代码

--Comment123
CREATE OR REPLACE TABLE Table1 (
 Prefix_Employee_Name CHAR(25)
--                              ,
-- ** SSC-EWI-0001 - UNRECOGNIZED TOKEN ON LINE '4' COLUMN '2' OF THE SOURCE CODE STARTING AT '!'. EXPECTED 'Column Definition' GRAMMAR. LAST MATCHING TOKEN WAS ',' ON LINE '3' COLUMN '31'. FAILED TOKEN WAS '!' ON LINE '4' COLUMN '2'. CODE '15'. **
-- !ERROR_Col
           ,
 Prefix_Employee_Sal DECIMAL(8))
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;
Copy

表的第二列存在解析错误,因此这是一个不支持的元素。让我们来看看如何使用两种可用单元来影响转换率。

使用字符计算转换率

这是输入代码中字符的细分

--Comment123 /*12 code characters*/
CREATE TABLE Table1( /*18 code characters*/
 Prefix_Employee_Name CHAR(25), /*29 code characters*/
 !ERROR_Col, /*11 code characters*/
 Prefix_Employee_Sal DECIMAL(8)) /*30 code characters*/
Copy
  • 代码字符总数:100

  • 不支持的元素中的代码字符:10

  • **结果:90.00%

备注

请注意,第 4 行有 11 个字符,但只有 10 个字符被标记为不支持。这是因为解析恢复机制的工作原理。当解析器遇到错误时,它会将从错误位置起,直到下一个分隔符(在本例中为逗号)之间的所有字符视为错误的一部分。这意味着任何输入代码中不支持的字符数量在很大程度上取决于解析错误的类型。在某些情况下,解析器将能够恢复到接近实际错误的位置,但遗憾的是,在其他情况下,错误可能会吞噬大量代码。

使用代码行计算转换率

使用代码行作为单元的转换率更容易计算。

  • 代码总行数:5

  • 包含不支持元素的代码行:1

  • **结果:80%

LOC 转换率取决于代码的格式化方式

当使用代码行作为单元时,转换率将在很大程度上取决于输入代码的格式。例如,以下两个代码示例是等效的,但是在第一种情况下,所有代码都放在同一行中,在第二种情况下,代码拆分为 5 行代码

SELECT col1, !error_col FROM table1;
```
```none
SELECT
   col1,
   !error_col
 FROM
    table1;
Copy

请注意,SELECT 中引用的第二列存在错误,因为它以无效字符开头。在第一种情况下,由于整个代码都在同一行中,因此转换率为 0%。但在第二种情况下,由于代码是拆分的,因此只有一行代码会受到影响,因此转换率为 80%。

转换率差异

在不同的操作系统之间进行相同的迁移时,转换结果可能会有所不同。

之所以发生这种情况,是因为大多数时候,Microsoft Windows 在其文件中使用 CRLF 换行。这种格式使用字符 \ r\n,但 UNIXOS 仅使用 \n (LF)。 \ 由于这种格式差异,当代码处理器在读取输入文件时,它会将 CRLF 格式计为两个字符,而将 LF 文件中计为一个字符。这些计数差异会在转换率方面产生不同的结果,特别是在代码中存在的字符串表达式中。

为避免这个问题,您可以使用 Visual Studio Code 或类似工具来更改换行格式。

文件和对象级细分

SQL - 文件

文件

转换率

代码行数

对象总数

解析错误

SQL

42%

20

2

3

本部分提供所有 SQL 文件的总体评估摘要信息

  • 代码转换率:这是根据给定 SQL 文件的字符对转换率的估算。

  • 代码行数:给定 SQL 文件的代码行数。

  • 对象总数:给定 SQL 文件的已识别对象总数。

  • 解析错误:给定 SQL 文件的解析错误总数。

警告

未识别的对象也将计为 SQL 文件部分的解析错误

警告

代码转换率可能与已识别的转换率不同,因为前者也考虑了未识别对象的影响。

SQL - 已识别的对象

对象

转换率

代码行数

对象总数

解析错误

67%

5

1

1

视图

57%

7

1

1

过程

-

0

0

0

函数

不适用

不适用

不适用

不适用

备注

如果上表中列出了 N/A,则表示 Snowflake 不支持该对象类型,这很可能是由于架构原因。这些对象将在生成的代码中被注释掉,不会影响转换率。

备注

如果“转换率”字段的值为“-”,则表示当前迁移的文件集不包含指定对象的任何实例。

本节将展示所有已识别对象的评估信息,这些对象按 DDL 类型(如表、视图、过程等)分类整理。

警告

如果有解析器无法处理的代码,则整个对象将被视为 Unrecognized Object,,因此它不会出现在此处

  • 代码转换率:这是根据已识别对象(如表、视图、过程等)的字符对转换率的估算。

  • 代码行数:每类已识别对象的代码行数。

  • 对象总数:每类已识别对象的数量。

  • 解析错误:每类已识别对象中发生的解析错误的计数。

示例:在 源代码 中包含的 2 个表中,一个是未识别对象,另一个被成功识别。该表共 5 行代码,由于存在 1 个解析错误,所以其转换率为 75%。

问题分解

问题分解表

在此页面中,您将看到唯一问题的数量以及按严重程度降序排列的问题列表。

例如,对于给定的源代码,有 2 个与解析错误相关的严重问题,以及一个与 Not supported function 函数相关的中等严重性问题。

备注

只有中等/高/严重等级的错误才会影响当前的转换率。警告仅供参考。

语言: 中文