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;
我有一个主机 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;