Megosztás a következőn keresztül:


Átalakítás elemzése a leképezési adatfolyamban

A következőkre vonatkozik: Azure Data Factory Azure Synapse Analytics

Tipp.

Próbálja ki a Data Factoryt a Microsoft Fabricben, amely egy teljes körű elemzési megoldás a nagyvállalatok számára. A Microsoft Fabric az adattovábbítástól az adatelemzésig, a valós idejű elemzésig, az üzleti intelligenciáig és a jelentéskészítésig mindent lefed. Ismerje meg, hogyan indíthat új próbaverziót ingyenesen!

Az adatfolyamok az Azure Data Factoryben és az Azure Synapse Pipelinesban is elérhetők. Ez a cikk az adatfolyamok leképezésére vonatkozik. Ha még nem használta az átalakításokat, tekintse meg az adatok leképezési adatfolyam használatával történő átalakításáról szóló bevezető cikket.

Az Elemzés átalakítás használatával elemezheti az adatok szöveges oszlopait, amelyek sztringek a dokumentumformátumban. Az elemezhető beágyazott dokumentumok jelenlegi támogatott típusai a JSON, az XML és a tagolt szöveg.

Konfiguráció

Az elemzési átalakítási konfigurációs panelen először válassza ki azoknak az oszlopoknak az adattípusát, amelyeket beágyazottként szeretne elemezni. Az elemzési átalakítás a következő konfigurációs beállításokat is tartalmazza.

Elemzési beállítások

Oszlop

A származtatott oszlopokhoz és aggregátumokhoz hasonlóan az Oszlop tulajdonságban módosíthatja a meglévő oszlopokat úgy, hogy kiválasztja azt a legördülő választóból. Vagy itt beírhatja egy új oszlop nevét. Az ADF ebben az oszlopban tárolja az elemezt forrásadatokat. A legtöbb esetben egy új oszlopot szeretne definiálni, amely elemzi a bejövő beágyazott dokumentumsztringmezőt.

Expression

Az elemzés forrásának beállításához használja a kifejezésszerkesztőt. A forrás beállítása olyan egyszerű lehet, mint a forrásoszlop kijelölése az elemezni kívánt önálló adatokkal, vagy összetett kifejezéseket is létrehozhat elemzésre.

Mintakifejezések

  • Forrássztring-adatok: chrome|steel|plastic

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

    • Kifejezés: (level as string, registration as long)
  • Beágyazott JSON-adatok forrása: {"car" : {"model" : "camaro", "year" : 1989}, "color" : "white", "transmission" : "v8"}

    • Kifejezés: (car as (model as string, year as integer), color as string, transmission as string)
  • Forrás XML-adatok: <Customers><Customer>122</Customer><CompanyName>Great Lakes Food Market</CompanyName></Customers>

    • Kifejezés: (Customers as (Customer as integer, CompanyName as string))
  • Forrás XML attribútumadatokkal: <cars><car model="camaro"><year>1989</year></car></cars>

    • Kifejezés: (cars as (car as ({@model} as string, year as integer)))
  • Fenntartott karakterekkel rendelkező kifejezések: { "best-score": { "section 1": 1234 } }

    • A fenti kifejezés nem működik, mivel a "-" karaktert best-score kivonási műveletként értelmezi a rendszer. A JSON-motornak a szöveg szó szerinti értelmezéséhez használjon zárójeles jelölést tartalmazó változót:
      var bestScore = data["best-score"];
      { bestScore : { "section 1": 1234 } }
      
  • Megjegyzés: Ha olyan hibákba ütközik, @model) amikor attribútumokat nyer ki (konkrétan egy összetett típusból, a megkerülő megoldás az, hogy az összetett típust sztringgé alakítja, távolítsa el a @ szimbólumot (pontosabban: replace(toString(your_xml_string_parsed_column_name.cars.car),'@''''), majd használja a JSON-transzformációs tevékenység elemzését.

Kimeneti oszlop típusa

Itt konfigurálhatja a cél kimeneti sémát az egyetlen oszlopba írt elemzésből. A legegyszerűbben úgy állíthatja be a kimenet sémáját az elemzésből, ha a kifejezésszerkesztő jobb felső sarkában található "Típus észlelése" gombot választja. Az ADF megpróbálja automatikusan létrehozni a sémát a sztringmezőből, amelyet elemez, és beállít a kimeneti kifejezésben.

Példa elemzése

Ebben a példában meghatároztuk a bejövő "jsonString" mező elemzését, amely egyszerű szöveg, de JSON-struktúraként van formázva. Az elemzési eredményeket JSON-ként fogjuk tárolni egy új, "json" nevű oszlopban ezzel a sémával:

(trade as boolean, customers as string[])

A kimenet megfelelő leképezésének ellenőrzéséhez tekintse meg a vizsgálat lapot és az adatok előnézetét.

Hierarchikus adatok kinyerése a Származtatott oszlop tevékenység használatával (azaz your_complex_column_name.car.model a kifejezésmezőben)

Példák

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

Adatfolyamszkript

Syntax

Példák

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