2017-07-21 2 views
1

Je veux obtenir à partir de mes enregistrements json qui contiennent toujours le même tableau PartnerId et Name from users. J'essaye actuellement avec ce code:U-SQL Extraire des données de Json contenant Array

@jsonFile = 
    EXTRACT partnerId int, 
      users string 
    FROM @INPUT_FILE 
    USING new Microsoft.Analytics.Samples.Formats.Json.JsonExtractor(); 

@followingUsersArray = 
    SELECT partnerId, 
      Microsoft.Analytics.Samples.Formats.Json.JsonFunctions.JsonTuple(users) AS following_array 
    FROM @jsonFile; 

@followingUsers = 
    SELECT partnerId AS PartnerId, 
      following_array["name"] AS FriendName 
    FROM @followingUsersArray; 

Mais je n'obtiens aucun résultat. Voici mon exemple de fichier JSON:

{ 
    "partnerId": 2, 
    "users": [{ 
      "name": "Anna ROGOWSKA", 
      "profile_image_url": "http://pbs.twimg.com/profile_images/884844399338901504/0OYl8JA6_normal.jpg", 
      "created_at": "2012-09-30T19:52:15+02:00", 
      "location": "Sopot,Poland", 
      "id_str": "855093368" 
     }, 
     { 
      "name": "Anna BARAŃSKA", 
      "profile_image_url": "http://pbs.twimg.com/profile_images/884844399338901504/0OYl8JA6_normal.jpg", 
      "created_at": "2012-09-30T19:52:15+02:00", 
      "location": "Sopot,Poland", 
      "id_str": "855093368" 
     } 
    ] 
} 

Le résultat ce que je veux est: 2, "Anna Rogowska" 2, "Anna Baranska"

Répondre

3

Vous devriez tirer parti de la fonctionnalité CROSS APPLY EXPLODE de U-SQL.

J'ai testé avec votre fichier JSON et cela a fonctionné:

REFERENCE ASSEMBLY [Newtonsoft.Json]; 
REFERENCE ASSEMBLY [Microsoft.Analytics.Samples.Formats]; 

USING Microsoft.Analytics.Samples.Formats.Json; 

DECLARE @path string = @"C:\Users\testUser\Documents\Visual Studio 2015\Projects\USQL_Json\"; 
DECLARE @input string = @path + @"sample.json"; 
DECLARE @to string = @path + @"output.csv"; 

@jsonFile = 
EXTRACT partnerId int, 
     users string 
FROM @input 
USING new JsonExtractor(); 

@followingUsers = 
SELECT partnerId AS PartnerId, 
     JsonFunctions.JsonTuple(users).Values AS user_array 
FROM @jsonFile; 

@tabUsers = 
SELECT PartnerId, 
     JsonFunctions.JsonTuple(t_user)["name"] AS FriendName 
FROM @followingUsers 
    CROSS APPLY 
     EXPLODE(user_array) AS A(t_user); 


OUTPUT @tabUsers 
TO @to 
USING Outputters.Csv(); 

La sortie est:

2,"Anna ROGOWSKA" 
2,"Anna BARANSKA"