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

时间:2017-02-08 09:48:08

标签: azure azure-data-lake u-sql

如果在 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 个答案:

答案 0 :(得分:3)

我决定使用function clickEvent(e) { // e = Mouse click event. var rect = e.target.getBoundingClientRect(); var x = e.clientX - rect.left; //x position within the element. var y = e.clientY - rect.top; //y position within the element. } 。 在视图中无法使用UDF(用户定义的函数)或UDO。

观点不能:

  • 包含用户定义的对象(例如UDF或UDO)。
  • 将在电话会议中内联。

此信息可在幻灯片27 U-SQL - Azure Data Lake Analytics for Developers

上找到

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

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

PROCEDURE

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

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)是默认参数)。

答案 1 :(得分:1)

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

(注意:会提供一个链接,但是当我这样做时,众神会不断删除我的回复。只需搜索"创建视图(U-SQL)"。)