是的,这可以使用内联功能 . This article显示了如何做到这一点 . 这是一个简单的例子:
@input = SELECT *
FROM (
VALUES
( (int)1, (string)"1/1/2017" ),
( (int)2, (string)"1/2/2017" ),
( (int)3, (string)"bad date" )
) AS x ( rn, someString );
// inline function example
@output =
SELECT *
FROM
(
SELECT *,
(
(Func<string, DateTime?>)
(dateString => // input_paramater
{
DateTime dateValue;
return DateTime.TryParse(dateString, out dateValue) ? (DateTime?)dateValue : (DateTime?)null;
}
)
) (someString) AS someDate
FROM @input
) AS x
WHERE someDate IS NOT NULL;
OUTPUT @output TO "/output/output.csv"
USING Outputters.Csv(quoting:false);
DROP PROCEDURE IF EXISTS dbo.usp_testCleanDate;
CREATE PROCEDURE dbo.usp_testCleanDate()
AS
BEGIN
REFERENCE ASSEMBLY USQLCSharpProject1;
@input = SELECT *
FROM (
VALUES
( (int)1, (string)"1/1/2017" ),
( (int)2, (string)"1/2/2017" ),
( (int)3, (string)"bad date" )
) AS x ( rn, someString );
@output =
SELECT *,
USQLCSharpProject1.Class1.tryParseDate(someString) AS x
FROM @input;
OUTPUT @output
TO "/output/output.csv"
USING Outputters.Csv(quoting : false);
END;
1
Using Function dt_TryParse_USQL
Using above code-behind and calling function. Function consumes a string and attempts to convert the string to a DateTime value using DateTime.TryParse. Using the Code-Behind above.
@employees =
SELECT * FROM
( VALUES
(1, "Noah", "2/16/2008"),
(2, "Sophia", "2/16/2008 12:15:12 PM"),
(3, "Liam", "16/02/2008 12:15:12"),
(4, "Amy", "2017-01-11T16:52:07"),
(5, "Justin", "")
) AS T(EmpID, EmpName, StartDate);
@result =
SELECT
EmpID,
EmpName,
ReferenceGuide_Examples.MyClass.dt_TryParse_USQL(StartDate) AS validated_StartDate
FROM @employees;
OUTPUT @result
TO "/Output/ReferenceGuide/DDL/Functions/dt_TryParse_USQL.csv"
USING Outputters.Csv(outputHeader: true);
3 回答
是的,这可以使用内联功能 . This article显示了如何做到这一点 . 这是一个简单的例子:
如果要将已创建的程序集用作U-SQL类项目并进行注册,则可以使用
REFERENCE ASSEMBLY
在存储过程中引用它:https://msdn.microsoft.com/en-us/azure/data-lake-analytics/u-sql/u-sql-functions
其他信息:Click here
要回答这部分问题:
对于存储过程,脚本不会向我的自定义C#代码添加任何程序集引用,或者在调用存储过程时添加它时未使用它 .
U-SQL函数和过程带有它们自己的静态上下文,并且不从调用上下文继承静态名称上下文 . 这允许独立于被调用的位置理解函数/过程的语义 .
因此,为了引用汇编代码,您需要在目录中注册程序集,并使用
REFERENCE ASSEMBLY
在过程内显式引用它 . 代码隐藏不应在程序中使用(因为程序存储以备将来使用) .