Delen via


Transformatie parseren in toewijzingsgegevensstroom

VAN TOEPASSING OP: Azure Data Factory Azure Synapse Analytics

Tip

Probeer Data Factory uit in Microsoft Fabric, een alles-in-één analyseoplossing voor ondernemingen. Microsoft Fabric omvat alles, van gegevensverplaatsing tot gegevenswetenschap, realtime analyses, business intelligence en rapportage. Meer informatie over het gratis starten van een nieuwe proefversie .

Gegevensstromen zijn beschikbaar in Zowel Azure Data Factory als Azure Synapse Pipelines. Dit artikel is van toepassing op toewijzingsgegevensstromen. Als u geen ervaring hebt met transformaties, raadpleegt u het inleidende artikel Gegevens transformeren met behulp van een toewijzingsgegevensstroom.

Gebruik de transformatie Parseren om tekstkolommen in uw gegevens te parseren die tekenreeksen in documentvorm zijn. De huidige ondersteunde typen ingesloten documenten die kunnen worden geparseerd, zijn JSON, XML en tekst met scheidingstekens.

Configuratie

In het configuratiepaneel voor parseringstransformatie kiest u eerst het type gegevens in de kolommen die u inline wilt parseren. De parseringstransformatie bevat ook de volgende configuratie-instellingen.

Instellingen parseren

Kolom

Net als bij afgeleide kolommen en aggregaties kunt u met de eigenschap Kolom een bestaande kolom wijzigen door deze te selecteren in de vervolgkeuzelijst. U kunt ook hier de naam van een nieuwe kolom typen. In ADF worden de geparseerde brongegevens in deze kolom opgeslagen. In de meeste gevallen wilt u een nieuwe kolom definiëren waarmee het inkomende ingesloten documenttekenreeksveld wordt geparseerd.

Expression

Gebruik de opbouwfunctie voor expressies om de bron in te stellen voor het parseren. Het instellen van de bron kan net zo eenvoudig zijn als het selecteren van de bronkolom met de zelf-ingesloten gegevens die u wilt parseren, of u kunt complexe expressies maken om te parseren.

Voorbeelden van expressies

  • Brontekenreeksgegevens: chrome|steel|plastic

    • Uitdrukking: (desc1 as string, desc2 as string, desc3 as string)
  • JSON-brongegevens: {"ts":1409318650332,"userId":"309","sessionId":1879,"page":"NextSong","auth":"Logged In","method":"PUT","status":200,"level":"free","itemInSession":2,"registration":1384448}

    • Uitdrukking: (level as string, registration as long)
  • Geneste JSON-brongegevens: {"car" : {"model" : "camaro", "year" : 1989}, "color" : "white", "transmission" : "v8"}

    • Uitdrukking: (car as (model as string, year as integer), color as string, transmission as string)
  • XML-brongegevens: <Customers><Customer>122</Customer><CompanyName>Great Lakes Food Market</CompanyName></Customers>

    • Uitdrukking: (Customers as (Customer as integer, CompanyName as string))
  • Bron-XML met kenmerkgegevens: <cars><car model="camaro"><year>1989</year></car></cars>

    • Uitdrukking: (cars as (car as ({@model} as string, year as integer)))
  • Expressies met gereserveerde tekens: { "best-score": { "section 1": 1234 } }

    • De bovenstaande expressie werkt niet omdat het teken '-' best-score wordt geïnterpreteerd als een aftrekkingsbewerking. Gebruik in deze gevallen een variabele met haakjes-notatie om de JSON-engine de tekst letterlijk te interpreteren:
      var bestScore = data["best-score"];
      { bestScore : { "section 1": 1234 } }
      
  • Opmerking: als er fouten optreden bij het extraheren van kenmerken (met name @model) van een complex type, is een tijdelijke oplossing om het complexe type te converteren naar een tekenreeks, verwijdert u het @-symbool (met name replace(toString(your_xml_string_parsed_column_name.cars.car),'@',') en gebruikt u vervolgens de activiteit JSON-transformatie parseren.

Type uitvoerkolom

Hier configureert u het doeluitvoerschema van de parsering die in één kolom is geschreven. De eenvoudigste manier om een schema in te stellen voor uw uitvoer van parseren is door de knop Type detecteren in de rechterbovenhoek van de opbouwfunctie voor expressies te selecteren. ADF probeert het schema automatisch te detecteren vanuit het tekenreeksveld, dat u parseert en voor u instelt in de uitvoerexpressie.

Voorbeeld van parseren

In dit voorbeeld hebben we het parseren van het inkomende veld 'jsonString' gedefinieerd. Dit is tekst zonder opmaak, maar opgemaakt als een JSON-structuur. We gaan de geparseerde resultaten opslaan als JSON in een nieuwe kolom met de naam json met dit schema:

(trade as boolean, customers as string[])

Raadpleeg het tabblad Inspecteren en het voorbeeld van gegevens om te controleren of uw uitvoer correct is toegewezen.

Gebruik de activiteit Afgeleide kolom om hiërarchische gegevens te extraheren (dat wil gezegd your_complex_column_name.car.model in het expressieveld)

Voorbeelden

source(output(
		name as string,
		location as string,
		satellites as string[],
		goods as (trade as boolean, customers as string[], orders as (orderId as string, orderTotal as double, shipped as (orderItems as (itemName as string, itemQty as string)[]))[])
	),
	allowSchemaDrift: true,
	validateSchema: false,
	ignoreNoFilesFound: false,
	documentForm: 'documentPerLine') ~> JsonSource
source(output(
		movieId as string,
		title as string,
		genres as string
	),
	allowSchemaDrift: true,
	validateSchema: false,
	ignoreNoFilesFound: false) ~> CsvSource
JsonSource derive(jsonString = toString(goods)) ~> StringifyJson
StringifyJson parse(json = jsonString ? (trade as boolean,
		customers as string[]),
	format: 'json',
	documentForm: 'arrayOfDocuments') ~> ParseJson
CsvSource derive(csvString = 'Id|name|year\n\'1\'|\'test1\'|\'1999\'') ~> CsvString
CsvString parse(csv = csvString ? (id as integer,
		name as string,
		year as string),
	format: 'delimited',
	columnNamesAsHeader: true,
	columnDelimiter: '|',
	nullValue: '',
	documentForm: 'documentPerLine') ~> ParseCsv
ParseJson select(mapColumn(
		jsonString,
		json
	),
	skipDuplicateMapInputs: true,
	skipDuplicateMapOutputs: true) ~> KeepStringAndParsedJson
ParseCsv select(mapColumn(
		csvString,
		csv
	),
	skipDuplicateMapInputs: true,
	skipDuplicateMapOutputs: true) ~> KeepStringAndParsedCsv

Script voor gegevensstroom

Syntaxis

Voorbeelden

parse(json = jsonString ? (trade as boolean,
                                customers as string[]),
                format: 'json|XML|delimited',
                documentForm: 'singleDocument') ~> ParseJson

parse(csv = csvString ? (id as integer,
                                name as string,
                                year as string),
                format: 'delimited',
                columnNamesAsHeader: true,
                columnDelimiter: '|',
                nullValue: '',
                documentForm: 'documentPerLine') ~> ParseCsv