我有一个主表,我正在从两个源表中摄取数据,而我没有加入其中。
其中一个表中没有一个列,所以我想用'insert into‘语句将Nulls插入到这个列中。为此,我尝试创建一个@missing_column变量。
DECLARE @missing_column string IS NULL; // This does not work.你建议怎么做?我知道我可以将单词"NULL“写成字符串,并将其作为字符串插入。但如果列是小数,那就不适用了。
发布于 2019-05-29 09:11:13
U-SQL使用C#类型系统,因此需要使用C#语法定义类型和赋值。这意味着您需要使用可空类型并分配正确类型的null值:
由于string已经是一个可空类型,所以您可以简单地使用:
DECLARE @missing_column string = (string)null;虽然如果您试图使用非空类型(如int ),但是您需要在变量和表列中指定可空版本:
DECLARE @missing_column int? = (int?)null;关于U DECLARE语句的正式文档可以找到这里。
在重新阅读您的问题后,对于您的具体示例,您应该能够忽略INSERT语句中缺少的列。这将从指定的源表中赋值,并保留附加的、未指定的目标列null。要做到这一点,您显然需要在表列中有一个可空类型,这与我在上面所写的内容一致:
主表定义:
CREATE TABLE dbo.MasterTarget
(
Col1 Int,
Col2 string, // string is already nullable
Col3 DateTime?, // DateTime is not, so need to specify DateTime? that accepts null values
INDEX clx_Col1 CLUSTERED(Col1 ASC)
)
DISTRIBUTED BY HASH(Col1);所有列数据负载:
@src1 =
EXTRACT Col1 Int,
Col2 string,
Col3 DateTime
FROM "/SourceFile1.csv"
USING Extractors.Csv();
INSERT INTO dbo.MasterTarget
(
Col1,
Col2,
Col3
)
SELECT Col1,
Col2,
Col3
FROM @src1;缺少的列数据加载:
@src2 =
EXTRACT Col1 Int,
Col2 string
FROM "/SourceFile2.csv"
USING Extractors.Csv();
INSERT INTO dbo.MasterTarget
(
Col1,
Col2
)
SELECT Col1,
Col2
FROM @src2;https://stackoverflow.com/questions/56355941
复制相似问题