适用于: Azure 数据工厂
Azure 数据工厂  Azure Synapse Analytics
 Azure Synapse Analytics
本文概述了如何使用 Azure 数据工厂或 Synapse Analytics 管道中的复制活动从/向 Azure Database for MySQL 复制数据,以及如何使用数据流转换 Azure Database for MySQL 中的数据。 有关详细信息,请阅读 Azure 数据工厂和 Synapse Analytics 的简介文章。
此连接器专用于
若要从位于本地或云中的通用 MySQL 数据库复制数据,请使用 MySQL 连接器。
先决条件
本快速入门需要下面提到的以下资源和配置作为起点:
- 具有公共访问或专用终结点的现有 Azure Database for MySQL 单一服务器或 MySQL 灵活服务器。
- 在 MySQL 服务器的网络页中“启用从 Azure 中的任何 Azure 服务到此服务器的公共访问”。 这样就可以使用数据工厂工作室。
支持的功能
此 Azure Database for MySQL 连接器支持以下功能:
| 支持的功能 | IR | 托管专用终结点 | 
|---|---|---|
| 复制活动(源/接收器) | (1) (2) | ✓ | 
| 映射数据流源(源/接收器) | ① | ✓ | 
| Lookup 活动 | (1) (2) | ✓ | 
① Azure 集成运行时 ② 自承载集成运行时
入门
若要使用管道执行复制活动,可以使用以下工具或 SDK 之一:
使用 UI 创建到 Azure Database for MySQL 的链接服务
使用以下步骤在 Azure 门户 UI 中创建一个到 Azure Database for MySQL 的链接服务。
- 浏览到 Azure 数据工厂或 Synapse 工作区中的“管理”选项卡并选择“链接服务”,然后单击“新建”: 
- 搜索“MySQL”,然后选择“Azure Database for MySQL 连接器”。   
- 配置服务详细信息、测试连接并创建新的链接服务。   
连接器配置详细信息
对于特定于 Azure Database for MySQL 连接器的数据工厂实体,以下部分提供有关用于定义这些实体的属性的详细信息。
链接服务属性
Azure Database for MySQL 链接服务支持以下属性:
| 属性 | 描述 | 必需 | 
|---|---|---|
| 类型 | type 属性必须设置为:AzureMySql | 是 | 
| connectionString | 指定连接到 Azure Database for MySQL 实例所需的连接信息。 还可以将密码放在 Azure 密钥保管库中,并从连接字符串中拉取 password配置。 有关更多详细信息,请参阅以下示例和在 Azure 密钥保管库中存储凭据一文。 | 是 | 
| connectVia | 用于连接到数据存储的集成运行时。 如果数据存储位于专用网络,则可以使用 Azure Integration Runtime 或自承载集成运行时。 如果未指定,则使用默认 Azure Integration Runtime。 | 否 | 
典型的连接字符串为 Server=<server>.mysql.database.chinacloudapi.cn;Port=<port>;Database=<database>;UID=<username>;PWD=<password>。 你可以根据自己的情况设置更多属性:
| 属性 | 描述 | 选项 | 必需 | 
|---|---|---|---|
| SSLMode | 此选项指定驱动程序在连接到 MySQL 时是否使用 TLS 加密和验证。 例如 SSLMode=<0/1/2/3/4> | 禁用(0)/ 首选(1) (默认) / 必需的(2)/ 验证_CA(3)/ 验证_身份(4) | 否 | 
| UseSystemTrustStore | 此选项指定是使用系统信任存储中的 CA 证书还是使用指定 PEM 文件中的 CA 证书。 例如 UseSystemTrustStore=<0/1>; | 已启用 (1) / 已禁用 (0) (默认) | 否 | 
示例:
{
    "name": "AzureDatabaseForMySQLLinkedService",
    "properties": {
        "type": "AzureMySql",
        "typeProperties": {
            "connectionString": "Server=<server>.mysql.database.chinacloudapi.cn;Port=<port>;Database=<database>;UID=<username>;PWD=<password>"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}
示例:在 Azure 密钥保管库中存储密码
{
    "name": "AzureDatabaseForMySQLLinkedService",
    "properties": {
        "type": "AzureMySql",
        "typeProperties": {
            "connectionString": "Server=<server>.mysql.database.chinacloudapi.cn;Port=<port>;Database=<database>;UID=<username>;",
            "password": { 
                "type": "AzureKeyVaultSecret", 
                "store": { 
                    "referenceName": "<Azure Key Vault linked service name>", 
                    "type": "LinkedServiceReference" 
                }, 
                "secretName": "<secretName>" 
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}
数据集属性
有关可用于定义数据集的各部分和属性的完整列表,请参阅数据集一文。 本部分提供 Azure Database for MySQL 数据集支持的属性列表。
要从 Azure Database for MySQL 复制数据,请将数据集的 type 属性设置为 AzureMySqlTable。 支持以下属性:
| 属性 | 描述 | 必需 | 
|---|---|---|
| 类型 | 数据集的 type 属性必须设置为:AzureMySqlTable | 是 | 
| tableName | MySQL 数据库中的表名。 | 否(如果指定了活动源中的“query”) | 
示例
{
    "name": "AzureMySQLDataset",
    "properties": {
        "type": "AzureMySqlTable",
        "linkedServiceName": {
            "referenceName": "<Azure MySQL linked service name>",
            "type": "LinkedServiceReference"
        },
        "typeProperties": {
            "tableName": "<table name>"
        }
    }
}
复制活动属性
有关可用于定义活动的各部分和属性的完整列表,请参阅管道一文。 本部分提供 Azure Database for MySQL 源和接收器支持的属性列表。
Azure Database for MySQL 用作源
若要从 Azure Database for MySQL 复制数据,复制活动的 source 节需要支持以下属性:
| 属性 | 描述 | 必需 | 
|---|---|---|
| 类型 | 复制活动 source 的 type 属性必须设置为:AzureMySqlSource | 是 | 
| 查询 | 使用自定义 SQL 查询读取数据。 例如: "SELECT * FROM MyTable"。 | 否(如果指定了数据集中的“tableName”) | 
| queryCommandTimeout | 查询请求超时前的等待时间。默认值为 120 分钟 (02:00:00) | 否 | 
示例:
"activities":[
    {
        "name": "CopyFromAzureDatabaseForMySQL",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<Azure MySQL input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "AzureMySqlSource",
                "query": "<custom query e.g. SELECT * FROM MyTable>"
            },
            "sink": {
                "type": "<sink type>"
            }
        }
    }
]
Azure Database for MySQL 作为接收器
将数据复制到 Azure Database for MySQL 时,复制活动的 sink 节支持以下属性:
| 属性 | 描述 | 必需 | 
|---|---|---|
| 类型 | 复制活动接收器的 type 属性必须设置为:AzureMySqlSink | 是 | 
| preCopyScript | 每次运行时将数据写入 Azure Database for MySQL 之前,为要执行的复制活动指定 SQL 查询。 可以使用此属性清除预加载的数据。 | 否 | 
| writeBatchSize | 当缓冲区大小达到 writeBatchSize 时,会将数据插入 Azure Database for MySQL 表。 允许的值为 integer(表示行数)。 | 否(默认值为 10,000) | 
| writeBatchTimeout | 超时之前等待批插入操作完成时的等待时间。 允许的值为 Timespan。 示例为 00:30:00(30 分钟)。 | 否(默认值为 00:00:30) | 
示例:
"activities":[
    {
        "name": "CopyToAzureDatabaseForMySQL",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<Azure MySQL output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "<source type>"
            },
            "sink": {
                "type": "AzureMySqlSink",
                "preCopyScript": "<custom SQL script>",
                "writeBatchSize": 100000
            }
        }
    }
]
映射数据流属性
在转换映射数据流中的数据时,可以从 Azure Database for MySQL 读取表,并且可以将数据写入表。 有关详细信息,请参阅映射数据流中的源转换和接收器转换。 可以选择使用 Azure Database for MySQL 数据集或内联数据集作为源和接收器类型。
源转换
下表列出了 Azure Database for MySQL 源支持的属性。 可以在“源选项”选项卡中编辑这些属性。
| 名称 | 描述 | 必需 | 允许的值 | 数据流脚本属性 | 
|---|---|---|---|---|
| 表 | 如果你选择“表”作为输入,则数据流会从数据集中指定的表提取所有数据。 | 否 | - | (仅适用于内联数据集) tableName | 
| 查询 | 如果你选择“查询”作为输入,请指定一个用来从源提取数据的 SQL 查询,这将替代在数据集中指定的任何表。 使用查询是一个好方法,它可以减少用于测试或查找的行数。 不支持 Order By 子句,但你可以设置完整的 SELECT FROM 语句。 还可以使用用户定义的表函数。 select * from udfGetData() 是 SQL 中的一个 UDF,它返回你可以在数据流中使用的表。 查询示例: select * from mytable where customerId > 1000 and customerId < 2000或select * from "MyTable"。 | 否 | 字符串 | 查询 | 
| 存储过程 | 如果选择“存储过程”作为输入,请指定要从源表读取数据的存储过程的名称,或选择“刷新”以请求服务发现过程名称。 | 是(如果选择“存储过程”作为输入) | 字符串 | procedureName | 
| 过程参数 | 如果选择“存储过程”作为输入,请按过程中设置的顺序为存储过程指定任何输入参数,或者选择“导入”以使用窗体 @paraName导入所有过程参数。 | 否 | Array | inputs | 
| 批大小 | 指定批大小,以将大型数据分成多个批。 | 否 | Integer | batchSize | 
| 隔离级别 | 选择下列隔离级别之一: - 读取已提交的内容 - 读取未提交的内容(默认) - 可重复的读取 - 可序列化 - 无(忽略隔离级别) | 否 | READ_COMMITTED READ_UNCOMMITTED REPEATABLE_READ SERIALIZABLE NONE | isolationLevel | 
Azure Database for MySQL 源脚本示例
在使用 Azure Database for MySQL 作为源类型时,关联的数据流脚本为:
source(allowSchemaDrift: true,
    validateSchema: false,
    isolationLevel: 'READ_UNCOMMITTED',
    query: 'select * from mytable',
    format: 'query') ~> AzureMySQLSource
接收器转换
下表列出了 Azure Database for MySQL 接收器支持的属性。 可以在“接收器选项”选项卡中编辑这些属性。
| 名称 | 描述 | 必需 | 允许的值 | 数据流脚本属性 | 
|---|---|---|---|---|
| Update 方法 | 指定数据库目标上允许哪些操作。 默认设置为仅允许插入。 若要更新、更新插入或删除行,需要进行“更改行”转换才能标记这些操作的行。 | 是 | true或false | deletable insertable updateable upsertable | 
| 键列 | 对于更新、更新插入和删除操作,必须设置键列来确定要更改的行。 后续的更新、更新插入和删除将使用你选取为密钥的列名称。 因此,你必须选取存在于接收器映射中的列。 | 否 | Array | 密钥 | 
| 跳过写入键列 | 如果你不希望将值写入到键列,请选择“跳过写入键列”。 | 否 | true或false | skipKeyWrites | 
| 表操作 | 确定在写入之前是否从目标表重新创建或删除所有行。 - 无:不会对表进行任何操作。 - 重新创建:将删除表并重新创建表。 如果以动态方式创建表,则是必需的。 - 截断:将删除目标表中的所有行。 | 否 | true或false | recreate 截断 | 
| 批大小 | 指定每批中写入的行数。 较大的批大小可提高压缩比并改进内存优化,但在缓存数据时可能会导致内存不足异常。 | 否 | Integer | batchSize | 
| 预处理和后处理 SQL 脚本 | 指定在将数据写入接收器数据库之前(预处理)和之后(后处理)会执行的多行 SQL 脚本。 | 否 | 字符串 | preSQLs postSQLs | 
提示
- 建议将包含多个命令的单个批处理脚本拆分为多个批处理。
- 只有返回简单更新计数的数据定义语言 (Data Definition Language, DDL) 和数据操作语言 (Data Manipulation Language, DML) 语句可作为批处理的一部分运行。 在执行批量操作中了解详细信息
- 启用增量提取:使用此选项告知 ADF 仅处理自上次执行管道以来已更改的行。 
- 增量列:使用增量提取功能时,必须选择要用作源表中水印的日期/时间或数字列。 
- 从头开始读取:使用增量提取设置此选项将指示 ADF 在首次执行具有增量提取的管道时读取所有行。 
Azure Database for MySQL 接收器脚本示例
在使用 Azure Database for MySQL 作为接收器类型时,关联的数据流脚本为:
IncomingStream sink(allowSchemaDrift: true,
    validateSchema: false,
    deletable:false,
    insertable:true,
    updateable:true,
    upsertable:true,
    keys:['keyColumn'],
    format: 'table',
    skipDuplicateMapInputs: true,
    skipDuplicateMapOutputs: true) ~> AzureMySQLSink
查找活动属性
若要了解有关属性的详细信息,请查看 Lookup 活动。
Azure Database for MySQL 的数据类型映射
从 Azure Database for MySQL 复制数据时,以下映射用于从 MySQL 数据类型映射到服务内部使用的临时数据类型。 若要了解复制活动如何将源架构和数据类型映射到接收器,请参阅架构和数据类型映射。
| Azure Database for MySQL 数据类型 | 临时服务数据类型 | 
|---|---|
| bigint | Int64 | 
| bigint unsigned | Decimal | 
| bit | Boolean | 
| bit(M), M>1 | Byte[] | 
| blob | Byte[] | 
| bool | Int16 | 
| char | String | 
| date | Datetime | 
| datetime | Datetime | 
| decimal | Decimal, String | 
| double | Double | 
| double precision | Double | 
| enum | String | 
| float | Single | 
| int | Int32 | 
| int unsigned | Int64 | 
| integer | Int32 | 
| integer unsigned | Int64 | 
| long varbinary | Byte[] | 
| long varchar | String | 
| longblob | Byte[] | 
| longtext | String | 
| mediumblob | Byte[] | 
| mediumint | Int32 | 
| mediumint unsigned | Int64 | 
| mediumtext | String | 
| numeric | Decimal | 
| real | Double | 
| set | String | 
| smallint | Int16 | 
| smallint unsigned | Int32 | 
| text | String | 
| time | TimeSpan | 
| timestamp | Datetime | 
| tinyblob | Byte[] | 
| tinyint | Int16 | 
| tinyint unsigned | Int16 | 
| tinytext | String | 
| varchar | String | 
| year | Int32 | 
相关内容
有关复制活动支持作为源和接收器的数据存储的列表,请参阅支持的数据存储。
 
              
              