Формат JSON в Фабрике данных Azure и Azure Synapse Analytics
ОБЛАСТЬ ПРИМЕНЕНИЯ: Фабрика данных Azure Azure Synapse Analytics
Совет
Попробуйте использовать фабрику данных в Microsoft Fabric, решение для аналитики с одним интерфейсом для предприятий. Microsoft Fabric охватывает все, от перемещения данных до обработки и анализа данных в режиме реального времени, бизнес-аналитики и отчетности. Узнайте, как бесплатно запустить новую пробную версию !
Если вам требуется анализировать файлы JSON или записывать данные в формате JSON, следуйте инструкциям, приведенным в этой статье.
Для приведенных ниже соединителей поддерживается формат JSON:
- Amazon S3
- Хранилище, совместимое с Amazon S3
- Хранилище BLOB-объектов Azure
- Azure Data Lake Storage 1-го поколения
- Azure Data Lake Storage 2-го поколения
- Файлы Azure
- Файловая система
- FTP
- Google Cloud Storage
- HDFS
- HTTP
- Хранилище Oracle Cloud
- SFTP
Свойства набора данных
Полный список разделов и свойств, доступных для определения наборов данных, см. в статье о наборах данных. В этом разделе приведен список свойств, поддерживаемых набором данных JSON.
Свойство | Описание: | Обязательное поле |
---|---|---|
type | Для свойства type набора данных необходимо задать значение Json. | Да |
расположение | Параметры расположения файлов. Каждый файловый соединитель имеет собственный тип расположения и поддерживает собственный набор свойств в разделе location . Подробные сведения см. в статье о соединителях —> раздел "Свойства набора данных". |
Да |
encodingName | Тип кодировки, используемый для чтения и записи тестовых файлов. Допустимые значения: "UTF-8","UTF-8 without BOM", "UTF-16", "UTF-16BE", "UTF-32", "UTF-32BE", "US-ASCII", "UTF-7", "BIG5", "EUC-JP", "EUC-KR", "GB2312", "GB18030", "JOHAB", "SHIFT-JIS", "CP875", "CP866", "IBM00858", "IBM037", "IBM273", "IBM437", "IBM500", "IBM737", "IBM775", "IBM850", "IBM852", "IBM855", "IBM857", "IBM860", "IBM861", "IBM863", "IBM864", "IBM865", "IBM869", "IBM870", "IBM01140", "IBM01141", "IBM01142", "IBM01143", "IBM01144", "IBM01145", "IBM01146", "IBM01147", "IBM01148", "IBM01149", "ISO-2022-JP", "ISO-2022-KR", "ISO-8859-1", "ISO-8859-2", "ISO-8859-3", "ISO-8859-4", "ISO-8859-5", "ISO-8859-6", "ISO-8859-7", "ISO-8859-8", "ISO-8859-9", "ISO-8859-13", "ISO-8859-15", "WINDOWS-874", "WINDOWS-1250", "WINDOWS-1251", "WINDOWS-1252", "WINDOWS-1253", "WINDOWS-1254", "WINDOWS-1255", "WINDOWS-1256", "WINDOWS-1257", "WINDOWS-1258". |
No |
compression | Группа свойств для настройки сжатия файлов. Настройте этот раздел, если требуется сжатие/распаковка при выполнении действия. | No |
type (в разделе compression ) |
Кодек сжатия, используемый для чтения и записи двоичных файлов JSON. Допустимые значения: bzip2, gzip, deflate, ZipDeflate, TarGzip, Tar, snappy, lz4. Значение по умолчанию — без сжатия. Примечание. В настоящее время действие Copy не поддерживает кодеки snappy и lz4, а поток данных для сопоставления не поддерживает кодеки ZipDeflate, TarGzip и Tar. Обратите внимание, что при использовании действия копирования для распаковки файлов ZipDeflate / TarGzip / tar и записи в файловое хранилище данных приемника по умолчанию файлы распаковываются в папку: <path specified in dataset>/<folder named as source compressed file>/ , используйте preserveZipFileNameAsFolder /preserveCompressionFileNameAsFolder в источнике действия копирования, чтобы использовать имя сжатого (-ых) файла (-ов) для названия структуры папок. |
№ |
level (в разделе compression ) |
Коэффициент сжатия. Допустимые значения: оптимальный или самый быстрый. - Fastest: операция сжатия должна выполняться как можно быстрее, даже если итоговый файл будет сжат не оптимально. - Optimal: операция сжатия должна выполняться оптимально, даже если для ее завершения требуется больше времени. Дополнительные сведения см. в разделе Уровень сжатия. |
No |
Ниже приведен пример набора данных JSON в хранилище BLOB-объектов Azure.
{
"name": "JSONDataset",
"properties": {
"type": "Json",
"linkedServiceName": {
"referenceName": "<Azure Blob Storage linked service name>",
"type": "LinkedServiceReference"
},
"schema": [ < physical schema, optional, retrievable during authoring > ],
"typeProperties": {
"location": {
"type": "AzureBlobStorageLocation",
"container": "containername",
"folderPath": "folder/subfolder",
},
"compression": {
"type": "gzip"
}
}
}
}
Свойства действия копирования
Полный список разделов и свойств, используемых для определения действий, см. в статье Конвейеры и действия в фабрике данных Azure. В этом разделе приведен список свойств, поддерживаемых источником и приемником JSON.
Сведения о том, как извлечь данные из файлов JSON и сопоставить их с форматом и хранилищем данных приемника или наоборот, используя сопоставление схемы.
JSON в качестве источника
В разделе источника *source* действия копирования поддерживаются указанные ниже свойства.
Свойство | Описание: | Обязательное поле |
---|---|---|
type | Свойству type для источника действия копирования необходимо присвоить значение JSONSource. | Да |
formatSettings | Группа свойств. См. приведенную ниже таблицу Параметры считывания JSON. | No |
storeSettings | Группа свойств, определяющих способ чтения данных из хранилища данных. Каждый файловый соединитель поддерживает собственный набор параметров чтения в разделе storeSettings . Подробные сведения см. в статье о соединителях —> раздел "Свойства действия Copy". |
No |
Поддерживаемые параметры считывания JSON в разделе formatSettings
:
Свойство | Описание: | Обязательное поле |
---|---|---|
type | Для типа formatSettings должно быть задано значение JsonReadSettings. | Да |
compressionProperties | Группа свойств для распаковки данных для данного кодека сжатия. | No |
preserveZipFileNameAsFolder (в разделе compressionProperties ->type как ZipDeflateReadSettings ) |
Применяется, когда для входного набора данных настроено сжатие ZipDeflate. Указывает, следует ли использовать имя исходного ZIP-файла в качестве имени структуры папок во время копирования. — Если задано значение true (по умолчанию), служба записывает разархивированные файлы в <path specified in dataset>/<folder named as source zip file>/ .— Если задано значение false, служба записывает разархивированные файлы непосредственно в <path specified in dataset> . Чтобы избежать непредвиденных ситуаций, убедитесь в том, что в разных исходных ZIP-файлах нет файлов с одинаковыми именами. |
No |
preserveCompressionFileNameAsFolder (в разделе compressionProperties ->type как TarGZipReadSettings или TarReadSettings ) |
Применяется, когда для входного набора данных настроено сжатие TarGzip/Tar. Указывает, следует ли сохранять имя исходного сжатого файла в качестве имени структуры папок во время копирования. — Если задано значение true (по умолчанию), служба записывает распакованные файлы в <path specified in dataset>/<folder named as source compressed file>/ . — Если задано значение false, служба записывает распакованные файлы непосредственно в <path specified in dataset> . Чтобы избежать непредвиденных ситуаций, убедитесь в том, что в разных исходных файлах нет файлов с одинаковыми именами. |
No |
JSON в качестве приемника
В разделе *sink* действия Copy поддерживаются следующие свойства.
Свойство | Описание: | Обязательное поле |
---|---|---|
type | Свойству type для источника действия копирования необходимо присвоить значение JSONSink. | Да |
formatSettings | Группа свойств. См. приведенную ниже таблицу Параметры записи JSON. | No |
storeSettings | Группа свойств, определяющих способы записи данных в хранилище данных. Каждый файловый соединитель поддерживает собственный набор параметров записи в разделе storeSettings . Подробные сведения см. в статье о соединителях —> раздел "Свойства действия Copy". |
No |
Поддерживаемые параметры записи JSON в разделе formatSettings
:
Свойство | Описание: | Обязательное поле |
---|---|---|
type | Для параметра type свойства formatSettings необходимо задать значение JsonWriteSettings. | Да |
filePattern | Шаблон данных, хранящихся в каждом JSON-файле. Допустимые значения: setOfObjects (строки JSON) и arrayOfObjects. Значение по умолчанию — setOfObjects. Подробные сведения об этих шаблонах см. в разделе Шаблоны файлов JSON. | No |
Шаблоны файлов JSON
При копировании данных из файлов JSON действие копирования может автоматически определять и анализировать указанные ниже шаблоны файлов JSON. При записи данных в файлы JSON вы можете настроить шаблон файла в приемнике действия копирования.
Тип 1: setOfObjects
Каждый файл содержит один объект, строки JSON или сцепленные объекты.
Пример единого объекта JSON
{ "time": "2015-04-29T07:12:20.9100000Z", "callingimsi": "466920403025604", "callingnum1": "678948008", "callingnum2": "567834760", "switch1": "China", "switch2": "Germany" }
Строки JSON (по умолчанию для приемника)
{"time":"2015-04-29T07:12:20.9100000Z","callingimsi":"466920403025604","callingnum1":"678948008","callingnum2":"567834760","switch1":"China","switch2":"Germany"} {"time":"2015-04-29T07:13:21.0220000Z","callingimsi":"466922202613463","callingnum1":"123436380","callingnum2":"789037573","switch1":"US","switch2":"UK"} {"time":"2015-04-29T07:13:21.4370000Z","callingimsi":"466923101048691","callingnum1":"678901578","callingnum2":"345626404","switch1":"Germany","switch2":"UK"}
Пример объединенного JSON-файла
{ "time": "2015-04-29T07:12:20.9100000Z", "callingimsi": "466920403025604", "callingnum1": "678948008", "callingnum2": "567834760", "switch1": "China", "switch2": "Germany" } { "time": "2015-04-29T07:13:21.0220000Z", "callingimsi": "466922202613463", "callingnum1": "123436380", "callingnum2": "789037573", "switch1": "US", "switch2": "UK" } { "time": "2015-04-29T07:13:21.4370000Z", "callingimsi": "466923101048691", "callingnum1": "678901578", "callingnum2": "345626404", "switch1": "Germany", "switch2": "UK" }
Тип 2: arrayOfObjects
Каждый файл содержит массив объектов.
[ { "time": "2015-04-29T07:12:20.9100000Z", "callingimsi": "466920403025604", "callingnum1": "678948008", "callingnum2": "567834760", "switch1": "China", "switch2": "Germany" }, { "time": "2015-04-29T07:13:21.0220000Z", "callingimsi": "466922202613463", "callingnum1": "123436380", "callingnum2": "789037573", "switch1": "US", "switch2": "UK" }, { "time": "2015-04-29T07:13:21.4370000Z", "callingimsi": "466923101048691", "callingnum1": "678901578", "callingnum2": "345626404", "switch1": "Germany", "switch2": "UK" } ]
Свойства потока данных для сопоставления
В потоках данных для сопоставления можно читать и записывать данные формата JSON в следующих хранилищах данных: Хранилище BLOB-объектов Azure, Azure Data Lake Storage 1-го поколения, Azure Data Lake Storage 2-го поколения и SFTP. Чтение формата JSON поддерживается Amazon S3.
Свойства источника
В приведенной ниже таблице указаны свойства, поддерживаемые источником JSON. Изменить эти свойства можно на вкладке Source options (Параметры источника).
Имя | Описание | Обязательное поле | Допустимые значения | Свойство скрипта для потока данных |
---|---|---|---|---|
Пути с подстановочными знаками | Будут обработаны все файлы, соответствующие пути с подстановочными знаками. Переопределяет папку и путь к файлу, заданные в наборе данных. | no | String[] | wildcardPaths |
Корневой путь раздела | Для секционированных файловых данных можно ввести корневой путь к секции, чтобы считывать секционированные папки как столбцы | no | Строка | partitionRootPath |
Список файлов | Сообщает о том, указывает ли источник на текстовый файл, в котором перечислены файлы для обработки. | no | true или false |
fileList |
Столбец для хранения имени файла | Предписывает создать столбец с именем и путем исходного файла. | no | Строка | rowUrlColumn |
After completion (После завершения) | Инструкции в отношении удаления или перемещения файлов после обработки. Путь к файлу начинается с корня контейнера. | no | Удаление: true или false Перемещение: ['<from>', '<to>'] |
Очистка файлов moveFiles |
Фильтр по последнему изменению | Задает фильтр для файлов по времени последнего изменения | no | Метка времени | modifiedAfter modifiedBefore |
Один документ | Потоки данных для сопоставления считывают по одному документу JSON из каждого файла | no | true или false |
singleDocument |
Имена столбцов без кавычек | Если выбран параметр Имена столбцов без кавычек, потоки данных для сопоставления считывают имена столбцов JSON, не заключенные в кавычки. | no | true или false |
unquotedColumnNames |
Содержит комментарии | Выберите параметр Содержит комментарии, если данные JSON содержат комментарии в стиле C или C++ | no | true или false |
asComments |
Одинарные кавычки | Считывает столбцы JSON, не заключенные в кавычки | no | true или false |
singleQuoted |
Экранирование обратной косой чертой | Выберите параметр Экранирование обратной косой чертой, если в данных JSON используются escape-символы обратной косой черты | no | true или false |
backslashEscape |
Allow no files found (Разрешить ненайденные файлы) | Когда задано значение true, ошибка не возникает, если файлы не найдены | no | true или false |
ignoreNoFilesFound |
Встроенный набор данных
Сопоставление потоков данных поддерживает встроенные наборы данных в качестве варианта определения источника и приемника. Встроенный набор данных JSON определяется непосредственно внутри преобразований источника и приемника и не предоставляет общий доступ за пределами определенного потока данных. Это полезно для параметризации свойств набора данных непосредственно внутри потока данных и может повысить производительность по сравнению с общими наборами данных ADF.
При чтении большого количества исходных папок и файлов можно повысить производительность обнаружения файлов потока данных, задав параметр "Проецированная пользователем схема" в проекции | Диалоговое окно параметров схемы. Этот параметр отключает автоматическое обнаружение схемы ADF по умолчанию и значительно повышает производительность обнаружения файлов. Перед настройкой этого параметра обязательно импортируйте проекцию JSON, чтобы ADF имеет существующую схему для проекции. Этот параметр не работает с смещением схемы.
Параметры исходного формата
При использовании набора данных JSON в качестве источника для потока данных можно задать пять дополнительных параметров. Эти параметры можно найти в меню-гармошке Параметры JSON на вкладке Параметры источника. Для параметра Форма документа можно выбрать тип Один документ, По документу на строку или Массив документов.
По умолчанию.
По умолчанию данные JSON считываются в приведенном ниже формате.
{ "json": "record 1" }
{ "json": "record 2" }
{ "json": "record 3" }
Один документ
Если выбран тип Один документ, потоки данных для сопоставления считывают по одному документу JSON из каждого файла.
File1.json
{
"json": "record 1"
}
File2.json
{
"json": "record 2"
}
File3.json
{
"json": "record 3"
}
Если выбран тип По документу на строку, потоки данных для сопоставления считывают по одному документу JSON из каждой строки файла.
File1.json
{"json": "record 1"}
File2.json
{"time":"2015-04-29T07:12:20.9100000Z","callingimsi":"466920403025604","callingnum1":"678948008","callingnum2":"567834760","switch1":"China","switch2":"Germany"}
{"time":"2015-04-29T07:13:21.0220000Z","callingimsi":"466922202613463","callingnum1":"123436380","callingnum2":"789037573","switch1":"US","switch2":"UK"}
File3.json
{"time":"2015-04-29T07:12:20.9100000Z","callingimsi":"466920403025604","callingnum1":"678948008","callingnum2":"567834760","switch1":"China","switch2":"Germany"}
{"time":"2015-04-29T07:13:21.0220000Z","callingimsi":"466922202613463","callingnum1":"123436380","callingnum2":"789037573","switch1":"US","switch2":"UK"}
{"time":"2015-04-29T07:13:21.4370000Z","callingimsi":"466923101048691","callingnum1":"678901578","callingnum2":"345626404","switch1":"Germany","switch2":"UK"}
Если выбран тип Массив документов, потоки данных для сопоставления считывают из файла один массив документов.
File.json
[
{
"time": "2015-04-29T07:12:20.9100000Z",
"callingimsi": "466920403025604",
"callingnum1": "678948008",
"callingnum2": "567834760",
"switch1": "China",
"switch2": "Germany"
},
{
"time": "2015-04-29T07:13:21.0220000Z",
"callingimsi": "466922202613463",
"callingnum1": "123436380",
"callingnum2": "789037573",
"switch1": "US",
"switch2": "UK"
},
{
"time": "2015-04-29T07:13:21.4370000Z",
"callingimsi": "466923101048691",
"callingnum1": "678901578",
"callingnum2": "345626404",
"switch1": "Germany",
"switch2": "UK"
}
]
Примечание.
Если потоки данных вызывают ошибку с сообщением "corrupt_record" при предварительном просмотре данных JSON, скорее всего, данные содержат один документ в JSON-файле. Чтобы устранить эту ошибку, можно выбрать тип “Один документ”.
Имена столбцов без кавычек
Если выбран параметр Имена столбцов без кавычек, потоки данных для сопоставления считывают имена столбцов JSON, не заключенные в кавычки.
{ json: "record 1" }
{ json: "record 2" }
{ json: "record 3" }
Содержит комментарии
Выберите параметр Содержит комментарии, если данные JSON содержат комментарии в стиле C или C++.
{ "json": /** comment **/ "record 1" }
{ "json": "record 2" }
{ /** comment **/ "json": "record 3" }
Одинарные кавычки
Выберите параметр Одинарные кавычки, если в полях и значениях JSON используются одинарные кавычки вместо двойных.
{ 'json': 'record 1' }
{ 'json': 'record 2' }
{ 'json': 'record 3' }
Экранирование обратной косой чертой
Выберите параметр Экранирование обратной косой чертой, если в данных JSON используются escape-символы обратной косой черты.
{ "json": "record 1" }
{ "json": "\} \" \' \\ \n \\n record 2" }
{ "json": "record 3" }
Свойства приемника
В приведенной ниже таблице указаны свойства, поддерживаемые приемником JSON. Эти свойства можно изменить на вкладке Параметры.
Имя | Описание | Обязательное поле | Допустимые значения | Свойство скрипта для потока данных |
---|---|---|---|---|
Clear the folder (Очистить папку) | Указывает, очищается ли конечная папка перед записью | no | true или false |
truncate |
File name option (Параметр имени файла) | Формат именования записываемого файла данных. По умолчанию — по одному файлу на секцию в формате part-#####-tid-<guid> |
no | Шаблон: строка На секцию: String[] Как данные в столбце: Строка Вывод в один файл: ['<fileName>'] |
filePattern partitionFileNames rowUrlColumn partitionFileNames |
Создание структур JSON в производном столбце
Вы можете добавить в поток данных сложный столбец при помощи построителя выражений производных столбцов. При преобразовании производного столбца добавьте новый столбец и откройте построитель выражений, нажав синюю кнопку. Чтобы сделать столбец сложным, можно ввести структуру JSON вручную или добавить подчиненные столбцы с помощью интерактивного пользовательского интерфейса.
Использование пользовательского интерфейса построителя выражений
На боковой панели схемы выходных данных наведите указатель на столбец и щелкните значок “плюс”. Нажмите Добавить подчиненный столбец, чтобы привести столбец к сложному типу.
Таким же образом можно добавить другие основные и подчиненные столбцы. Для каждого несложного поля можно добавить выражение в редакторе выражений справа.
Ввод структуры JSON вручную
Чтобы вручную добавить структуру JSON, добавьте новый столбец и введите выражение в редакторе. Выражение представляется в следующем общем формате:
@(
field1=0,
field2=@(
field1=0
)
)
Если бы это выражение было введено в столбце complexColumn, то он был бы записан в приемник в виде следующего кода JSON:
{
"complexColumn": {
"field1": 0,
"field2": {
"field1": 0
}
}
}
Пример написанного вручную скрипта для полного иерархического определения
@(
title=Title,
firstName=FirstName,
middleName=MiddleName,
lastName=LastName,
suffix=Suffix,
contactDetails=@(
email=EmailAddress,
phone=Phone
),
address=@(
line1=AddressLine1,
line2=AddressLine2,
city=City,
state=StateProvince,
country=CountryRegion,
postCode=PostalCode
),
ids=[
toString(CustomerID), toString(AddressID), rowguid
]
)
Связанные соединители и форматы
Ниже приведены некоторые распространенные соединители и форматы, связанные с форматом JSON: