首页 文章

U-SQL存储过程Datetime.Tryparse在哪里

提问于
浏览
0

有没有办法在U-SQL WHERE 条件下使用 DateTime.TryParse ?我正在Azure U-SQL目录中创建存储过程 .

简单的U-SQL脚本支持C#函数 .

对于存储过程,脚本不会向我的自定义C#代码添加任何程序集引用,或者在调用存储过程时添加它时未使用它 .

3 回答

  • 0

    是的,这可以使用内联功能 . 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);
    

    如果要将已创建的程序集用作U-SQL类项目并进行注册,则可以使用 REFERENCE ASSEMBLY 在存储过程中引用它:

    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);
    

    https://msdn.microsoft.com/en-us/azure/data-lake-analytics/u-sql/u-sql-functions

    其他信息:Click here

  • 0

    要回答这部分问题:

    对于存储过程,脚本不会向我的自定义C#代码添加任何程序集引用,或者在调用存储过程时添加它时未使用它 .

    U-SQL函数和过程带有它们自己的静态上下文,并且不从调用上下文继承静态名称上下文 . 这允许独立于被调用的位置理解函数/过程的语义 .

    因此,为了引用汇编代码,您需要在目录中注册程序集,并使用 REFERENCE ASSEMBLY 在过程内显式引用它 . 代码隐藏不应在程序中使用(因为程序存储以备将来使用) .

相关问题