Partilhar via


Analisar a transformação no mapeamento do fluxo de dados

APLICA-SE A: Azure Data Factory Azure Synapse Analytics

Gorjeta

Experimente o Data Factory no Microsoft Fabric, uma solução de análise tudo-em-um para empresas. O Microsoft Fabric abrange tudo, desde a movimentação de dados até ciência de dados, análises em tempo real, business intelligence e relatórios. Saiba como iniciar uma nova avaliação gratuitamente!

Os fluxos de dados estão disponíveis no Azure Data Factory e no Azure Synapse Pipelines. Este artigo aplica-se ao mapeamento de fluxos de dados. Se você é novo em transformações, consulte o artigo introdutório Transformar dados usando um fluxo de dados de mapeamento.

Use a transformação Analisar para analisar colunas de texto em seus dados que são cadeias de caracteres em forma de documento. Os tipos atuais suportados de documentos incorporados que podem ser analisados são JSON, XML e texto delimitado.

Configuração

No painel de configuração de transformação de análise, você primeiro escolhe o tipo de dados contidos nas colunas que deseja analisar embutidas. A transformação de análise também contém as seguintes definições de configuração.

Analisar configurações

Column

Semelhante às colunas derivadas e agregações, a propriedade Column é onde você modifica uma coluna existente selecionando-a no seletor suspenso. Ou você pode digitar o nome de uma nova coluna aqui. O ADF armazena os dados de origem analisados nesta coluna. Na maioria dos casos, você deseja definir uma nova coluna que analisa o campo de cadeia de caracteres do documento incorporado de entrada.

Expression

Use o construtor de expressões para definir a origem da sua análise. Definir a fonte pode ser tão simples quanto apenas selecionar a coluna de origem com os dados independentes que você deseja analisar, ou você pode criar expressões complexas para analisar.

Expressões de exemplo

  • Dados da cadeia de caracteres de origem: chrome|steel|plastic

    • Expressão: (desc1 as string, desc2 as string, desc3 as string)
  • Dados JSON de origem: {"ts":1409318650332,"userId":"309","sessionId":1879,"page":"NextSong","auth":"Logged In","method":"PUT","status":200,"level":"free","itemInSession":2,"registration":1384448}

    • Expressão: (level as string, registration as long)
  • Dados JSON aninhados de origem: {"car" : {"model" : "camaro", "year" : 1989}, "color" : "white", "transmission" : "v8"}

    • Expressão: (car as (model as string, year as integer), color as string, transmission as string)
  • Dados XML de origem: <Customers><Customer>122</Customer><CompanyName>Great Lakes Food Market</CompanyName></Customers>

    • Expressão: (Customers as (Customer as integer, CompanyName as string))
  • XML de origem com dados de atributo: <cars><car model="camaro"><year>1989</year></car></cars>

    • Expressão: (cars as (car as ({@model} as string, year as integer)))
  • Expressões com caracteres reservados: { "best-score": { "section 1": 1234 } }

    • A expressão acima não funciona, uma vez que o caractere '-' em best-score é interpretado como uma operação de subtração. Use uma variável com notação entre colchetes nesses casos para dizer ao mecanismo JSON para interpretar o texto literalmente:
      var bestScore = data["best-score"];
      { bestScore : { "section 1": 1234 } }
      
  • Nota: Se você encontrar erros ao extrair atributos (especificamente, @model) de um tipo complexo, uma solução alternativa é converter o tipo complexo em uma cadeia de caracteres, remova o símbolo @ (especificamente, replace(toString(your_xml_string_parsed_column_name.cars.car),'@','') e use a atividade de transformação JSON de análise.

Tipo de coluna de saída

Aqui é onde você configura o esquema de saída de destino a partir da análise que é gravada em uma única coluna. A maneira mais fácil de definir um esquema para sua saída a partir da análise é selecionar o botão 'Detetar tipo' no canto superior direito do construtor de expressões. O ADF tenta detetar automaticamente o esquema a partir do campo de cadeia de caracteres, que você está analisando e defini-lo para você na expressão de saída.

Exemplo de análise

Neste exemplo, definimos a análise do campo de entrada "jsonString", que é texto simples, mas formatado como uma estrutura JSON. Vamos armazenar os resultados analisados como JSON em uma nova coluna chamada "json" com este esquema:

(trade as boolean, customers as string[])

Consulte a guia inspecionar e a visualização de dados para verificar se a saída está mapeada corretamente.

Use a atividade Coluna derivada para extrair dados hierárquicos (ou seja, your_complex_column_name.car.model no campo de expressão)

Exemplos

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 de fluxo de dados

Sintaxe

Exemplos

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