USQL создает пользовательский тип таблицы со столбцами пользовательских данных - PullRequest
0 голосов
/ 08 мая 2018

Я определил пользовательский тип как

namespace AddOns{
[SqlUserDefinedType(typeof(JsonObjectFormatter))]
    public class JsonObject
    {
        public string Value {get;set;}
        ... // this is just a dummy representation 
    }
}

Я хочу определить табличную функцию, которая возвращает тип данных

REFERENCE ASSEMBLY [AddOns];

CREATE TYPE Insight.dbo.JsonRow
AS TABLE
(
        [Id] Guid,
        [Value] AddOns.JsonObject
);

Однако я получаю сообщение об ошибке

'E_CSC_USER_INVALIDCOLUMNTYPE: 'AddOns.JsonObject' cannot be used as column type.
Description:
The column type must be a supported scalar, complex or user defined type.
Resolution:
Ensure the column type is a supported type. For a user defined type, make sure the type is registered, the type name is fully qualified, and the required assembly is referenced by the script.'
*** Compile failed !

Я зарегистрировал соответствующую DLL в своем локальном экземпляре ADLA, и я могу получить доступ к типу в инструкциях процедур SELECT, когда сохраняю данные в файл. Но не может вернуть его как тип возврата TVF

1 Ответ

0 голосов
/ 22 мая 2018

Вы ограничены только встроенными типами при создании пользовательского типа. Начиная с страницы документации MS (последняя вставленная буквальная строка говорит только о встроенных типах):

U-SQL может именовать и регистрировать типы таблиц с помощью оператора CREATE TYPE.

Create_Type_Statement :=                                                                                 
    'CREATE' 'TYPE' ['IF' 'NOT' 'EXISTS'] Type_Identifier   
    'AS' Anonymous_Table_Type.
Type_Identifier := 
    DB_Object_Identifier.

Anonymous_Table_Type :=  
    'TABLE' '(' Column_Definition_List ')'.

Семантика элементов синтаксиса

...

Column_Definition_List

Определяет схему таблицы следующим образом:

Column_Definition_List :=                                                                           
     Column_Definition { ',' Column_Definition }.

column_definition

Определение столбца имеет вид

Column_Definition :=    
    Quoted_or_Unquoted_Identifier Built_in_Type.
...