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