2017-02-08 3 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를,하지만 난 또 다른 한개를 사용하여 시도 ssembly를 다른 네임 스페이스로 바꾸면 여전히 동일한 문제가 발생합니다.

VisualStudio에서 (로컬) 계정을 사용하여 로컬에서 테스트하고 있습니다.

답변

2

나는 PROCEDURE을 사용하기로 결정했습니다. 있음 보기 UDF (사용자 정의 함수) 또는 UDO를 사용할 수 없습니다.

조회 못해 :

  • (예 UDF에 또는 UDOs 같은) 사용자 정의 오브젝트를 포함한다.
  • 전화 문의시 인라인됩니다.

이 정보이이 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

감사합니다. 마이크 & sponturious.U-SQL 언어 참조는 공식 U-SQL 언어 참조 사이트의 Query_Expression 섹션 아래에있는 CREATE VIEW (U-SQL)에서 업데이트되었습니다.

(참고 : 링크를 제공하지만 신이 내가 할 때 내 응답을 계속 삭제합니다. . "CREATE VIEW (U-SQL)"에 대한 검색을 수행하십시오.