首页 > 解决方案 > 为什么 Azure 数据流将 varbinary(1000) 转换为 varbinary(max),我该如何防止这种情况发生?

问题描述

我的源表位于 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] 找到)。

任何帮助,将不胜感激。谢谢。

标签: type-conversionazure-sql-data-warehouse

解决方案


我找到了解决办法。在目标表的创建语句中,我将 varbinary(1000) 更改为 varbinary(max),最后,我替换了这个结尾:

WITH
(
    DISTRIBUTION = ROUND_ROBIN,
    CLUSTERED COLUMNSTORE INDEX
)
GO

有了这个:

WITH
(
    DISTRIBUTION = ROUND_ROBIN,
    HEAP
)
GO

现在,整个 create 语句如下所示:

CREATE TABLE [Common].[dimEmployee_temp]
(
    [EmployeeSK] [int] IDENTITY(1,1) NOT NULL,
    [DayForceEmployeeNumber] [nvarchar](255) NOT NULL,
    [ConaEmployeeNumber] [char](10) NULL,
    [EmployeeLastName] [nvarchar](255) NULL,
    [EmployeeFirstName] [nvarchar](255) NULL,
    [EmploymentStatus] [nvarchar](255) NULL,
    [HireDate] [date] NULL,
    [OriginalHireDate] [date] NULL,
    [TerminationDate] [date] NULL,
    [CurrentPosition] [nvarchar](255) NULL,
    [PreviousPosition] [nvarchar](255) NULL,
    [WorkAssignmentEffectiveStart] [date] NULL,
    [Region] [nvarchar](255) NULL,
    [District] [nvarchar](255) NULL,
    [Site] [nvarchar](255) NULL,
    [OnSiteDepartment] [nvarchar](255) NULL,
    [DepartmentName] [nvarchar](255) NULL,
    [UnionName] [nvarchar](255) NULL,
    [ManagerDayForceEmployeeNumber] [nvarchar](255) NULL,
    [Upline] [varbinary](max) NULL,
    [Lvl] [int] NULL,
    [dimStartDate] [date] NOT NULL,
    [dimEndDate] [date] NULL,
    [dimIsCurrent] [int] NOT NULL,
    [dimHash] [nvarchar](256) NULL
)
WITH
(
    DISTRIBUTION = ROUND_ROBIN,
    HEAP
)
GO

这不能帮助我了解 Azure 数据流中发生了什么,但它确实运行成功并插入到表中。


推荐阅读