0

J'essaye d'analyser une longue chaîne avec des valeurs séparées par des virgules telles que "lat, long, distance, élévation". La chaîne est en fait assez longue et j'ai besoin de récupérer chaque valeur et d'enregistrer les valeurs récupérées dans différentes colonnes dans dynamodb. J'utilise la règle dyamodbv2. Les fonctions que j'ai trouvées utiles sont substring (String, Int [, Int]), length (String), indexof (String, String) et get().Comment analyser une chaîne avec des valeurs séparées par des virgules dans AWS IoT SQL?

Par exemple j'obtenir des données comme ceci:

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

Voici ce que je l'ai fait jusqu'à présent,

//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, 
... 

Mais cela devient trop bavard et passer à côté de valeurs séparées par des virgules de plus en plus difficile . Existe-t-il un moyen de convertir les valeurs séparées par des virgules en tableau puis de les récupérer avec get (0), get (1) ..? Je dois aller chercher 20 champs de cette façon!

De même, les valeurs peuvent être de longueur variable et certains champs peuvent être vides, tels que la valeur entre "distance, élévation" dans les exemples de chaînes. Ces valeurs vides peuvent être ignorées.

Pour autant que je sache, il est impossible de stocker et de créer des fonctions personnalisées ou d'utiliser toute autre fonction que celle fournie dans http://docs.aws.amazon.com/iot/latest/developerguide/iot-sql-functions.html.

Répondre

0

En rails, vous pouvez convertir une chaîne en tableau basé sur un séparateur Exemple

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

Ensuite, vous pouvez utiliser

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

Vous pouvez également convertir ces chaînes en entier ou flotter comme:

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

Espérons que cela aide

+0

Je ne peux pas utiliser de rails car j'essaie d'obtenir des valeurs dans la règle AWS IoT. Je dois utiliser les fonctions AWS IoT SQL uniquement. –