在复制活动中配置 Azure Synapse Analytics

本文概述了如何使用数据管道中的复制活动从/向 Azure Synapse Analytics 复制数据。

支持的配置

有关复制活动下每个选项卡的配置,请分别转到以下各部分。

常规

若要配置“常规”设置选项卡,请参阅常规”设置指导。

复制活动的“源”选项卡下的 Azure Synapse Analytics 支持以下属性。

显示“源”选项卡和属性列表的屏幕截图。

需要以下属性:

  • 数据存储类型:选择“外部”。

  • 连接:从连接列表中选择 Azure Synapse Analytics 连接。 如果连接不存在,则通过选择“新建”创建新的 Azure Synapse Analytics 连接。

  • 连接类型:选择“Azure Synapse Analytics”。

  • 使用查询:可以选择“表”、“查询”或“存储过程”来读取源数据。 以下列表介绍了每个设置的配置:

    • 表:如果选择此按钮,则从表中指定的表中读取数据。 从下拉列表中选择表,或选择“编辑”,手动输入架构和表名称

      显示表的屏幕截图。

    • 查询:指定使用自定义 SQL 查询读取数据。 示例为 select * from MyTable。 或选择铅笔图标以在代码编辑器中编辑。

      显示选择查询的屏幕截图。

    • 存储过程:使用从源表读取数据的存储过程的名称。 最后一个 SQL 语句必须是存储过程中的 SELECT 语句。

      显示存储过程设置的屏幕截图。

      • 存储过程名称:选中“编辑”时,选择存储过程或手动指定存储过程名称
      • 存储过程参数:选择“导入参数”以导入指定的存储过程中的参数,或通过选择“+新建”为存储过程添加参数。 允许的值为名称或值对。 参数的名称和大小写必须与存储过程参数的名称和大小写匹配。

在“高级”下,可以指定以下字段:

  • 查询超时(分钟):指定查询命令执行的超时,默认值为 120 分钟。 如果为此属性设置了参数,则允许的值是时间跨度,例如“02:00:00”(120 分钟)。

  • 隔离级别:指定 SQL 源的事务锁定行为。 允许的值包括:“无”、“读取已提交的内容”、“读取未提交的内容”、“可重复读取”、“可序列化”或“快照”。 如果未指定,则会使用 None 隔离级别。 有关更多详细信息,请参阅 IsolationLevel Enum

    显示隔离级别设置的屏幕截图。

  • 分区选项:指定用于从 Azure Synapse Analytics 加载数据的数据分区选项。 允许的值为:None(默认)、表的物理分区动态范围。 启用分区选项时(即该选项不为“无”),用于从 Azure Synapse Analytics 并行加载数据的并行度由复制活动上的并行复制设置控制。

    • None: 选择此设置则不使用分区。

    • 表的物理分区:如果要使用物理分区,请选择此设置。 将根据物理表定义自动确定分区列和机制。

    • 动态范围:如果要使用动态范围分区,请选择此设置。 使用启用了并行的查询时,则需要范围分区参数 (?DfDynamicRangePartitionCondition)。 示例查询:SELECT * FROM <TableName> WHERE ?DfDynamicRangePartitionCondition

      显示动态范围设置的屏幕截图。

      • 分区列名称:以整数类型、日期类型或日期/时间类型(intsmallintbigintdatesmalldatetimedatetimedatetime2datetimeoffset)指定源列的名称,范围分区将使用它进行并行复制。 如果未指定,系统会自动检测表的索引或主键并将其用作分区列。
      • 分区上限:指定分区范围拆分的分区列的最大值。 此值用于决定分区步幅,不用于筛选表中的行。 将对表或查询结果中的所有行进行分区和复制。
      • 分区下:指定分区范围拆分的分区列的最小值。 此值用于决定分区步幅,不用于筛选表中的行。 将对表或查询结果中的所有行进行分区和复制。
  • 其他列:添加其他数据列以存储源文件的相对路径或静态值。 后者支持表达式。 有关详细信息,请转到在复制期间添加其他列

目标

复制活动的“目标”选项卡下的 Azure Synapse Analytics 支持以下属性。

显示“目标”选项卡的屏幕截图。

需要以下属性:

  • 数据存储类型:选择“外部”。
  • 连接:从连接列表中选择 Azure Synapse Analytics 连接。 如果连接不存在,则通过选择“新建”创建新的 Azure Synapse Analytics 连接。
  • 连接类型:选择“Azure Synapse Analytics”。
  • 表选项:可以选择“使用现有”,“自动创建表”。 以下列表介绍了每个设置的配置:
    • 使用现有:从下拉列表中选择数据库中的表。 或者,选中“编辑”以手动输入架构和表名称
    • 自动创建表:它会自动在源架构中创建表(如果不存在)。

在“高级”下,可以指定以下字段:

  • 复制方法:选择要用于复制数据的方法。 可以选择“复制命令”、“PolyBase”、“批量插入”或“更新插入”。 以下列表介绍了每个设置的配置:

    • 复制命令:使用 COPY 语句将数据从 Azure 存储加载到 Azure Synapse Analytics 或 SQL 池。

      显示复制命令设置的屏幕截图。

      • 允许复制命令:选择“复制命令”时需要同时选中该命令
      • 默认值:为 Azure Synapse Analytics 中的每个目标列指定默认值。 属性中的默认值将覆盖数据仓库中设置的 DEFAULT 约束,标识列不能有默认值。
      • 其他选项:将直接在 COPY 语句的“With”子句中传递给 Azure Synapse Analytics COPY 语句的其他选项。 根据需要将值括在引号中,以符合 COPY 语句要求。
    • PolyBase:PolyBase 是一种高吞吐量机制。 使用它将大量数据加载到 Azure Synapse Analytics 或 SQL 池中。

      显示 Polybase 设置的屏幕截图。

      • 允许 PolyBase:选择 PolyBase 时需要同时选择该命令
      • 拒绝类型:指定 rejectValue 选项是文本值还是百分比。 允许的值为 Value(默认值)和 Percentage
      • 拒绝值:指定在查询失败之前可以拒绝的行数或百分比。 有关 PolyBase 的拒绝选项的详细信息,请参阅 CREATE EXTERNAL TABLE (Transact-SQL) 的“参数”部分。 允许的值为 0(默认值)、1、2 等。
      • 拒绝示例值:确定在 PolyBase 重新计算被拒绝行的百分比之前要检索的行数。 允许的值为 1、2 等。如果你选择“百分比”作为拒绝类型,则需要此属性。
      • 使用类型默认值:指定在 PolyBase 从文本文件中检索数据时如何处理带分隔符的文本文件中的缺失值。 有关此属性的详细信息,请参阅创建外部文件格式 (Transact SQL) 中的参数部分。 允许的值为“已选择”(默认)和“未选择”。
    • 批量插入:使用“批量插入”将数据批量插入目标

      显示批量插入设置的屏幕截图。

      • 批量插入表锁定:使用此方法可提高在不包含多个客户端索引的表上执行大容量插入操作期间的复制性能。 有关详细信息,请参阅 BULK INSERT (Transact-SQL)
    • 更新插入:想将数据更新插入目标时,为写入行为指定一组设置。

      显示更新插入设置的屏幕截图。

      • 键列:选择哪一列用于确定源中的行是否与目标中的行一致。

      • 批量插入表锁定:使用此方法可提高在不包含多个客户端索引的表上执行大容量插入操作期间的复制性能。 有关详细信息,请参阅 BULK INSERT (Transact-SQL)

  • 复制前脚本:指定每次运行时,复制活动将数据写入到目标表之前要执行的脚本。 此属性可用于清理预先加载的数据。

  • 写入批超时:指定超时前等待批插入操作完成的时间。允许的值为 timespan。 默认值为“00:30:00”(30 分钟)。

  • 写入批处理大小:指定每个批要插入到 SQL 表中的行数。 允许的值为 integer(行数)。 默认情况下,该服务根据行大小动态确定适当的批大小。

  • 最大并发连接:指定活动运行期间与数据存储建立的并发连接的上限。 仅在要限制并发连接时指定一个值。

  • 禁用性能指标分析:此设置用于收集复制性能优化的指标(如 DTU、DWU、RU 等)和建议。 如果对此行为有所担忧,请选中此复选框。 默认情况下,它处于未选中状态。

使用 COPY 命令直接复制

数据仓库 COPY 命令直接支持 Azure Blob 存储和 Azure Data Lake Storage Gen2 作为源数据存储。 如果源数据满足本部分所述的条件,请使用 COPY 命令从源数据存储直接复制到 Azure Synapse Analytics。

  1. 源数据和格式包含以下类型和身份验证方法:

    支持的源数据存储类型 支持的格式 支持的源身份验证类型
    Azure Blob 存储 带分隔符的文本
    Parquet
    匿名身份验证
    帐户密钥身份验证
    共享访问签名身份验证
    Azure Data Lake Storage Gen2 带分隔符的文本
    Parquet
    帐户密钥身份验证
    共享访问签名身份验证
  2. 可以设置以下格式设置:

    1. 对于 Parquet压缩类型可以是“”、“snappy”或“gzip”。
    2. 对于 DelimitedText
      1. 行分隔符:通过直接 COPY 命令将带分隔符的文本复制到 Azure Synapse Analytics 时,显式指定行分隔符(\r、\n 或 \r\n)。 仅当源文件的行分隔符为 \r\n 时,默认值(\r、\n 或 \r\n)才有效。 否则,请为方案启用暂存。
      2. Null 值保留为默认值或设置为“空字符串("")”。
      3. 编码保留为默认值或设置为“UTF-8”或“UTF-16”。
      4. 跳过行计数保留为默认值或设置为 0。
      5. 压缩类型可以是“”或“gzip”。
  3. 如果源是文件夹,则必须选中“递归”复选框。

  4. 未在“按上次修改时间筛选”、“前缀”、“启用分区发现”和“其他列”中指定“开始时间(UTC)”和“结束时间(UTC)”。

若要了解如何使用 COPY 命令将数据引入 Azure Synapse Analytics,请参阅此文

如果 COPY 命令最初不支持源数据存储和格式,请改为通过 COPY 命令功能来使用暂存副本。 它会自动将数据转换为 COPY 命令兼容格式,然后调用 COPY 命令以将数据加载到 Azure Synapse Analytics 中。

映射

对于“映射”选项卡配置,如果不将具有自动创建表的 Azure Synapse Analytics 应用为目的地,请转到映射

如果将具有自动创建表的 Azure Synapse Analytics 应用为目的地,则除了映射中的配置外,可以编辑目的地列的类型。 选择“导入架构”后,可以在目标中指定列类型。

例如,源中 ID 列的类型为 int,当映射到目的地列时,你可以将其更改为浮点类型。

映射目标列类型的屏幕截图。

设置

对于“设置”选项卡配置,请转到“设置”选项卡下的“配置其他设置”

从 Azure Synapse Analytics 进行并行复制

复制活动中的 Azure Synapse Analytics 连接器提供内置的数据分区,用于并行复制数据。 可以在复制活动的“源”表中找到数据分区选项。

启用分区复制时,复制活动将对 Azure Synapse Analytics 源运行并行查询,以按分区加载数据。 并行度由复制活动设置选项卡中的复制并行度控制。例如,如果将复制并行度设置为 4,则该服务会根据指定的分区选项和设置并行生成并运行 4 个查询,每个查询从 Azure Synapse Analytics 检索一部分数据。

建议同时启用并行复制和数据分区,尤其是从 Azure Synapse Analytics 加载大量数据时。 下面是适用于不同方案的建议配置。 将数据复制到基于文件的数据存储中时,建议将数据作为多个文件写入文件夹(仅指定文件夹名称),在这种情况下,性能优于写入单个文件。

方案 建议的设置
从包含物理分区的大型表进行完整加载。 分区选项:表的物理分区。

在执行期间,该服务将自动检测物理分区并按分区复制数据。

若要检查表是否有物理分区,可参考此查询
从不包含物理分区但包含用于数据分区的整数或日期时间列的大型表进行完整加载。 分区选项:动态范围分区。
分区列(可选):指定用于对数据进行分区的列。 如果未指定,将使用索引或主键列。
分区上限和分区下限(可选) :指定是否要确定分区步幅。 这不适用于筛选表中的行,表中的所有行都将进行分区和复制。 如果未指定,复制活动会自动检测这些值。

例如,如果分区列“ID”的值范围为 1 至 100,并且将此值的下限设置为 20、上限设置为 80,并行复制设置为 4,服务将按 4 个分区(分区的 ID 范围分别为 <=20、[21, 50]、[51, 80] 和 >=81)检索数据。
使用自定义查询从不包含物理分区但包含用于数据分区的整数或日期/日期时间列的表加载大量数据。 分区选项:动态范围分区。
查询SELECT * FROM <TableName> WHERE ?DfDynamicRangePartitionCondition AND <your_additional_where_clause>
分区列:指定用于对数据进行分区的列。
分区上限和分区下限(可选) :指定是否要确定分区步幅。 这不适用于筛选表中的行,查询结果中的所有行都将进行分区和复制。 如果未指定,复制活动会自动检测该值。

例如,如果分区列“ID”的值范围为 1 至 100,并且将此值的下限设置为 20、上限设置为 80,并行复制设置为 4,服务将按 4 个分区(分区的 ID 范围分别为 <=20、[21, 50]、[51, 80] 和 >=81)检索数据。

下面是针对不同场景的更多示例查询:
• 查询整个表:
SELECT * FROM <TableName> WHERE ?DfDynamicRangePartitionCondition
• 使用列选择和附加的 where 子句筛选器从表中查询:
SELECT <column_list> FROM <TableName> WHERE ?DfDynamicRangePartitionCondition AND <your_additional_where_clause>
• 使用子查询进行查询:
SELECT <column_list> FROM (<your_sub_query>) AS T WHERE ?DfDynamicRangePartitionCondition AND <your_additional_where_clause>
• 在子查询中使用分区查询:
SELECT <column_list> FROM (SELECT <your_sub_query_column_list> FROM <TableName> WHERE ?DfDynamicRangePartitionCondition) AS T

使用分区选项加载数据的最佳做法:

  • 选择独特的列作为分区列(如主键或唯一键),以避免数据倾斜。
  • 如果表具有内置分区,请使用名为“表的物理分区”分区选项来提升性能。
  • 请注意:Azure Synapse Analytics 一次最多可执行 32 个查询,将复制并行度设置得太大可能会导致 Synapse 限制问题。

检查物理分区的示例查询

SELECT DISTINCT s.name AS SchemaName, t.name AS TableName, c.name AS ColumnName, CASE WHEN c.name IS NULL THEN 'no' ELSE 'yes' END AS HasPartition
FROM sys.tables AS t
LEFT JOIN sys.objects AS o ON t.object_id = o.object_id
LEFT JOIN sys.schemas AS s ON o.schema_id = s.schema_id
LEFT JOIN sys.indexes AS i ON t.object_id = i.object_id
LEFT JOIN sys.index_columns AS ic ON ic.partition_ordinal > 0 AND ic.index_id = i.index_id AND ic.object_id = t.object_id
LEFT JOIN sys.columns AS c ON c.object_id = ic.object_id AND c.column_id = ic.column_id
LEFT JOIN sys.types AS y ON c.system_type_id = y.system_type_id
WHERE s.name='[your schema]' AND t.name = '[your table name]'

如果表具有物理分区,则会看到“HasPartition”为“是”。

表摘要

下表包含有关 Azure Synapse Analytics 中复制活动的详细信息。

Source

名称 描述 必选 JSON 脚本属性
数据存储类型 你的数据存储类型。 外部 /
Connection 与源数据存储的连接。 < 你的连接 > 连接
连接类型 源连接类型。 Azure Synapse Analytics /
使用查询 读取数据的方式。 • 表
• 查询
• 存储过程
• typeProperties(在 typeProperties ->source 下)
  - 架构
  - 表
• sqlReaderQuery
• sqlReaderStoredProcedureName
  storedProcedureParameters
  - 名称
  - 值
查询超时 查询命令执行的超时,默认值为 120 分钟。 timespan queryTimeout
隔离级别 SQL 源的事务锁定行为。 • 无
• 读取已提交的内容
• 读取未提交的内容
• 可重复读取
• 可序列化
• Snapshot
isolationLevel:
 
• ReadCommitted
• ReadUncommitted
• RepeatableRead
• 可序列化
• Snapshot
分区选项 用于从 Azure SQL 数据库加载数据的数据分区选项。 • 无
• 表的物理分区。
• 动态范围
  - 分区列名称
 - 分区上限
 - 分区下限
partitionOption:
 
• PhysicalPartitionsOfTable
• DynamicRange
  partitionSettings:
  - partitionColumnName
  - partitionUpperBound
  - partitionLowerBound
其他列 添加其他数据列以存储源文件的相对路径或静态值。 后者支持表达式。 • 姓名
• 值
additionalColumns:
• 名称
• 值

目标

名称 描述 必选 JSON 脚本属性
数据存储类型 你的数据存储类型。 外部 /
Connection 与目标数据存储的连接。 < 你的连接 > 连接
连接类型 目标连接类型。 Azure Synapse Analytics /
表选项 目标数据表选项。 • 使用现有
• 自动创建表
• typeProperties(在 typeProperties ->sink 下)
  - 架构
  - 表
• tableOption:
  - autoCreate
  typeProperties(在 typeProperties ->sink 下)
  - 架构
  - 表
复制方法 用于复制数据的方法。 • 复制命令
• Polybase
• 批量插入
• 更新插入
/
选择“复制命令”时 使用 COPY 语句将数据从 Azure 存储加载到 Azure Synapse Analytics 或 SQL 池中。 / 不是。
使用 COPY 时适用。
allowCopyCommand:true
copyCommandSettings
默认值 为 Azure Synapse Analytics 中的每个目标列指定默认值。 属性中的默认值将覆盖数据仓库中设置的 DEFAULT 约束,标识列不能有默认值。 <默认值> defaultValues:
  - columnName
  - defaultValue
其他选项 将直接在 COPY 语句的“With”子句中传递给 Azure Synapse Analytics COPY 语句的其他选项。 根据需要将值括在引号中,以符合 COPY 语句要求。 <其他选项> additionalOptions:
- <属性名称> : <value>
选择 PolyBase 时 PolyBase 是一种高吞吐量机制。 使用它将大量数据加载到 Azure Synapse Analytics 或 SQL 池中。 / 不是。
使用 PolyBase 时适用。
allowPolyBase:true
polyBaseSettings
拒绝类型 拒绝值的类型。 • 值
• 百分比
rejectType:
- 值
- 百分比
拒绝值 在查询失败之前可以拒绝的行数或百分比。 0(默认值)、1、2 等 rejectValue
拒绝示例值 确定在 PolyBase 重新计算被拒绝行的百分比之前要检索的行数。 1、2 等 指定“百分比”作为拒绝类型时则是这样 rejectSampleValue
使用类型默认值 指定在 PolyBase 从文本文件中检索数据时如何处理带分隔符的文本文件中的缺失值。 有关此属性的详细信息,请参阅 CREATE EXTERNAL FILE FORMAT (Transact-SQL) 中的参数部分 已选择(默认)或未选择。 useTypeDefault:
true(默认)或 false
选择“批量插入” 将数据批量插入目标。 / writeBehavior:插入
大容量插入表锁 使用此方法可提高在不包含多个客户端索引的表上执行大容量插入操作期间的复制性能。 有关详细信息,请参阅 BULK INSERT (Transact-SQL) 选中或未选中(默认) sqlWriterUseTableLock:
true 或 false(默认)
选择 Upsert 时 要将数据更新插入目标时,为写入行为指定一组设置。 / writeBehavior:更新插入
键列 指示哪一列用于确定源中的行是否与目标中的行一致。 <列名称> upsertSettings:
  - keys:< 列名 >
  interimSchemaName
大容量插入表锁 使用此方法可提高在不包含多个客户端索引的表上执行大容量插入操作期间的复制性能。 有关详细信息,请参阅 BULK INSERT (Transact-SQL) 选中或未选中(默认) sqlWriterUseTableLock:
true 或 false(默认)
复制前脚本 指定每次运行时,复制活动将数据写入到目标表之前要执行的脚本。 此属性可用于清理预先加载的数据。 < 复制前脚本 >
(string)
preCopyScript
写入批处理超时 超时前等待批插入操作完成的时间。允许的值为 timespan。 默认值为“00:30:00”(30 分钟)。 timespan writeBatchTimeout
写入批大小 每批要插入到 SQL 表中的行数。 默认情况下,该服务根据行大小动态确定适当的批大小。 < 行数 >
(整数)
writeBatchSize
最大并发连接数 活动运行期间与数据存储建立的并发连接的上限。 仅在要限制并发连接时指定一个值。 < 并发连接的上限 >
(整数)
maxConcurrentConnections
禁用性能指标分析 此设置用于收集复制性能优化的指标(如 DTU、DWU、RU 等)和建议。 如果对此行为有所担忧,请选中此复选框。 选择或取消选择(默认) disableMetricsCollection:
true 或 false(默认)