Поделиться через


Формат JSON в Фабрике данных Azure и Azure Synapse Analytics

ОБЛАСТЬ ПРИМЕНЕНИЯ: Фабрика данных Azure Azure Synapse Analytics

Совет

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

Если вам требуется анализировать файлы JSON или записывать данные в формате JSON, следуйте инструкциям, приведенным в этой статье.

Для приведенных ниже соединителей поддерживается формат JSON:

Свойства набора данных

Полный список разделов и свойств, доступных для определения наборов данных, см. в статье о наборах данных. В этом разделе приведен список свойств, поддерживаемых набором данных 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 считываются в приведенном ниже формате.

{ "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: