在复制活动中配置 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 源的事务锁定行为。 允许的值为:NoneRead committed、Read uncommittedRepeatable readSerializableSnapshot 如果未指定,则使用 None 隔离级别。 有关更多详细信息,请参阅 IsolationLevel 枚举

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

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

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

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

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

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

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

目的地

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

需要以下属性:

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

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

  • Copy 方法 选择要用于复制数据的方法。 可以选择 “复制”命令PolyBase批量插入Upsert。 以下列表描述了每个设置的配置:

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

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

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

      显示 PolyBase 设置的屏幕截图。

      • 允许 PolyBase:选择 PolyBase 时必须选中它。
      • 拒绝类型:指定 rejectValue 选项是文本值还是百分比。 允许的值为 “值 ”(默认值)和 “百分比”。
      • 拒绝值:指定在查询失败之前可以拒绝的行数或百分比。 在 CREATE EXTERNAL TABLE 的“参数”部分(Transact-SQL)中详细了解 PolyBase 的拒绝选项。 允许的值为 0(默认值)、1、2 等。
      • 拒绝示例值:确定 PolyBase 重新计算被拒绝行百分比之前要检索的行数。 允许的值为 1、2 等。如果选择 “百分比 ”作为拒绝类型,则需要此属性。
      • 使用类型默认值:指定当 PolyBase 从文本文件中检索数据时如何处理分隔文本文件中的缺失值。 从 CREATE EXTERNAL FILE FORMAT (Transact-SQL) 中的 Arguments 部分了解有关此属性的详细信息。 允许的值处于选中状态(默认值)或未选中状态。
    • 批量插入:使用 批量插入 将数据批量插入目标。

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

      • 大容量插入表锁:在对表执行大容量插入作时,使用此锁可提高复制性能,且没有来自多个客户端的索引。 从 BULK INSERT(Transact-SQL)了解详细信息。
    • Upsert:指定在将数据 upsert 到目标地时的写入行为设置组。

      显示 Upsert 设置的屏幕截图。

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

      • 大容量插入表锁:在对表执行大容量插入作时,使用此锁可提高复制性能,且没有来自多个客户端的索引。 从 BULK INSERT(Transact-SQL)了解详细信息。

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

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

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

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

  • 禁用性能指标分析:此设置用于收集指标,例如 DTU、DWU、RU 等,以便进行复制性能优化和建议。 如果担心此行为,请选中此复选框。 默认情况下,它未选中。

使用 COPY 命令直接复制

Azure Synapse Analytics COPY 命令直接支持 Azure Blob StorageAzure Data Lake Storage Gen2 作为源数据存储。 如果源数据符合本节中所述的条件,请使用 COPY 命令直接从源数据存储复制到 Azure Synapse Analytics。

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

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

    1. 对于 Parquet压缩类型 可以是 Nonesnappygzip
    2. 对于 DelimitedText
      1. 行分隔符:通过直接 COPY 命令将带分隔符的文本复制到 Azure Synapse Analytics 时,请显式指定行分隔符(\r; \n; 或 \r\n)。 仅当源文件的行分隔符 \r\n时,默认值(\r、\n或 \r\n)才有效。 否则,请为您的场景启用预备环境。
      2. Null 值 保留为默认值或设置为 空字符串 (“”)
      3. 编码 保留为默认值或设置为 UTF-8UTF-16
      4. 跳过行计数 保留为默认值或设置为 0。
      5. 压缩类型 可以是 Nonegzip
  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,服务会根据指定的分区选项和设置同时生成并运行四个查询,并且每个查询从 Azure Synapse Analytics 检索一部分数据。

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

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

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

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

例如,如果分区列“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”为“yes”。

表摘要

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

来源

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

目的地

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