【发布时间】:2020-01-28 20:18:35
【问题描述】:
我的源表位于 Azure SQL Server 数据仓库中,有一个名为 Upline 的列,其数据类型为 varbinary(1000)。在位于同一 Azure SQL Server 数据仓库中的目标表中,数据类型和列名相同。我的问题出在填充目标表的 Azure 数据流中。
不是将数据插入到数据流中的接收器表中,而是在我的数据仓库中创建一个新表。这是正在创建的表的创建语句
CREATE TABLE [Common].[T_7be15bb497654f0c8eeb82459912f178]
(
[EmployeeSK] [int] NULL,
[EmployeeLastName] [nvarchar](max) NULL,
[EmployeeFirstName] [nvarchar](max) NULL,
[EmploymentStatus] [nvarchar](max) NULL,
[HireDate] [date] NULL,
[OriginalHireDate] [date] NULL,
[TerminationDate] [date] NULL,
[CurrentPosition] [nvarchar](max) NULL,
[PreviousPosition] [nvarchar](max) NULL,
[WorkAssignmentEffectiveStart] [date] NULL,
[Region] [nvarchar](max) NULL,
[District] [nvarchar](max) NULL,
[Site] [nvarchar](max) NULL,
[OnSiteDepartment] [nvarchar](max) NULL,
[DepartmentName] [nvarchar](max) NULL,
[ManagerDayForceEmployeeNumber] [nvarchar](max) NULL,
[Upline] [varbinary](max) NULL,
[Lvl] [int] NULL,
[dimStartDate] [date] NULL,
[dimEndDate] [date] NULL,
[dimIsCurrent] [int] NULL,
[dimHash] [nvarchar](max) NULL,
[r7ace46966877481a90d6f8039c6524b5] [int] NULL
)
从图片中可以看出(如果可以看到图片),该表为 Upline 列提供了 varbinary(max) 数据类型。为什么会这样?我怎样才能阻止它发生?当我将此列从源表和目标表中取出时,它可以成功运行。但是,我需要专栏。数据流具有以下活动:源、选择、派生列、代理键和接收器。它正在做非常简单的事情,并且派生列中的上线没有被更改。
这是来自运行数据流的管道的错误消息: “发现从 VarBinary(Max) 到 VarBinary(1000) 的隐式转换需要 ANSI 截断警告。不支持此操作。显式使用 CONVERT 函数来执行此请求。”派生列活动中没有转换函数,所以我无法执行它给出的建议。
列中数据的最大长度为 24(使用 Select len(max(Upline))FROM [source table] 找到)。
任何帮助将不胜感激。谢谢。
【问题讨论】:
-
ADF 使用 Polybase 将数据写入这些临时表。名称始终为 [{target_schema}].[T_{someGUID}]。这样做时,字符串字段总是被定义为 VARCHAR(MAX)。我不知道 VARBINARY 做了同样的事情,但它确实有意义。
-
您应该只看到这些表 A) 在 Polybase 执行期间或 B) 在数据流操作失败时作为残余。在这些情况下,它们可用于诊断数据问题。不幸的是,我对 VARBINARY 不够熟悉,无法就您的问题发生的原因提供更多见解。
标签: type-conversion azure-sql-data-warehouse