type-conversion - 为什么 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] 找到)。
任何帮助,将不胜感激。谢谢。
解决方案
我找到了解决办法。在目标表的创建语句中,我将 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 数据流中发生了什么,但它确实运行成功并插入到表中。
推荐阅读
- python - 包含大时间循环的模型函数 (PYCM3)
- opencv - 如何使用 OpenCV 将点从 2D 投影到 3D?
- c++ - 学习阅读 ISO C++ 标准所需的逻辑格式和词汇的最佳方法是什么?
- django - 通过非主键问题连接序列化程序
- excel - 从更大的阵列中删除一个阵列?
- python - 如何使用 Pyinspect 获取 Win32 应用程序中的所有元素 ID?
- node.js - 为 Node.js 客户端应用程序持久化 Firebase 用户
- laravel - 在 Laravel 5.8 中的 Docker 内部迁移期间连接被拒绝
- javascript - 使用 dropzone.js,我想发送自定义 formData
- android - 有没有办法在 android 上使用开放的街道地图生成地理围栏?