Преобразование "Синтаксический анализ" в потоке данных для сопоставления

Область применения:Фабрика данных Azure Azure Synapse Analytics

Совет

Попробуйте использовать фабрику данных в Microsoft Fabric, решение для аналитики с одним интерфейсом для предприятий. Microsoft Fabric охватывает все, от перемещения данных до обработки и анализа данных в режиме реального времени, бизнес-аналитики и отчетности. Узнайте, как бесплатно запустить новую пробную версию !

Потоки данных доступны в конвейерах как Фабрики данных Azure, так и Azure Synapse. Эта статья относится к потокам данных для сопоставления. Если вы не знакомы с преобразованиями, см. вводную статью Преобразование данных с помощью потока данных для сопоставления.

Используйте преобразование "Синтаксический анализ" для анализа текстовых столбцов данных, которые хранятся в виде строк в форме документа. Текущие поддерживаемые типы внедренных документов, которые можно анализировать, представлены JSON, XML и текстами с разделителями.

Настройка

На панели конфигурации преобразования "Синтаксический анализ" сначала нужно выбрать тип данных в столбцах для анализа. Также для этого преобразования можно настроить перечисленные ниже параметры конфигурации.

Parse settings

Column

Аналогично производным столбцам и агрегатам, здесь можно изменить существующий столбец, выбрав его из раскрывающегося списка. Также можно ввести имя нового столбца. ADF будет хранить проанализированные исходные данные в этом столбце. В большинстве случаев вы будете определять новый столбец, который анализирует строковое поле входящего внедренного документа.

Выражение

Используйте построитель выражений, чтобы задать исходные данные для анализа. Можно просто выбрать исходный столбец с автономными данными, которые необходимо проанализировать, или создать сложные выражения для анализа.

Примеры выражений

  • Данные исходной строки: chrome|steel|plastic

    • Выражение: (desc1 as string, desc2 as string, desc3 as string)
  • Исходные данные JSON: {"ts":1409318650332,"userId":"309","sessionId":1879,"page":"NextSong","auth":"Logged In","method":"PUT","status":200,"level":"free","itemInSession":2,"registration":1384448}

    • Выражение: (level as string, registration as long)
  • Исходные вложенные данные JSON: {"car" : {"model" : "camaro", "year" : 1989}, "color" : "white", "transmission" : "v8"}

    • Выражение: (car as (model as string, year as integer), color as string, transmission as string)
  • Исходные данные XML: <Customers><Customer>122</Customer><CompanyName>Great Lakes Food Market</CompanyName></Customers>

    • Выражение: (Customers as (Customer as integer, CompanyName as string))
  • Исходный XML-код с данными атрибутов: <cars><car model="camaro"><year>1989</year></car></cars>

    • Выражение: (cars as (car as ({@model} as string, year as integer)))
  • Примечание. Если возникнут ошибки при извлечении атрибутов (т. е. @model) из сложного типа, обходное решение заключается в преобразовании сложного типа в строку), удалите символ @ (т. е. replace(toString(your_xml_string_parsed_column_name.cars.car),'@','') ), а затем используйте действие преобразования анализа JSON.

Тип выходного столбца

Здесь можно настроить целевую схему для вывода результатов синтаксического анализа, которые будут записаны в один столбец. Самый простой способ задать схему для выходных данных синтаксического анализа — выбрать "Обнаружить тип" в правом верхнем углу построителя выражений. ADF попытается автоматически определить схему на основе данных в анализируемом строковом поле, и задать ее в выходном выражении.

Parse example

В этом примере мы определили синтаксический анализ входящего поля jsonString, которое является обычным текстом, но отформатированным в виде структуры JSON. Мы будем хранить проанализированные результаты в формате JSON в новом столбце с именем json на основе этой схемы:

(trade as boolean, customers as string[])

Чтобы убедиться, что выходные данные сопоставлены правильно, используйте вкладку проверки и предварительный просмотр данных.

Используйте действие "Производный столбец" для извлечения иерархических данных (т. е. your_complex_column_name.car.model в поле выражения).

Примеры

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

Скрипт потока данных

Синтаксис

Примеры

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