首页 文章

自定义程序集未在视图中引用

提问于
浏览
1

如果在View中使用自定义c#程序集,则编译器无法找到对命名空间的引用 . 如果在查询中引用和调用程序集但不从视图中调用它,则它可以工作 .

例如,请考虑使用此U-SQL脚本创建视图:正在使用的程序集在运行此查询之前在mylocaldb中注册,并且可以在任何脚本中访问 .

USE DATABASE mylocaldb;

REFERENCE ASSEMBLY [Newtonsoft.Json];
REFERENCE ASSEMBLY [Microsoft.Analytics.Samples.Formats];

USING Newtonsoft.Json;
USING Microsoft.Analytics.Samples.Formats.Json;

DROP VIEW IF EXISTS SearchAccountData;
CREATE VIEW MyView AS
EXTRACT
    UserId string,
    UserName string        
FROM "Data/mydata.json"
USING new Microsoft.Analytics.Samples.Formats.Json.JsonExtractor();

执行脚本后,视图将在mylocaldb数据库中创建并存储在Views下 .

在另一个查询中使用视图时:

USE DATABASE mylocaldb;
USE SCHEMA dbo;

REFERENCE ASSEMBLY [Newtonsoft.Json];
REFERENCE ASSEMBLY [Microsoft.Analytics.Samples.Formats];

USING Newtonsoft.Json;
USING Microsoft.Analytics.Samples.Formats.Json;

@foo= SELECT * FROM MyView;

OUTPUT @foo
TO  "/output/foo.csv"
USING Outputters.Csv();

USE SCHEMA dbo 不是必需的,因为如果没有使用其他模式,数据库默认为:)

编译器抛出一个错误:

E_CSC_USER_INVALIDCSHARP: C# error CS0234: The type or namespace name 'Samples' does not exist in the namespace 'Microsoft.Analytics' (are you missing an assembly reference?)

现在这可能与U-SQL附带的库发生冲突: Microsoft.Analytics ,但我尝试使用另一个具有不同命名空间的程序集,但我仍然遇到同样的问题 .

我正在使用VisualStudio中的(本地)帐户进行本地测试 .

2 回答

  • 3

    我决定使用 PROCEDURE . 在视图中无法使用UDF(用户定义的函数)或UDO .

    意见不能:

    • 包含用户定义的对象(例如UDF或UDO) .

    • 将在电话中内联 .

    这些信息可以在幻灯片27上找到U-SQL - Azure Data Lake Analytics for Developers

    如果在Views的U-SQL语言参考文档中提到这一点会很有帮助 .

    与Views不同,过程和表值函数支持UDF,并且可以包括对程序集的引用:

    CREATE PROCEDURE ExtractTransactions(@data_stream string = @"Data/{*}")
    AS BEGIN
    
        REFERENCE ASSEMBLY [Newtonsoft.Json];
        REFERENCE ASSEMBLY [Microsoft.Analytics.Samples.Formats];
    
        USING Newtonsoft.Json;
        USING Microsoft.Analytics.Samples.Formats.Json;
    
        @transactions =
            EXTRACT
                UserId string,
                UserName string        
            FROM @data_stream 
            USING new JsonExtractor();
    
        INSERT INTO ExtractedTransactions
        SELECT * FROM @transactions;
    END;
    

    然后只需从另一个查询中调用该过程:

    ExtractTransactions(DEFAULT) (其中 DEFAULT 是默认参数) .

  • 1

    谢谢Mike&sponturious . U-SQL语言参考已在CREATE VIEW(U-SQL)的官方U-SQL语言参考站点的Query_Expression部分下更新

    (注意:会提供链接,但是当我这样做时,众神会继续删除我的回复 . 只需搜索“创建视图(U-SQL)” . )

相关问题