Как проанализировать строку со значениями, разделенными запятыми, в AWS IoT SQL?

Я пытаюсь проанализировать длинную строку со значениями, разделенными запятыми, такими как «широта, долгота, расстояние, высота». Строка на самом деле довольно длинная, и мне нужно получить каждое значение и сохранить полученные значения в разных столбцах в dynamodb. Я использую правило dyamodbv2. Я обнаружил, что полезными могут быть функции substring(String, Int [, Int]), length(String), indexof(String, String) и get().

Например, я получаю такие данные:

{
  LOCATION_DATA: "lat,long,distance,,elevation"
}

Вот что я сделал до сих пор,

//first value - 0 to next comma
substring(LOCATION_DATA, 0, indexof(LOCATION_DATA, ',')) as latitude,
//second value - substring starting from last substring to next comma
substring(substring(LOCATION_DATA, indexof(LOCATION_DATA, ',') +1 ) ,
              0,     
              indexof(substring(LOCATION_DATA, indexof(LOCATION_DATA, ',') +1 ), ',') 
) as longitude,
...

Но это становится слишком многословным, и переход к следующему значению, разделенному запятыми, становится все труднее. Есть ли способ преобразовать значения, разделенные запятыми, в массив, а затем получить их с помощью get(0), get(1)..? Таким образом мне нужно получить около 20 полей!

Кроме того, значения могут иметь разную длину, а некоторые поля могут быть пустыми, например, значение между «расстоянием, высотой» в примерах строк. Эти пустые значения можно игнорировать.

Насколько я знаю, я не могу хранить и создавать пользовательские функции или использовать любые другие функции, кроме тех, что указаны в http://docs.aws.amazon.com/iot/latest/developerguide/iot.-sql-functions.html.


person Parth Modi    schedule 11.04.2017    source источник


Ответы (1)


В rails вы можете преобразовать строку в массив на основе разделителя Пример

LOCATION_DATA = "lat,long,distance,,elevation"
myarray = LOCATION_DATA.split(',')

Затем вы можете использовать

myarray[0]="lat"
myarray[1]="long"
myarray[2]="distance"
myarray[3]=""
myarray[4]="elevation"

Вы также можете преобразовать эти строки в целое число или число с плавающей запятой как:

myarray[0].to_i
myarray[2].to_f

Надеюсь это поможет

person Mayank    schedule 11.04.2017
comment
Я не могу использовать рельсы, так как пытаюсь получить значения в правиле AWS IoT. Я должен использовать только функции AWS IoT SQL. - person Parth Modi; 11.04.2017