Получить индекс элемента в U- SQL SqlArray? - PullRequest
1 голос
/ 08 июля 2020

Я хотел бы получить первый индекс, в котором в моем SqlArray появляется определенный элемент. Что-то вроде IndexOf (myArray, «word») вернет 0, если первый элемент в myArray - «word».

Есть способ сделать это? Я много раз искал документацию и понимаю, что SqlArray, вероятно, (?) Реализует IEnumerable под капотом, хотя в IEnumerable тоже нет функции IndexOf.

Если это важно, способ Я инициализировал свой массив:

DECLARE CONST @namesStr = "a,b,c,d";
DECLARE CONST @names = new SqlArray<string>( @namesStr.Split(',') );

1 Ответ

0 голосов
/ 08 июля 2020

Если вы хотите сделать это с помощью Scala и Databricks, вы можете просто использовать indexOf, например

val namesStr = "banana,apple,apricot"

// To array
val a = namesStr.split(",")

a.indexOf("apple")

Мои результаты:

Мои результаты

Если вам действительно нужно сделать это в U- SQL, тогда есть функция IndexOf, которую вы можете использовать в файле кода программной части, например, что-то вроде этого:

using Microsoft.Analytics.Interfaces;
using Microsoft.Analytics.Types.Sql;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;

namespace USQLworking2
{
    public class myFunctions
    {
        public static int someFunction(SqlArray<string> someString, string searchString)
        {
            //!!TODO add error / exception handling

            String[] stringArray = someString.ToArray();

            return Array.IndexOf(stringArray, searchString);

        }
    }
}

И U- SQL:

DECLARE @outputFile string = @"\output\output.csv";

DECLARE CONST @namesStr = "banana,apple,apricot";
DECLARE CONST @names = new SqlArray<string>( @namesStr.Split(',') );

@output =
    SELECT
        USQLworking2.myFunctions.someFunction ( @names, "apricot" ) AS shouldBe1
    FROM ( VALUES ( 0 ) ) AS x(y);


OUTPUT @output
TO @outputFile
USING Outputters.Csv();
...