如果在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 回答
我决定使用
PROCEDURE
. 在视图中无法使用UDF(用户定义的函数)或UDO .意见不能:
包含用户定义的对象(例如UDF或UDO) .
将在电话中内联 .
这些信息可以在幻灯片27上找到U-SQL - Azure Data Lake Analytics for Developers
如果在Views的U-SQL语言参考文档中提到这一点会很有帮助 .
与Views不同,过程和表值函数支持UDF,并且可以包括对程序集的引用:
然后只需从另一个查询中调用该过程:
ExtractTransactions(DEFAULT)
(其中DEFAULT
是默认参数) .谢谢Mike&sponturious . U-SQL语言参考已在CREATE VIEW(U-SQL)的官方U-SQL语言参考站点的Query_Expression部分下更新
(注意:会提供链接,但是当我这样做时,众神会继续删除我的回复 . 只需搜索“创建视图(U-SQL)” . )