int.TryParse в U-SQL - PullRequest
       21

int.TryParse в U-SQL

1 голос
/ 21 июня 2019

Я пытаюсь проверить, можно ли интерпретировать строковую переменную в U-SQL SELECT как целое число, так что я пытаюсь использовать int.TryParse вместо «0» и «» со значением по умолчанию, равным двум, и всем, что указано выше 10 с 10. Вот код:

DECLARE @maxAvgkWh double = 100.00;
DECLARE @defaultM2 int = 90;
DECLARE @defaultPersons int = 2;


// Extracting installations and their information
@forDecisionTree =
    EXTRACT [InstallationId] string,
            [PrimaryHeatingType] string,
            [Persons] string,
            [SquareMeters] string,
            [LatestAvgDailykWh] double
    FROM "adl://some text file in azure data lake"
    USING Extractors.Tsv(skipFirstNRows : 1, silent : true);


// Making sure that NULLS and zeroes and abnormal values are replaced with default values
@forDecisionTreeHouseTypeReplNulls =
    SELECT  [InstallationId],
            [PrimaryHeatingType],
            (
                ! int.TryParse(Persons, out var _pers) || _pers <= 0 ?  
                    @defaultPersons :
                    _pers > 10 ?
                        10 :
                        _pers
            ).ToString() AS [Persons],
            (
                ! int.TryParse([SquareMeters], out var _m2) || _m2 <= 0 ?  
                    @defaultM2 :
                    _m2 > 500 ?
                        500 :
                        _m2
            ).ToString() AS [SquareMeters],
            [LatestAvgDailykWh]
    FROM @forDecisionTreeHouseType
    WHERE [LatestAvgDailykWh] < @maxAvgkWh;

Я получаю следующую ошибку:

Ошибка C # CS1003: синтаксическая ошибка, ',' ожидается

на токене '_pers', строка 108 рядом с ###:


...! int.TryParse ([Persons], out var ### _pers) || _pers <= 0? ... </p>

Ответы [ 2 ]

1 голос
/ 27 июня 2019

Спасибо wBob за ввод.Мне удалось написать что-то, что работает и заменяет пустые строки и значения по умолчанию на номера вне диапазона на основе вашего ввода.Вот окончательный код:

DECLARE @defaultPersons int = 2;

@forDecisionTreeHouseTypeReplNulls =
    SELECT  [InstallationId],
            [Persons],
                (   
                (Func<string, int?>)
                (inputString => // input_parameter
                    {
                        int _pers;
                        return ! int.TryParse([Persons], out _pers) || _pers <= 0 ?
                            @defaultPersons :
                            _pers > 10 ?
                                10 :
                                    _pers;
                    }
                )
             ) ([Persons]) AS [AdjPersons]
0 голосов
/ 24 июня 2019

TryParse не является одной из функций, которые вы можете вызвать напрямую. Он должен быть упакован как встроенная функция. Простой пример:

@output =
    SELECT FirstName,
               (
                (Func<string, int?>)
                (inputString =>  // input_paramater
                    { 
                        int outputValue;
                        return int.TryParse(inputString, out outputValue) ? (int?)outputValue : (int?)null;
                    }
                 )
            ) (Salary) AS someDate

    FROM @Employees;

Примеры здесь и здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...