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

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

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

Формат JSON поддерживается для следующих соединителей:

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

Полный список разделов и свойств, доступных для определения наборов данных, см. в статье о наборах данных. В этом разделе приведен список свойств, поддерживаемых набором данных JSON.

Свойство Описание Обязательно
type Для свойства type набора данных необходимо задать значение Json. Да
location Параметры расположения файлов. Каждый файловый соединитель имеет собственный тип расположения и поддерживает собственный набор свойств в разделе location. Подробные сведения приведены в статье "Соединитель -> Свойства набора данных" . Да
encodingName Тип кодировки, используемый для чтения и записи тестовых файлов.
Допустимы следующие значения: "UTF-8", "UTF-8 без спецификации", "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", "STANDARD = 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-".
Нет
compression Группа свойств для настройки сжатия файлов. Настройте этот раздел, если требуется сжатие или распаковка при выполнении действия. Нет
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 в источнике действия копирования, чтобы указать, нужно ли использовать имя сжатого файла для названия структуры папок.
Нет.
уровень
(в разделеcompression )
Коэффициент сжатия.
Допустимые значения: Optimal или Fastest.
- Fastest: операция сжатия должна выполняться как можно быстрее, даже если итоговый файл будет сжат не оптимально.
- Optimal: операция сжатия должна выполняться оптимально, даже если для ее завершения требуется больше времени. Дополнительные сведения см. в разделе Уровень сжатия.
Нет

Ниже приведен пример набора данных 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 в качестве источника

В разделе *Источник* действия копирования поддерживаются следующие свойства.

Свойство Описание Обязательно
type Свойству type для источника действия копирования необходимо присвоить значение JSONSource. Да
formatSettings Группа свойств. См. приведенную ниже таблицу Параметры считывания JSON. Нет
storeSettings Группа свойств, определяющих способ чтения данных из хранилища данных. Каждый файловый соединитель поддерживает собственный набор параметров чтения в разделе storeSettings. Подробные сведения приведены в статье "Соединитель -> Свойства набора данных" . Нет

Поддерживаемые параметры считывания JSON в разделе formatSettings:

Свойство Описание Обязательно
type Для типа formatSettings должно быть задано значение JsonReadSettings. Да
compressionProperties Группа свойств для распаковки данных для данного кодека сжатия. Нет
preserveZipFileNameAsFolder
(в разделе compressionProperties->type как ZipDeflateReadSettings )
Применяется, когда для входного набора данных настроено сжатие ZipDeflate. Указывает, следует ли использовать имя исходного ZIP-файла в качестве имени структуры папок во время копирования.
— Если задано значение true (по умолчанию) , служба записывает разархивированные файлы в <path specified in dataset>/<folder named as source zip file>/.
— Если задано значение false, служба записывает разархивированные файлы непосредственно в <path specified in dataset>. Чтобы избежать непредвиденных ситуаций, убедитесь в том, что в разных исходных ZIP-файлах нет файлов с одинаковыми именами.
Нет
preserveCompressionFileNameAsFolder
(в разделе compressionProperties->type как TarGZipReadSettings или TarReadSettings )
Применяется, когда для входного набора данных настроено сжатие TarGzip/Tar. Указывает, следует ли сохранять имя исходного сжатого файла в качестве имени структуры папок во время копирования.
— Если задано значение true (по умолчанию) , служба записывает распакованные файлы в <path specified in dataset>/<folder named as source compressed file>/.
— Если задано значение false, служба записывает распакованные файлы непосредственно в <path specified in dataset>. Чтобы избежать непредвиденных ситуаций, убедитесь в том, что в разных исходных файлах нет файлов с одинаковыми именами.
Нет

JSON в качестве приемника

В разделе *приемник* действия копирования поддерживаются следующие свойства.

Свойство Описание Обязательно
type Свойству type для источника действия копирования необходимо присвоить значение JSONSink. Да
formatSettings Группа свойств. См. приведенную ниже таблицу Параметры записи JSON. Нет
storeSettings Группа свойств, определяющих способы записи данных в хранилище данных. Каждый файловый соединитель поддерживает собственный набор параметров записи в разделе storeSettings. Подробные сведения приведены в статье "Соединитель -> Свойства набора данных" . Нет

Поддерживаемые параметры записи JSON в разделе formatSettings:

Свойство Описание Обязательно
type Для параметра type свойства formatSettings необходимо задать значение JsonWriteSettings. Да
filePattern Шаблон данных, хранящихся в каждом JSON-файле. Допустимые значения: setOfObjects (строки JSON) и arrayOfObjects. Значение по умолчанию — setOfObjects. Подробные сведения об этих шаблонах см. в разделе Шаблоны файлов JSON. Нет

Шаблоны файлов 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 в следующих хранилищах данных: служба хранилища больших двоичных объектов Azure, Azure Data Lake Storage 1-го поколения и Azure Data Lake Storage 2-го поколения, а также читать формат JSON в Amazon S3.

Свойства источника

В приведенной ниже таблице указаны свойства, поддерживаемые источником JSON. Эти свойства можно изменить на вкладке Параметры источника.

Имя Описание Обязательно Допустимые значения Свойство сценария для потока данных
Пути с подстановочными знаками Будут обработаны все файлы, соответствующие пути с подстановочными знаками. Переопределяет папку и путь к файлу, заданные в наборе данных. Нет String[] wildcardPaths
Корневой путь раздела Для секционированных файловых данных можно ввести корневой путь к секции, чтобы считывать секционированные папки как столбцы Нет Строка partitionRootPath
List of files (Список файлов) Сообщает о том, указывает ли источник на текстовый файл, в котором перечислены файлы для обработки. Нет true либо false fileList
Столбец для хранения имени файла Предписывает создать столбец с именем и путем исходного файла. Нет Строка rowUrlColumn
After completion (После завершения) Инструкции в отношении удаления или перемещения файлов после обработки. Путь к файлу начинается с корня контейнера. Нет Удаление: true или false
Перемещение: ['<from>', '<to>']
purgeFiles
moveFiles
Filter by last modified (Фильтр по последнему изменению) Задает фильтр для файлов по времени последнего изменения Нет Отметка времени modifiedAfter
modifiedBefore
Один документ Потоки данных для сопоставления считывают по одному документу JSON из каждого файла Нет true или false singleDocument
Имена столбцов без кавычек Если выбран параметр Имена столбцов без кавычек, потоки данных для сопоставления считывают имена столбцов JSON, не заключенные в кавычки. Нет true или false unquotedColumnNames
Содержит комментарии Выберите параметр Содержит комментарии, если данные JSON содержат комментарии в стиле C или C++ Нет true или false asComments
Одинарные кавычки Считывает столбцы JSON, не заключенные в кавычки Нет true или false singleQuoted
Экранирование обратной косой чертой Выберите параметр Экранирование обратной косой чертой, если в данных JSON используются escape-символы обратной косой черты Нет true или false backslashEscape
Allow no files found (Разрешить ненайденные файлы) Когда задано значение true, ошибка не возникает, если файлы не найдены Нет true либо false ignoreNoFilesFound

Параметры исходного формата

При использовании набора данных 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"
        }
    ]

Примечание

Если при предварительном просмотре данных JSON поток данных возвращает ошибку “corrupt_record”, это может означать, что файл 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. Изменить эти свойства можно на вкладке Параметры.

Имя Описание Обязательно Допустимые значения Свойство сценария для потока данных
Очистить папку Указывает, очищается ли конечная папка перед записью Нет true либо false truncate
File name option (Параметр имени файла) Формат именования записываемого файла данных. По умолчанию — по одному файлу на секцию в формате part-#####-tid-<guid> Нет Шаблон: String
По одному на секцию: String[]
Как данные в столбце: 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.

  • служба хранилища больших двоичных объектов Azure (connector-azure-blob-storage.md)
  • Текстовый формат с разделителями (Format-text.md)
  • Соединитель OData (Connector-odata.md)
  • Формат Parquet (Format-parquet.md)

Дальнейшие действия