Sdílet prostřednictvím


Analýza transformace v mapování toku dat

PLATÍ PRO: Azure Data Factory Azure Synapse Analytics

Tip

Vyzkoušejte si službu Data Factory v Microsoft Fabric, řešení pro analýzy typu all-in-one pro podniky. Microsoft Fabric zahrnuje všechno od přesunu dat až po datové vědy, analýzy v reálném čase, business intelligence a vytváření sestav. Přečtěte si, jak začít používat novou zkušební verzi zdarma.

Toky dat jsou k dispozici ve službě Azure Data Factory i v kanálech Azure Synapse. Tento článek se týká mapování toků dat. Pokud s transformacemi začínáte, přečtěte si úvodní článek Transformace dat pomocí mapování toku dat.

Pomocí transformace parsování můžete analyzovat textové sloupce v datech, které jsou řetězce ve formuláři dokumentu. Aktuální podporované typy vložených dokumentů, které je možné analyzovat, jsou JSON, XML a text s oddělovači.

Konfigurace

Na konfiguračním panelu analýzy transformace nejprve vyberete typ dat obsažených ve sloupcích, které chcete analyzovat jako vložený. Transformace analýzy obsahuje také následující nastavení konfigurace.

Parsování nastavení

Column

Podobně jako odvozené sloupce a agregace je vlastnost Column tam, kde buď upravíte existující sloupec tak, že ho vyberete z rozevíracího výběru. Nebo můžete sem zadat název nového sloupce. ADF ukládá analyzovaná zdrojová data v tomto sloupci. Ve většině případů chcete definovat nový sloupec, který analyzuje pole řetězce příchozího vloženého dokumentu.

Výraz

Pomocí tvůrce výrazů nastavte zdroj pro analýzu. Nastavení zdroje může být stejně jednoduché jako jen výběr zdrojového sloupce s daty, která chcete analyzovat, nebo můžete vytvořit složité výrazy pro analýzu.

Příklady výrazů

  • Zdrojová řetězcová data: chrome|steel|plastic

    • Výraz: (desc1 as string, desc2 as string, desc3 as string)
  • Zdrojová data JSON: {"ts":1409318650332,"userId":"309","sessionId":1879,"page":"NextSong","auth":"Logged In","method":"PUT","status":200,"level":"free","itemInSession":2,"registration":1384448}

    • Výraz: (level as string, registration as long)
  • Zdrojová vnořená data JSON: {"car" : {"model" : "camaro", "year" : 1989}, "color" : "white", "transmission" : "v8"}

    • Výraz: (car as (model as string, year as integer), color as string, transmission as string)
  • Zdrojová data XML: <Customers><Customer>122</Customer><CompanyName>Great Lakes Food Market</CompanyName></Customers>

    • Výraz: (Customers as (Customer as integer, CompanyName as string))
  • Zdrojový KÓD XML s daty atributů: <cars><car model="camaro"><year>1989</year></car></cars>

    • Výraz: (cars as (car as ({@model} as string, year as integer)))
  • Výrazy s vyhrazenými znaky: { "best-score": { "section 1": 1234 } }

    • Výše uvedený výraz nefunguje, protože znak best-score "-" je interpretován jako operace odčítání. Pomocí proměnné s zápisem závorek v těchto případech řekněte modulu JSON, aby text interpretovat doslova:
      var bestScore = data["best-score"];
      { bestScore : { "section 1": 1234 } }
      
  • Poznámka: Pokud dojde k chybám extrahování atributů (konkrétně @model) z komplexního typu, alternativním řešením je převést komplexní typ na řetězec, odebrat symbol @ (konkrétně nahradit(toString(your_xml_string_parsed_column_name.cars.car),'@',') a pak použít transformační aktivitu PARSE JSON.

Typ výstupního sloupce

Tady je místo, kde nakonfigurujete cílové výstupní schéma z analýzy, která je zapsaná do jednoho sloupce. Nejjednodušší způsob, jak nastavit schéma pro výstup z analýzy, je vybrat tlačítko Zjistit typ v pravém horním rohu tvůrce výrazů. ADF se pokusí automaticky zjistit schéma z pole řetězce, které analyzujete a nastavíte ho ve výstupním výrazu.

Příklad analýzy

V tomto příkladu jsme definovali analýzu příchozího pole jsonString, což je prostý text, ale formátovaný jako struktura JSON. Analyzované výsledky uložíme jako JSON do nového sloupce s názvem json s tímto schématem:

(trade as boolean, customers as string[])

Zkontrolujte kartu kontroly a náhled dat a ověřte, že je výstup správně namapovaný.

Pomocí aktivity Odvozený sloupec extrahujte hierarchická data (tj. your_complex_column_name.car.model v poli výrazu).

Příklady

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

Skript toku dat

Syntaxe

Příklady

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