2017-05-24 2 views
0

J'ai un travail d'analyse de flux qui obtient les données d'une source externe (je n'ai pas un mot à dire sur la façon dont les données sont en cours de formatage). J'essaye d'importer les données dans mon lac de données, stockant comme JSON. Cela fonctionne bien, mais je veux aussi obtenir la sortie dans un fichier CSV, c'est là que j'ai des problèmes. Comme les données d'entrée ont un tableau comme colonne, lors de l'importation dans JSON, il les reconnaît et fournit les bonnes données, c'est-à-dire les place entre parenthèses [A, B, C], mais quand je l'utilise en CSV I obtenir la colonne représentée par le mot "Array". J'ai pensé que je le convertirais en XML, utiliserais STUFF et les obtiendrais dans une ligne, mais il n'aime pas utiliser une instruction SELECT dans une APPLICATION CROISEE.Stream Analytics GetArrayElements en tant que chaîne

Est-ce que quelqu'un a travaillé avec Stream Analytics en important des données dans CSV, qui a une colonne de tableau? Si oui, comment avez-vous réussi à importer les valeurs du tableau?

données de l'échantillon:

[ 
    {"GID":"10","UID":1,"SID":"5400.0","PG:["75aef","e5f8e"]}, 
    {"GID":"10","UID":2,"SID":"4400.0","PG:["75aef","e5f8e","6d793"]} 
] 

PG est la colonne que je suis en train d'extraire, donc devrait ressembler à la sortie CSV.

GID|UID|SID|PG 
10|1|5400.0|75aef,e5f8e 
10|2|4400.0|75aef,e5f8e,6d793 

C'est la requête que je utilise,

SELECT 
    D.GID , 
    D.UID , 
    D.SID , 
    A.ArrayValue 
FROM 
    dummy AS D 
    CROSS APPLY GetArrayElements(D.PG) AS A 

Comme vous pouvez l'imaginer, cela me donne des résultats dans ce format.

GID|UID|SID|PG 
10|1|5400.0|75aef 
10|1|5400.0|e5f8e 
10|2|4400.0|75aef 
10|2|4400.0|e5f8e 
10|2|4400.0|6d793 
+0

Je crois que vous pourriez le faire avec un javascript udf (récemment publié) mais je ne l'ai pas essayé moi-même. Ça vaut le coup d'oeil. –

+0

Merci @PeteM, j'ai suivi votre conseil. :) – PaulFrancis

Répondre

1

Comme Pete M dit, vous pouvez essayer de créer un JavaScript user-defined function pour convertir un tableau en une chaîne, puis vous pouvez appeler cette fonction définie par l'utilisateur dans votre requête.

fonction JavaScript définie par l'utilisateur:

function main(inputobj) { 
    var outstring = inputobj.toString(); 
    return outstring; 
} 

Appel UDF dans la requête:

SELECT 
    TI.GID,TI.UID,TI.SID,udf.extractdatafromarray(TI.PG) 
FROM 
    [TEST-SA-DEMO-BLOB-Input] as TI 

Résultat:

enter image description here

+0

C'est ce que j'ai fini par faire aussi. Merci :) – PaulFrancis