Преобразование "Синтаксический анализ" в потоке данных для сопоставления
Область применения:Фабрика данных Azure Azure Synapse Analytics
Совет
Попробуйте использовать фабрику данных в Microsoft Fabric, решение для аналитики с одним интерфейсом для предприятий. Microsoft Fabric охватывает все, от перемещения данных до обработки и анализа данных в режиме реального времени, бизнес-аналитики и отчетности. Узнайте, как бесплатно запустить новую пробную версию !
Потоки данных доступны в конвейерах как Фабрики данных Azure, так и Azure Synapse. Эта статья относится к потокам данных для сопоставления. Если вы не знакомы с преобразованиями, см. вводную статью Преобразование данных с помощью потока данных для сопоставления.
Используйте преобразование "Синтаксический анализ" для анализа текстовых столбцов данных, которые хранятся в виде строк в форме документа. Текущие поддерживаемые типы внедренных документов, которые можно анализировать, представлены JSON, XML и текстами с разделителями.
Настройка
На панели конфигурации преобразования "Синтаксический анализ" сначала нужно выбрать тип данных в столбцах для анализа. Также для этого преобразования можно настроить перечисленные ниже параметры конфигурации.
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 попытается автоматически определить схему на основе данных в анализируемом строковом поле, и задать ее в выходном выражении.
В этом примере мы определили синтаксический анализ входящего поля 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
Связанный контент
- Используйте преобразование в плоскую структуру, чтобы свести строки в столбцы.
- Используйте преобразование производного столбца для изменения строк.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по