2017-02-08 4 views
1

Если пользовательская сборка C# используется в View, компилятор не может найти ссылку на пространство имен. Он работает, если сборка ссылается и вызывается внутри запроса, но не из представления.Пользовательские сборки, на которые не ссылаются в представлениях

Например, рассмотрим это 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. В Просмотров UDF (пользовательские функции) или UDOs не могут использоваться.

просмотров не может:

  • содержат определенные пользователем объекты (такие как UDF, или UDOs).
  • Будет встроен по вызову.

Эту информацию можно найти здесь на слайде 27 в U-SQL - Azure Data Lake Analytics for Developers

Было бы полезно, если бы это было упомянуто в U-SQL Language Reference Docs для 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 является параметром по умолчанию).

+0

Исправьте, и я отправлю билет, чтобы обновить документацию. Приятно видеть, что вы смогли найти информацию так быстро :) –

1

Thanks Mike & sponturious.Справочник по языку U-SQL был обновлен в CREATE VIEW (U-SQL) в разделе Query_Expression на официальном сайте U-SQL Language Reference

(Примечание: предоставил бы ссылку, но боги продолжают удалять мои ответы, когда я это сделаю Просто выполните поиск «CREATE VIEW (U-SQL)».)

Смежные вопросы