2017-02-08 8 views
1

ビューでカスタム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データベース内に作成し、ビューの下に格納されます。別のクエリビューを使用すると

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が、私は別のAを使用して試してみました異なる名前空間を持つssemblyと、私はまだ同じ問題があります。

私はVisualStudioの(ローカル)アカウントを使用してローカルでテストしています。

答えて

2

私はPROCEDUREを使用することに決めました。 In ビュー UDF(ユーザー定義関数)またはUDOは使用できません。

ビューができない:

  • は(例えばUDFのまたはのUDOのような)ユーザ定義オブジェクトを含みます。
  • お電話の際にインラインでお知らせします。

この情報は、これはViewsのためにU-SQL言語リファレンスドキュメントで言及された場合には参考になるU-SQL - Azure Data Lake Analytics for Developers

でスライド27にここで見つけることができます。

ビューとは異なり、プロシージャとテーブル値関数は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は、デフォルトのパラメータです)。

+0

正解です。私は書類を更新するためのチケットを発行します。あなたが情報をすばやく見つけることができたのを見てうれしいです:) –

1

ありがとうMike & sponturious。U-SQL言語リファレンスは、公式のU-SQL言語リファレンスサイトのQuery_ExpressionセクションのCREATE VIEW(U-SQL)で更新されました。

(注:リンクを提供しますが、神が私の応答を削除し続ける"CREATE VIEW(U-SQL)"を検索するだけです)

関連する問題