Delen via


JSON-indeling in Azure Data Factory en Azure Synapse Analytics

VAN TOEPASSING OP: Azure Data Factory Azure Synapse Analytics

Tip

Probeer Data Factory uit in Microsoft Fabric, een alles-in-één analyseoplossing voor ondernemingen. Microsoft Fabric omvat alles, van gegevensverplaatsing tot gegevenswetenschap, realtime analyses, business intelligence en rapportage. Meer informatie over het gratis starten van een nieuwe proefversie .

Volg dit artikel als u de JSON-bestanden wilt parseren of de gegevens naar de JSON-indeling wilt schrijven.

JSON-indeling wordt ondersteund voor de volgende connectors:

Eigenschappen van gegevensset

Zie het artikel Gegevenssets voor een volledige lijst met secties en eigenschappen die beschikbaar zijn voor het definiëren van gegevenssets . Deze sectie bevat een lijst met eigenschappen die worden ondersteund door de JSON-gegevensset.

Eigenschappen Beschrijving Vereist
type De typeeigenschap van de gegevensset moet worden ingesteld op Json. Ja
locatie Locatie-instellingen van de bestanden. Elke op bestanden gebaseerde connector heeft een eigen locatietype en ondersteunde eigenschappen onder location. Zie de details in het connectorartikel -> sectie Eigenschappen van gegevensset. Ja
encodingName Het coderingstype dat wordt gebruikt voor het lezen/schrijven van testbestanden.
Toegestane waarden zijn als volgt: "UTF-8","UTF-8 zonder 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", "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-1255"2", "WINDOWS-1253", "WINDOWS-1254", "WINDOWS-1255", "WINDOWS-1256", "WINDOWS-1257", "WINDOWS-1258".
Nee
compressie Groep eigenschappen voor het configureren van bestandscompressie. Configureer deze sectie wanneer u compressie/decompressie wilt uitvoeren tijdens de uitvoering van de activiteit. Nee
type
(onder compression)
De compressiecodec die wordt gebruikt voor het lezen/schrijven van JSON-bestanden.
Toegestane waarden zijn bzip2, gzip, deflate, ZipDeflate, TarGzip, Tar, snappy of lz4. De standaardwaarde wordt niet gecomprimeerd.
Opmerking momenteel Copy-activiteit geen ondersteuning biedt voor 'snappy' en 'lz4', en toewijzingsgegevensstroom biedt geen ondersteuning voor 'ZipDeflate', 'TarGzip' en 'Tar'.
Opmerking wanneer u kopieeractiviteit gebruikt om ZipDeflate TarGzip/Tar-bestanden te decomprimeren /en schrijven naar een of meer op bestanden gebaseerde sinkgegevensopslag. Standaard worden bestanden uitgepakt in de map:<path specified in dataset>/<folder named as source compressed file>/, gebruikt/preserveCompressionFileNameAsFolder preserveZipFileNameAsFolderu bij de kopieeractiviteitsbron om te bepalen of u de naam van de gecomprimeerde bestanden als mapstructuur wilt behouden.
Nee
niveau
(onder compression)
De compressieverhouding.
Toegestane waarden zijn Optimaal of Snelste.
- Snelste: De compressiebewerking moet zo snel mogelijk worden voltooid, zelfs als het resulterende bestand niet optimaal is gecomprimeerd.
- Optimaal: De compressiebewerking moet optimaal worden gecomprimeerd, zelfs als het langer duurt om de bewerking te voltooien. Zie het onderwerp Compressieniveau voor meer informatie.
Nee

Hieronder ziet u een voorbeeld van een JSON-gegevensset in Azure Blob Storage:

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

Eigenschappen van de kopieeractiviteit

Zie het artikel Pijplijnen voor een volledige lijst met secties en eigenschappen die beschikbaar zijn voor het definiëren van activiteiten. Deze sectie bevat een lijst met eigenschappen die worden ondersteund door de JSON-bron en -sink.

Meer informatie over het extraheren van gegevens uit JSON-bestanden en het toewijzen aan sinkgegevensopslag/-indeling of omgekeerd van schematoewijzing.

JSON als bron

De volgende eigenschappen worden ondersteund in de sectie kopieeractiviteit *source* .

Eigenschappen Beschrijving Vereist
type De typeeigenschap van de bron van de kopieeractiviteit moet worden ingesteld op JSONSource. Ja
formatSettings Een groep eigenschappen. Raadpleeg de onderstaande tabel met leesinstellingen voor JSON. Nee
storeSettings Een groep eigenschappen over het lezen van gegevens uit een gegevensarchief. Elke op bestanden gebaseerde connector heeft zijn eigen ondersteunde leesinstellingen onder storeSettings. Zie de details in het connectorartikel -> sectie Copy-activiteit eigenschappen. Nee

Ondersteunde JSON-leesinstellingen onder formatSettings:

Eigenschappen Beschrijving Vereist
type Het type formatSettings moet worden ingesteld op JsonReadSettings. Ja
compressionProperties Een groep eigenschappen over het decomprimeren van gegevens voor een bepaalde compressiecodec. Nee
preserveZipFileNameAsFolder
(onder compressionProperties->type als ZipDeflateReadSettings)
Is van toepassing wanneer de invoergegevensset is geconfigureerd met ZipDeflate-compressie . Hiermee wordt aangegeven of de naam van het zip-bronbestand moet worden bewaard als mapstructuur tijdens het kopiëren.
- Als deze is ingesteld op true (standaard), schrijft de service uitgepakte bestanden naar <path specified in dataset>/<folder named as source zip file>/.
- Als deze is ingesteld op onwaar, schrijft de service uitgepakte bestanden rechtstreeks naar <path specified in dataset>. Zorg ervoor dat u geen dubbele bestandsnamen in verschillende zip-bronbestanden hebt om racen of onverwacht gedrag te voorkomen.
Nee
preserveCompressionFileNameAsFolder
(onder compressionProperties->type als TarGZipReadSettings of TarReadSettings)
Is van toepassing wanneer de invoergegevensset is geconfigureerd met Tar-compressie van Tar./ Geeft aan of de gecomprimeerde bronbestandsnaam behouden moet blijven als mapstructuur tijdens het kopiëren.
- Als deze is ingesteld op true (standaard), schrijft de service gedecomprimeerde bestanden naar <path specified in dataset>/<folder named as source compressed file>/.
- Als deze is ingesteld op onwaar, schrijft de service gedecomprimeerde bestanden rechtstreeks naar <path specified in dataset>. Zorg ervoor dat u geen dubbele bestandsnamen in verschillende bronbestanden hebt om racen of onverwacht gedrag te voorkomen.
Nee

JSON als sink

De volgende eigenschappen worden ondersteund in de sectie kopieeractiviteit *sink* .

Eigenschappen Beschrijving Vereist
type De typeeigenschap van de bron van de kopieeractiviteit moet worden ingesteld op JSONSink. Ja
formatSettings Een groep eigenschappen. Raadpleeg de onderstaande tabel met JSON-schrijfinstellingen. Nee
storeSettings Een groep eigenschappen over het schrijven van gegevens naar een gegevensarchief. Elke op bestanden gebaseerde connector heeft zijn eigen ondersteunde schrijfinstellingen onder storeSettings. Zie de details in het connectorartikel -> sectie Copy-activiteit eigenschappen. Nee

Ondersteunde JSON-schrijfinstellingen onder formatSettings:

Eigenschappen Beschrijving Vereist
type Het type formatSettings moet worden ingesteld op JsonWriteSettings. Ja
filePattern Hiermee geeft u het patroon aan van gegevens die zijn opgeslagen in elk JSON-bestand. Toegestane waarden zijn: setOfObjects (JSON Lines) en arrayOfObjects. De standaardwaarde is setOfObjects. Zie het gedeelte JSON-bestandpatronen voor meer informatie over deze patronen. Nee

JSON-bestandpatronen

Bij het kopiëren van gegevens uit JSON-bestanden kan de kopieeractiviteit automatisch de volgende patronen van JSON-bestanden detecteren en parseren. Wanneer u gegevens naar JSON-bestanden schrijft, kunt u het bestandspatroon configureren op de sink van de kopieeractiviteit.

  • Type I: setOfObjects

    Elk bestand bevat één object, JSON-regels of samengevoegde objecten.

    • voorbeeld van JSON-bestand met één object

      {
          "time": "2015-04-29T07:12:20.9100000Z",
          "callingimsi": "466920403025604",
          "callingnum1": "678948008",
          "callingnum2": "567834760",
          "switch1": "China",
          "switch2": "Germany"
      }
      
    • JSON-lijnen (standaard voor sink)

      {"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"}
      
    • voorbeeld van JSON-bestand met samengevoegde objecten

      {
          "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"
      }
      
  • Type II: arrayOfObjects

    Elk bestand bevat een matrix met objecten.

    [
        {
            "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"
        }
    ]
    

Eigenschappen van toewijzingsgegevensstroom

In toewijzingsgegevensstromen kunt u de JSON-indeling lezen en schrijven in de volgende gegevensarchieven: Azure Blob Storage, Azure Data Lake Storage Gen1, Azure Data Lake Storage Gen2 en SFTP, en u kunt de JSON-indeling lezen in Amazon S3.

Broneigenschappen

De onderstaande tabel bevat de eigenschappen die worden ondersteund door een json-bron. U kunt deze eigenschappen bewerken op het tabblad Bronopties .

Name Beschrijving Vereist Toegestane waarden Eigenschap gegevensstroomscript
Paden met jokertekens Alle bestanden die overeenkomen met het jokertekenpad worden verwerkt. Hiermee overschrijft u de map en het bestandspad dat is ingesteld in de gegevensset. nee Tekenreeks[] jokertekenpaden
Hoofdpad voor partitie Voor bestandsgegevens die zijn gepartitioneerd, kunt u een partitiehoofdpad invoeren om gepartitioneerde mappen als kolommen te lezen nee String partitionRootPath
Lijst met bestanden Of uw bron verwijst naar een tekstbestand waarin bestanden worden vermeld die moeten worden verwerkt nee true of false fileList
Kolom voor het opslaan van de bestandsnaam Een nieuwe kolom maken met de naam en het pad van het bronbestand nee String rowUrlColumn
Na voltooiing Verwijder of verplaats de bestanden na verwerking. Bestandspad begint vanuit de hoofdmap van de container nee Verwijderen: true of false
Bewegen: ['<from>', '<to>']
purgeFiles
moveFiles
Filteren op laatst gewijzigd Kiezen om bestanden te filteren op basis van wanneer ze voor het laatst zijn gewijzigd nee Tijdstempel modifiedAfter
modifiedBefore
Eén document Toewijzingsgegevensstromen lezen één JSON-document uit elk bestand nee true of false singleDocument
Niet-aanhalingeerde kolomnamen Als niet-aanhalingstekens voor kolomnamen zijn geselecteerd, worden in toewijzingsgegevensstromen JSON-kolommen gelezen die niet tussen aanhalingstekens staan. nee true of false unquotedColumnNames
Bevat opmerkingen Selecteer Heeft opmerkingen als de JSON-gegevens C- of C++-stijlopmerkingen bevatten nee true of false asComments
Enkel aan citeren Leest JSON-kolommen die niet tussen aanhalingstekens worden geplaatst nee true of false singleQuoted
Backslash is ontsnapt Selecteer Backslash escaped als backslashes worden gebruikt om tekens in de JSON-gegevens te escapen nee true of false backslashEscape
Geen bestanden gevonden toestaan Indien waar, wordt er geen fout gegenereerd als er geen bestanden worden gevonden nee true of false ignoreNoFilesFound

Inlinegegevensset

Toewijzingsgegevensstromen ondersteunen 'inlinegegevenssets' als optie voor het definiëren van uw bron en sink. Een inline JSON-gegevensset wordt rechtstreeks in uw bron- en sinktransformaties gedefinieerd en wordt niet gedeeld buiten de gedefinieerde gegevensstroom. Het is handig om gegevensseteigenschappen rechtstreeks in uw gegevensstroom te parameteriseren en kan profiteren van verbeterde prestaties ten opzichte van gedeelde ADF-gegevenssets.

Wanneer u grote aantallen bronmappen en bestanden leest, kunt u de prestaties van de detectie van gegevensbestanden verbeteren door de optie 'Door gebruiker geprojecteerd schema' in de projectie in te stellen | Dialoogvenster Schemaopties. Met deze optie wordt de automatische detectie van het standaardschema van ADF uitgeschakeld en worden de prestaties van bestandsdetectie aanzienlijk verbeterd. Voordat u deze optie instelt, moet u de JSON-projectie importeren zodat ADF een bestaand schema voor projectie heeft. Deze optie werkt niet met schemadrift.

Opties voor bronindeling

Door een JSON-gegevensset als bron in uw gegevensstroom te gebruiken, kunt u vijf extra instellingen instellen. Deze instellingen vindt u onder de accordeon JSON-instellingen op het tabblad Bronopties. Voor de instelling Documentformulier kunt u één document, document per regel en matrix van documenttypen selecteren.

JSON-instellingen

Standaardinstelling

JSON-gegevens worden standaard gelezen in de volgende indeling.

{ "json": "record 1" }
{ "json": "record 2" }
{ "json": "record 3" }

Eén document

Als één document is geselecteerd, lezen toewijzingsgegevensstromen één JSON-document uit elk bestand.

File1.json
{
    "json": "record 1"
}
File2.json
{
    "json": "record 2"
}
File3.json
{
    "json": "record 3"
}

Als Document per regel is geselecteerd, lezen toewijzingsgegevensstromen één JSON-document van elke regel in een bestand.

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"}

Als matrix met documenten is geselecteerd, lezen toewijzingsgegevensstromen één matrix van het document uit een bestand.

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"
        }
    ]

Notitie

Als gegevensstromen een fout genereren met de melding 'corrupt_record' bij het bekijken van uw JSON-gegevens, is het waarschijnlijk dat uw gegevens één document in uw JSON-bestand bevatten. Als u één document instelt, moet deze fout worden gewist.

Niet-aanhalingeerde kolomnamen

Als niet-aanhalingstekens voor kolomnamen zijn geselecteerd, worden in toewijzingsgegevensstromen JSON-kolommen gelezen die niet tussen aanhalingstekens staan.

{ json: "record 1" }
{ json: "record 2" }
{ json: "record 3" }

Bevat opmerkingen

Selecteer Heeft opmerkingen als de JSON-gegevens C- of C++-stijlopmerkingen bevatten.

{ "json": /** comment **/ "record 1" }
{ "json": "record 2" }
{ /** comment **/ "json": "record 3" }

Enkel aan citeren

Selecteer Enkele aanhalingstekens als de JSON-velden en -waarden enkele aanhalingstekens gebruiken in plaats van dubbele aanhalingstekens.

{ 'json': 'record 1' }
{ 'json': 'record 2' }
{ 'json': 'record 3' }

Backslash is ontsnapt

Selecteer Backslash escaped als backslashes worden gebruikt om tekens in de JSON-gegevens te escapen.

{ "json": "record 1" }
{ "json": "\} \" \' \\ \n \\n record 2" }
{ "json": "record 3" }

Eigenschappen van sink

De onderstaande tabel bevat de eigenschappen die worden ondersteund door een json-sink. U kunt deze eigenschappen bewerken op het tabblad Instellingen .

Name Beschrijving Vereist Toegestane waarden Eigenschap gegevensstroomscript
Ga naar de map Als de doelmap is gewist voordat u gaat schrijven nee true of false truncate
Optie voor bestandsnaam De naamgevingsindeling van de geschreven gegevens. Standaard één bestand per partitie in indeling part-#####-tid-<guid> nee Patroon: Tekenreeks
Per partitie: Tekenreeks[]
Als gegevens in kolom: Tekenreeks
Uitvoer naar één bestand: ['<fileName>']
filePattern
partitionFileNames
rowUrlColumn
partitionFileNames

JSON-structuren maken in een afgeleide kolom

U kunt een complexe kolom toevoegen aan uw gegevensstroom via de opbouwfunctie voor afgeleide kolomexpressies. Voeg in de afgeleide kolomtransformatie een nieuwe kolom toe en open de opbouwfunctie voor expressies door op het blauwe vak te klikken. Als u een kolomcomplex wilt maken, kunt u de JSON-structuur handmatig invoeren of de UX gebruiken om subkolommen interactief toe te voegen.

De UX van de opbouwfunctie voor expressies gebruiken

Plaats de muisaanwijzer in het zijdeelvenster van het uitvoerschema op een kolom en klik op het pluspictogram. Selecteer Subkolom toevoegen om de kolom een complex type te maken.

Subcolumn toevoegen

U kunt op dezelfde manier extra kolommen en subkolommen toevoegen. Voor elk niet-complex veld kan een expressie worden toegevoegd in de expressie-editor aan de rechterkant.

Complexe kolom toevoegen

De JSON-structuur handmatig invoeren

Als u handmatig een JSON-structuur wilt toevoegen, voegt u een nieuwe kolom toe en voert u de expressie in de editor in. De expressie volgt de volgende algemene indeling:

@(
    field1=0,
    field2=@(
        field1=0
    )
)

Als deze expressie is ingevoerd voor een kolom met de naam complexColumn, wordt deze als de volgende JSON naar de sink geschreven:

{
    "complexColumn": {
        "field1": 0,
        "field2": {
            "field1": 0
        }
    }
}

Voorbeeld van handmatig script voor volledige hiërarchische definitie

@(
    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
    ]
)

Hier volgen enkele algemene connectors en indelingen met betrekking tot de JSON-indeling: