2017-05-24 5 views
0

J'ai beaucoup (plus de 500) fichiers JSON que je suis en train de traiter dans ADLA en utilisant USQL et la première chose que je fais est d'extraire les données de chacun en utilisant Microsoft.Analytics.Samples.Formats.Json JsonExtractor. La plupart (80%?) Des dossiers vont bien, y compris les plus grands, mais certains échouent et je ne sais pas pourquoi. Voici un exemple minimal du code qui échoue:Quelle est la cause de la désérialisation JSON dans USQL pour atteindre une limite de chaîne?

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

DECLARE @input string="adl://abc.azuredatalakestore.net/data/whatever.json"; 

DECLARE @out string="adl://out.csv"; 

USING Microsoft.Analytics.Samples.Formats.Json; 

@data = 
EXTRACT SourceUrl string, 
     Title string, 
     Guest string, 
     PublishDate DateTime, 
     TranscriptionSections string, 
     Categories string, 
     filename string 
FROM @input 
USING new JsonExtractor(); 

OUTPUT @data 
TO @out 
USING Outputters.Tsv(outputHeader : true); 

Voici l'erreur de Azure:

**Inner Error:** 
ERROR 
E_RUNTIME_USER_STRINGTOOBIG 

MESSAGE 
String size 132991 exceeds the maximum allowed size of 131072. 

**Outer Error:** 
DESCRIPTION 
Vertex failure triggered quick job abort. Vertex failed: SV1_Extract_Partition[0] with error: Vertex user code error. 
RESOLUTION 
DETAILS 

Vertex SV1_Extract_Partition[0].v1 {8F874C31-C803-4C9A-9C3F-B594A62D7EAC} failed 

Error: 
Vertex user code error 

exitcode=CsExitCode_StillActive Errorsnippet= 
ERROR 
VertexFailedFast 
MESSAGE 
Vertex failed with a fail-fast error 

Voici un exemple du fichier que je utilise:

{ 
"SourceUrl":"http://www.unittest.org/test.html", 
"Title":"Unit Test File", 
"Guest":"Unit Test Guest", 
"PublishDate":"2017-05-15T00:00:00", 
"TranscriptionSections":[ 
    { 
    "SectionStartTime":"00:00:03", 
    "Sentences":[ 
     { 
     "Text":"Intro." 
     }, 
     { 
     "Text":"Sentence one" 
     }, 
     { 
     "Text":"Sentence two" 
     } 
    ] 
}, 
{ 
    "SectionStartTime":"00:04:46", 
    "Sentences":[ 
     { 
     "Text":"Sentence three" 
     }, 
     { 
     "Text":"Sentence four" 
     } 
    ] 
} 
], 
"Categories":null 
} 

Après Pour faire ce premier extrait, je lance une autre instruction USQL pour désérialiser la chaîne TranscriptionSections en plusieurs lignes. Peut-être que c'est l'erreur et il y a un moyen d'aplatir complètement le fichier JSON dans une instruction

Répondre

1

L'erreur que vous rencontrez est que l'un de la colonne de chaîne dépasse la taille maximale de la chaîne autorisée. La taille maximale de la chaîne autorisée est de 128 Ko. À ce stade, vous avez deux possibilités: 1. soit écrire votre propre extracteur json qui permette de diviser la colonne en deux colonnes. 2. utiliser le type de données byte [].