U-SQl 将@variables 声明为空

U-SQl declaring @variables as null

我有一个主机 table,我正在从几个我没有加入的源 table 中提取数据。

其中一个 table 没有其中一列,因此我想使用 'insert into' 语句将空值插入该列。为此,我正在尝试创建一个 @missing_column 变量。

DECLARE @missing_column string IS NULL;  // This does not work.

您如何建议这样做?我知道我可以将单词 "NULL" 写成一个字符串并将其插入。但是,如果它是小数,那将不适用于列。

U-SQL 使用 C# 类型系统,因此您需要使用 C# 语法定义类型和赋值。这意味着您将需要使用可空类型并分配正确键入的 null 值:

因为 string 已经是一个可以为 null 的类型,你可以简单地使用:

DECLARE @missing_column string = (string)null;

虽然如果您尝试使用 non-nullable 类型,例如 int,您需要在变量和 table 列中指定可为空的版本:

DECLARE @missing_column int? = (int?)null;

U-SQL DECLARE 语句的官方文档可以在 here.

找到

有了 re-read 您的问题,对于您的具体示例,您应该能够忽略 INSERT 语句中缺少的列。这将从分配的源 table 分配值,并保留额外的、未指定的目标列 null。为此,根据我上面写的内容,您显然需要在 table 列中有一个可为空的类型:

大师table定义:

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;