Formati di file e codec di compressione supportati in Azure Data FactorySupported file formats and compression codecs in Azure Data Factory

Questo articolo si applica ai connettori seguenti: Amazon S3, BLOB di Azure, Azure Data Lake storage Gen1, Azure Data Lake storage Gen2, archiviazione file di Azure, file System, FTP, Google Cloud Storage, HDFS, httpe SFTP.This article applies to the following connectors: Amazon S3, Azure Blob, Azure Data Lake Storage Gen1, Azure Data Lake Storage Gen2, Azure File Storage, File System, FTP, Google Cloud Storage, HDFS, HTTP, and SFTP.

Azure Data Factory supportano i formati di file seguenti.Azure Data Factory support the following file formats. Fare riferimento a ogni articolo sulle impostazioni basate sul formato.Refer to each article on format-based settings.

Nota

Data Factory è stato introdotto un nuovo modello di set di dati basato su formato, vedere l'articolo del formato corrispondente collegato sopra con i dettagli.Data Factory introduced new format-based dataset model, see corresponding format article linked above with details. Le configurazioni seguenti nel set di dati dell'archivio dati basato su file indicato in questo articolo sono ancora supportate così come sono per le versioni precedenti di Compabitility.The following configurations on file-based data store dataset mentioned in this article is still supported as-is for backward compabitility. Si consiglia di utilizzare il nuovo modello in futuro.You are suggested to use the new model going forward.

Formato testoText format

Nota

Data Factory introdotto un nuovo set di dati in formato testo delimitato, vedere l'articolo formato testo delimitato con i dettagli.Data Factory introduced new delimited text format dataset, see Delimited text format article with details. Le configurazioni seguenti nel set di dati dell'archivio dati basato su file sono ancora supportate così come sono per le Compabitility precedenti.The following configurations on file-based data store dataset is still supported as-is for backward compabitility. Si consiglia di utilizzare il nuovo modello in futuro.You are suggested to use the new model going forward.

Se si vuole leggere da un file di testo o scrivere in un file di testo, impostare la proprietà type nella sezione format del set di dati TextFormat.If you want to read from a text file or write to a text file, set the type property in the format section of the dataset to TextFormat. È anche possibile specificare le proprietà facoltative seguenti nella sezione format.You can also specify the following optional properties in the format section. Vedere la sezione Esempio di TextFormat sulla configurazione.See TextFormat example section on how to configure.

ProprietàProperty DescriptionDescription Valori consentitiAllowed values ObbligatoriaRequired
columnDelimitercolumnDelimiter Il carattere usato per separare le colonne in un file.The character used to separate columns in a file. È possibile usare un carattere non stampabile raro che potrebbe non esistere nei dati.You can consider to use a rare unprintable character that may not exist in your data. Ad esempio, specificare "\u0001", che rappresenta l'inizio intestazione (SOH).For example, specify "\u0001", which represents Start of Heading (SOH). È consentito un solo carattere.Only one character is allowed. Il valore predefinito è la virgola (",") .The default value is comma (',').

Per usare un carattere Unicode, vedere i caratteri Unicode per ottenere il codice corrispondente.To use a Unicode character, refer to Unicode Characters to get the corresponding code for it.
NoNo
rowDelimiterrowDelimiter Il carattere usato per separare le righe in un file.The character used to separate rows in a file. È consentito un solo carattere.Only one character is allowed. Sono consentiti i seguenti valori predefiniti in lettura: ["\r\n", "\r", "\n"] e "\r\n" in scrittura.The default value is any of the following values on read: ["\r\n", "\r", "\n"] and "\r\n" on write. NoNo
escapeCharescapeChar Carattere speciale usato per eseguire l'escape di un delimitatore di colonna nel contenuto del file di input.The special character used to escape a column delimiter in the content of input file.

Per una tabella, è possibile specificare sia escapeChar che quoteChar.You cannot specify both escapeChar and quoteChar for a table.
È consentito un solo carattere.Only one character is allowed. Nessun valore predefinito.No default value.

Ad esempio, se è presente una virgola (",") come delimitatore di colonna, ma si desidera inserire un carattere virgola nel testo (ad esempio: "Hello, world"), è possibile definire "$" come carattere di escape e usare la stringa "Hello$, world" nell'origine.Example: if you have comma (',') as the column delimiter but you want to have the comma character in the text (example: "Hello, world"), you can define ‘$’ as the escape character and use string "Hello$, world" in the source.
NoNo
quoteCharquoteChar Carattere usato per delimitare tra virgolette un valore stringa.The character used to quote a string value. I delimitatori di colonne e righe tra virgolette sono considerati parte del valore stringa.The column and row delimiters inside the quote characters would be treated as part of the string value. Questa proprietà è applicabile sia ai set di dati di input che a quelli di output.This property is applicable to both input and output datasets.

Per una tabella, è possibile specificare sia escapeChar che quoteChar.You cannot specify both escapeChar and quoteChar for a table.
È consentito un solo carattere.Only one character is allowed. Nessun valore predefinito.No default value.

Ad esempio, se è presente una virgola (",") come delimitatore di colonna, ma si desidera inserire un carattere virgola nel testo (ad esempio: <Hello, world>), è possibile definire " (virgolette doppie) come carattere di virgolette e usare la stringa "Hello, world" nell'origine.For example, if you have comma (',') as the column delimiter but you want to have comma character in the text (example: <Hello, world>), you can define " (double quote) as the quote character and use the string "Hello, world" in the source.
NoNo
nullValuenullValue Uno o più caratteri usati per rappresentare un valore null.One or more characters used to represent a null value. Uno o più caratteri.One or more characters. I valori predefiniti sono "\N" e "NULL" in lettura e "\N" in scrittura.The default values are "\N" and "NULL" on read and "\N" on write. NoNo
encodingNameencodingName Specificare il nome della codifica.Specify the encoding name. Un nome di codifica valido.A valid encoding name. Vedere Proprietà Encoding.EncodingName.see Encoding.EncodingName Property. Esempio: windows-1250 o shift_jis.Example: windows-1250 or shift_jis. Il valore predefinito è UTF-8.The default value is UTF-8. NoNo
firstRowAsHeaderfirstRowAsHeader Specifica se considerare la prima riga come intestazione.Specifies whether to consider the first row as a header. In un set di dati di input Data factory legge la prima riga come intestazione.For an input dataset, Data Factory reads first row as a header. In un set di dati di output Data factory scrive la prima riga come intestazione.For an output dataset, Data Factory writes first row as a header.

Vedere Scenari per l'uso di firstRowAsHeader e skipLineCount per gli scenari di esempio.See Scenarios for using firstRowAsHeader and skipLineCount for sample scenarios.
VeroTrue
False (impostazione predefinita)False (default)
NoNo
skipLineCountskipLineCount Indica il numero di righe non vuote da ignorare durante la lettura di dati da file di input.Indicates the number of non-empty rows to skip when reading data from input files. Se sono specificati sia skipLineCount che firstRowAsHeader, le righe vengono ignorate e le informazioni di intestazione vengono lette dal file di input.If both skipLineCount and firstRowAsHeader are specified, the lines are skipped first and then the header information is read from the input file.

Vedere Scenari per l'uso di firstRowAsHeader e skipLineCount per gli scenari di esempio.See Scenarios for using firstRowAsHeader and skipLineCount for sample scenarios.
IntegerInteger NoNo
treatEmptyAsNulltreatEmptyAsNull Specifica se considerare una stringa vuota o null come valore null durante la lettura di dati da un file di input.Specifies whether to treat null or empty string as a null value when reading data from an input file. True (impostazione predefinita)True (default)
FalsoFalse
NoNo

Esempio di TextFormatTextFormat example

Nella definizione JSON seguente per un set di dati sono specificate alcune proprietà facoltative.In the following JSON definition for a dataset, some of the optional properties are specified.

"typeProperties":
{
    "folderPath": "mycontainer/myfolder",
    "fileName": "myblobname",
    "format":
    {
        "type": "TextFormat",
        "columnDelimiter": ",",
        "rowDelimiter": ";",
        "quoteChar": "\"",
        "NullValue": "NaN",
        "firstRowAsHeader": true,
        "skipLineCount": 0,
        "treatEmptyAsNull": true
    }
},

Per usare escapeChar invece di quoteChar, sostituire la riga con quoteChar con l'elemento escapeChar seguente:To use an escapeChar instead of quoteChar, replace the line with quoteChar with the following escapeChar:

"escapeChar": "$",

Scenari di utilizzo di firstRowAsHeader e skipLineCountScenarios for using firstRowAsHeader and skipLineCount

  • Si desidera copiare da un'origine non basata su file in un file di testo e aggiungere una riga di intestazione contenente i metadati dello schema (ad esempio: schema SQL).You are copying from a non-file source to a text file and would like to add a header line containing the schema metadata (for example: SQL schema). Per questo scenario specificare firstRowAsHeader come true nel set di dati di output.Specify firstRowAsHeader as true in the output dataset for this scenario.
  • Si desidera copiare da un file di testo contenente una riga di intestazione a un sink non basato su file ed eliminare tale riga.You are copying from a text file containing a header line to a non-file sink and would like to drop that line. Specificare firstRowAsHeader come true nel set di dati di input.Specify firstRowAsHeader as true in the input dataset.
  • Si desidera copiare da un file di testo e ignorare alcune righe all'inizio che non contengono né dati né un'intestazione.You are copying from a text file and want to skip a few lines at the beginning that contain no data or header information. Specificare skipLineCount per indicare il numero di righe da ignorare.Specify skipLineCount to indicate the number of lines to be skipped. Se il resto del file contiene una riga di intestazione, è anche possibile specificare firstRowAsHeader.If the rest of the file contains a header line, you can also specify firstRowAsHeader. Se sono specificati sia skipLineCount che firstRowAsHeader, le righe vengono ignorate e le informazioni di intestazione vengono lette dal file di input.If both skipLineCount and firstRowAsHeader are specified, the lines are skipped first and then the header information is read from the input file

Formato JSONJSON format

Nota

Data Factory introdotto un nuovo set di dati in formato JSON, vedere l'articolo JSON con i dettagli.Data Factory introduced new JSON format dataset, see JSON article with details. Le configurazioni seguenti nel set di dati dell'archivio dati basato su file sono ancora supportate così come sono per le Compabitility precedenti.The following configurations on file-based data store dataset is still supported as-is for backward compabitility. Si consiglia di utilizzare il nuovo modello in futuro.You are suggested to use the new model going forward.

Per importare/esportare un file JSON senza modifiche in/da Azure Cosmos DB, vedere la sezione relativa all'importazione/esportazione di documenti JSON nell'articolo Move data to/from Azure Cosmos DB (Spostare dati da e verso Azure Cosmos DB).To import/export a JSON file as-is into/from Azure Cosmos DB, see Import/export JSON documents section in Move data to/from Azure Cosmos DB article.

Per analizzare i file JSON o scrivere i dati in formato JSON, impostare la proprietà type nella sezione format su JsonFormat.If you want to parse the JSON files or write the data in JSON format, set the type property in the format section to JsonFormat. È anche possibile specificare le proprietà facoltative seguenti nella sezione format.You can also specify the following optional properties in the format section. Vedere la sezione Esempio JsonFormat sulla configurazione.See JsonFormat example section on how to configure.

ProprietàProperty DescriptionDescription ObbligatoriaRequired
filePatternfilePattern Indicare il modello dei dati archiviati in ogni file JSON.Indicate the pattern of data stored in each JSON file. I valori consentiti sono: setOfObjects e arrayOfObjects.Allowed values are: setOfObjects and arrayOfObjects. Il valore predefinito è setOfObjects.The default value is setOfObjects. Vedere la sezione Modelli di file JSON per i dettagli su questi modelli.See JSON file patterns section for details about these patterns. NoNo
jsonNodeReferencejsonNodeReference Per eseguire l'iterazione dei dati ed estrarli dagli oggetti presenti nel campo di una matrice con lo stesso modello, specificare il percorso JSON di tale matrice.If you want to iterate and extract data from the objects inside an array field with the same pattern, specify the JSON path of that array. Questa proprietà è supportata solo quando si copiano dati da file JSON.This property is supported only when copying data from JSON files. NoNo
jsonPathDefinitionjsonPathDefinition Specificare l'espressione del percorso JSON per ogni mapping colonne con un nome di colonna personalizzato. Iniziare con una lettera minuscola.Specify the JSON path expression for each column mapping with a customized column name (start with lowercase). Questa proprietà è supportata solo quando si copiano dati da file JSON ed è possibile estrarre dati dall'oggetto o dalla matrice.This property is supported only when copying data from JSON files, and you can extract data from object or array.

Per i campi sotto l'oggetto radice, iniziare con la radice $. Per i campi nella matrice scelta dalla proprietà jsonNodeReference, iniziare dall'elemento matrice.For fields under root object, start with root $; for fields inside the array chosen by jsonNodeReference property, start from the array element. Vedere la sezione Esempio JsonFormat sulla configurazione.See JsonFormat example section on how to configure.
NoNo
encodingNameencodingName Specificare il nome della codifica.Specify the encoding name. Per l'elenco di nomi di codifica validi, vedere: Proprietà Encoding.EncodingName .For the list of valid encoding names, see: Encoding.EncodingName Property. Ad esempio: windows-1250 o shift_jis.For example: windows-1250 or shift_jis. Il valore predefinito è UTF-8.The default value is: UTF-8. NoNo
nestingSeparatornestingSeparator Carattere utilizzato per separare i livelli di nidificazione.Character that is used to separate nesting levels. Il valore predefinito è "." (punto).The default value is '.' (dot). NoNo

Nota

Per il caso di applicazione incrociata di dati in una matrice in più righe (caso 1-> esempio 2 in esempi di JsonFormat), è possibile scegliere di espandere solo una singola matrice utilizzando la proprietà jsonNodeReference.For the case of cross-apply data in array into multiple rows (case 1 -> sample 2 in JsonFormat examples), you can only choose to expand single array using property jsonNodeReference.

Modelli di file JSONJSON file patterns

L'attività di copia può eseguire l'analisi dei seguenti modelli di file JSON:Copy activity can parse the following patterns of JSON files:

  • Tipo I: setOfObjectsType I: setOfObjects

    Ogni file contiene un solo oggetto o più oggetti con delimitatori di riga/concatenati.Each file contains single object, or line-delimited/concatenated multiple objects. Quando si sceglie questa opzione in un set di dati di output, l'attività di copia produce un singolo file JSON con un oggetto per riga (delimitato da riga).When this option is chosen in an output dataset, copy activity produces a single JSON file with each object per line (line-delimited).

    • Esempio di JSON a oggetto singolosingle object JSON example

      {
          "time": "2015-04-29T07:12:20.9100000Z",
          "callingimsi": "466920403025604",
          "callingnum1": "678948008",
          "callingnum2": "567834760",
          "switch1": "China",
          "switch2": "Germany"
      }
      
    • Esempio di JSON con delimitatori di rigaline-delimited JSON example

      {"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"}
      
    • Esempio di JSON concatenaticoncatenated JSON example

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

    Ogni file contiene una matrice di oggetti.Each file contains an array of objects.

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

Esempio JsonFormatJsonFormat example

Caso 1: Copia di dati dai file JSONCase 1: Copying data from JSON files

Esempio 1: Estrarre i dati dall'oggetto e dalla matriceSample 1: extract data from object and array

In questo esempio si prevede che un oggetto JSON radice esegua il mapping a un singolo record in un risultato tabulare.In this sample, you expect one root JSON object maps to single record in tabular result. Se si dispone di un file JSON con il contenuto seguente:If you have a JSON file with the following content:

{
    "id": "ed0e4960-d9c5-11e6-85dc-d7996816aad3",
    "context": {
        "device": {
            "type": "PC"
        },
        "custom": {
            "dimensions": [
                {
                    "TargetResourceType": "Microsoft.Compute/virtualMachines"
                },
                {
                    "ResourceManagementProcessRunId": "827f8aaa-ab72-437c-ba48-d8917a7336a3"
                },
                {
                    "OccurrenceTime": "1/13/2017 11:24:37 AM"
                }
            ]
        }
    }
}

e lo si vuole copiare in una tabella SQL di Azure nel formato seguente, estraendo i dati sia dagli oggetti che dalla matrice:and you want to copy it into an Azure SQL table in the following format, by extracting data from both objects and array:

IDID deviceTypedeviceType targetResourceTypetargetResourceType resourceManagementProcessRunIdresourceManagementProcessRunId occurrenceTimeoccurrenceTime
ed0e4960-d9c5-11e6-85dc-d7996816aad3ed0e4960-d9c5-11e6-85dc-d7996816aad3 PCPC Microsoft.Compute/virtualMachinesMicrosoft.Compute/virtualMachines 827f8aaa-ab72-437c-ba48-d8917a7336a3827f8aaa-ab72-437c-ba48-d8917a7336a3 1/13/2017 11:24:37 AM1/13/2017 11:24:37 AM

Il set di dati di input con il tipo JsonFormat è definito come segue (definizione parziale che include solo le parti pertinenti).The input dataset with JsonFormat type is defined as follows: (partial definition with only the relevant parts). In particolare:More specifically:

  • La sezione structure definisce i nomi di colonna personalizzati e il tipo di dati corrispondente durante la conversione in dati tabulari.structure section defines the customized column names and the corresponding data type while converting to tabular data. Questa sezione è facoltativa a meno che non sia necessario eseguire il mapping colonne.This section is optional unless you need to do column mapping. Per altre informazioni, vedere Eseguire il mapping delle colonne del set di dati di origine alle colonne del set di dati di destinazione.For more information, see Map source dataset columns to destination dataset columns.
  • jsonPathDefinition specifica il percorso JSON per ogni colonna indicante da dove estrarre i dati.jsonPathDefinition specifies the JSON path for each column indicating where to extract the data from. Per copiare i dati dalla matrice, è possibile usare array[x].property per estrarre il valore della proprietà specificata dall'oggetto xth, oppure è possibile usare array[*].property per trovare il valore in qualsiasi oggetto contenente tale proprietà.To copy data from array, you can use array[x].property to extract value of the given property from the xth object, or you can use array[*].property to find the value from any object containing such property.
"properties": {
    "structure": [
        {
            "name": "id",
            "type": "String"
        },
        {
            "name": "deviceType",
            "type": "String"
        },
        {
            "name": "targetResourceType",
            "type": "String"
        },
        {
            "name": "resourceManagementProcessRunId",
            "type": "String"
        },
        {
            "name": "occurrenceTime",
            "type": "DateTime"
        }
    ],
    "typeProperties": {
        "folderPath": "mycontainer/myfolder",
        "format": {
            "type": "JsonFormat",
            "filePattern": "setOfObjects",
            "jsonPathDefinition": {"id": "$.id", "deviceType": "$.context.device.type", "targetResourceType": "$.context.custom.dimensions[0].TargetResourceType", "resourceManagementProcessRunId": "$.context.custom.dimensions[1].ResourceManagementProcessRunId", "occurrenceTime": " $.context.custom.dimensions[2].OccurrenceTime"}
        }
    }
}

Esempio 2: applicazione incrociata di più oggetti con lo stesso modello dalla matriceSample 2: cross apply multiple objects with the same pattern from array

In questo esempio si prevede di trasformare un oggetto JSON radice in più record in risultato tabulare.In this sample, you expect to transform one root JSON object into multiple records in tabular result. Se si dispone di un file JSON con il contenuto seguente:If you have a JSON file with the following content:

{
    "ordernumber": "01",
    "orderdate": "20170122",
    "orderlines": [
        {
            "prod": "p1",
            "price": 23
        },
        {
            "prod": "p2",
            "price": 13
        },
        {
            "prod": "p3",
            "price": 231
        }
    ],
    "city": [ { "sanmateo": "No 1" } ]
}

e lo si vuole copiare in una tabella SQL di Azure nel formato seguente, rendendo flat i dati nella matrice e nel crossjoin con le informazioni radice comuni:and you want to copy it into an Azure SQL table in the following format, by flattening the data inside the array and cross join with the common root info:

ordernumber orderdate order_pd order_price city
0101 2017012220170122 P1P1 2323 [{"sanmateo":"No 1"}]
0101 2017012220170122 P2P2 1313 [{"sanmateo":"No 1"}]
0101 2017012220170122 P3P3 231231 [{"sanmateo":"No 1"}]

Il set di dati di input con il tipo JsonFormat è definito come segue (definizione parziale che include solo le parti pertinenti).The input dataset with JsonFormat type is defined as follows: (partial definition with only the relevant parts). In particolare:More specifically:

  • La sezione structure definisce i nomi di colonna personalizzati e il tipo di dati corrispondente durante la conversione in dati tabulari.structure section defines the customized column names and the corresponding data type while converting to tabular data. Questa sezione è facoltativa a meno che non sia necessario eseguire il mapping colonne.This section is optional unless you need to do column mapping. Per altre informazioni, vedere Eseguire il mapping delle colonne del set di dati di origine alle colonne del set di dati di destinazione.For more information, see Map source dataset columns to destination dataset columns.
  • jsonNodeReference indica di seguire l'iterazione dei dati e di estrarli dagli oggetti con lo stesso modello sotto la matriceorderlines.jsonNodeReference indicates to iterate and extract data from the objects with the same pattern under array orderlines.
  • jsonPathDefinition specifica il percorso JSON per ogni colonna indicante da dove estrarre i dati.jsonPathDefinition specifies the JSON path for each column indicating where to extract the data from. In questo esempio ordernumber, orderdate e city sono sotto l'oggetto radice con il percorso JSON che inizia con $., mentre order_pd e order_price sono definiti con il percorso derivato dall'elemento matrice senza $..In this example, ordernumber, orderdate, and city are under root object with JSON path starting with $., while order_pd and order_price are defined with path derived from the array element without $..
"properties": {
    "structure": [
        {
            "name": "ordernumber",
            "type": "String"
        },
        {
            "name": "orderdate",
            "type": "String"
        },
        {
            "name": "order_pd",
            "type": "String"
        },
        {
            "name": "order_price",
            "type": "Int64"
        },
        {
            "name": "city",
            "type": "String"
        }
    ],
    "typeProperties": {
        "folderPath": "mycontainer/myfolder",
        "format": {
            "type": "JsonFormat",
            "filePattern": "setOfObjects",
            "jsonNodeReference": "$.orderlines",
            "jsonPathDefinition": {"ordernumber": "$.ordernumber", "orderdate": "$.orderdate", "order_pd": "prod", "order_price": "price", "city": " $.city"}
        }
    }
}

Tenere presente quanto segue:Note the following points:

  • Se structure e jsonPathDefinition non sono definite nel set di dati della data factory, l'attività di copia rileva lo schema dal primo oggetto e rende flat l'intero oggetto.If the structure and jsonPathDefinition are not defined in the Data Factory dataset, the Copy Activity detects the schema from the first object and flatten the whole object.
  • Se l'input JSON presenta una matrice, per impostazione predefinita, l'attività di copia converte l'intero valore della matrice in una stringa.If the JSON input has an array, by default the Copy Activity converts the entire array value into a string. È possibile scegliere di estrarre i dati usando jsonNodeReference e/o jsonPathDefinition oppure di ignorarlo non specificandolo in jsonPathDefinition.You can choose to extract data from it using jsonNodeReference and/or jsonPathDefinition, or skip it by not specifying it in jsonPathDefinition.
  • Se ci sono nomi duplicati allo stesso livello, l'attività di copia sceglie quello più recente.If there are duplicate names at the same level, the Copy Activity picks the last one.
  • I nomi delle proprietà distinguono tra maiuscole e minuscole.Property names are case-sensitive. Due proprietà con lo stesso nome ma con una combinazione differente di maiuscole e minuscole vengono considerate come due proprietà diverse.Two properties with same name but different casings are treated as two separate properties.

Caso 2: Scrittura dei dati nel file JSONCase 2: Writing data to JSON file

Se nel database SQL è presente la tabella seguente:If you have the following table in SQL Database:

IDID order_dateorder_date order_priceorder_price order_byorder_by
11 2017011920170119 20002000 DavidDavid
22 2017012020170120 35003500 PatrickPatrick
33 2017012120170121 40004000 JasonJason

e per ogni record si prevede di scrivere in un oggetto JSON nel formato seguente:and for each record, you expect to write to a JSON object in the following format:

{
    "id": "1",
    "order": {
        "date": "20170119",
        "price": 2000,
        "customer": "David"
    }
}

Il set di dati di output con il tipo JsonFormat è definito come segue (definizione parziale che include solo le parti pertinenti).The output dataset with JsonFormat type is defined as follows: (partial definition with only the relevant parts). Più in particolare, la sezione structure definisce i nomi di proprietà personalizzati nel file di destinazione e viene usato nestingSeparator (il valore predefinito è ".") per identificare il livello di annidamento dal nome.More specifically, structure section defines the customized property names in destination file, nestingSeparator (default is ".") are used to identify the nest layer from the name. Questa sezione è facoltativa a meno che non si voglia modificare il nome della proprietà confrontandolo con il nome della colonna di origine o annidare alcune delle proprietà.This section is optional unless you want to change the property name comparing with source column name, or nest some of the properties.

"properties": {
    "structure": [
        {
            "name": "id",
            "type": "String"
        },
        {
            "name": "order.date",
            "type": "String"
        },
        {
            "name": "order.price",
            "type": "Int64"
        },
        {
            "name": "order.customer",
            "type": "String"
        }
    ],
    "typeProperties": {
        "folderPath": "mycontainer/myfolder",
        "format": {
            "type": "JsonFormat"
        }
    }
}

Formato ParquetParquet format

Nota

Data Factory introdotto un nuovo set di dati in formato parquet, vedere l'articolo relativo al formato parquet con i dettagli.Data Factory introduced new Parquet format dataset, see Parquet format article with details. Le configurazioni seguenti nel set di dati dell'archivio dati basato su file sono ancora supportate così come sono per le Compabitility precedenti.The following configurations on file-based data store dataset is still supported as-is for backward compabitility. Si consiglia di utilizzare il nuovo modello in futuro.You are suggested to use the new model going forward.

Per analizzare i file Parquet o scrivere i dati in formato Parquet, impostare la proprietà format type su ParquetFormat.If you want to parse the Parquet files or write the data in Parquet format, set the format type property to ParquetFormat. Non è necessario specificare le proprietà nella sezione Format all'interno della sezione typeProperties.You do not need to specify any properties in the Format section within the typeProperties section. Esempio:Example:

"format":
{
    "type": "ParquetFormat"
}

Tenere presente quanto segue:Note the following points:

  • I tipi di dati complessi non sono supportati (MAP, LIST).Complex data types are not supported (MAP, LIST).
  • Spazi vuoti nel nome della colonna non sono supportati.White space in column name is not supported.
  • Un file Parquet ha le seguenti opzioni relative alla compressione: NONE, SNAPPY, GZIP e LZO.Parquet file has the following compression-related options: NONE, SNAPPY, GZIP, and LZO. Data Factory supporta la lettura dei dati dal file Parquet in uno di questi formati compressi tranne LZO. Per leggere i dati, usa il codec di compressione dei metadati.Data Factory supports reading data from Parquet file in any of these compressed formats except LZO - it uses the compression codec in the metadata to read the data. Tuttavia, durante la scrittura in un file Parquet, Data Factory sceglie SNAPPY, cioè il valore predefinito per il formato Parquet.However, when writing to a Parquet file, Data Factory chooses SNAPPY, which is the default for Parquet format. Al momento non esiste alcuna opzione per ignorare tale comportamento.Currently, there is no option to override this behavior.

Importante

Per le copie attivate dal runtime di integrazione self-hosted, ad esempio tra l'archivio dati locale e quello nel cloud, se non si esegue una copia identica dei file Parquet, è necessario installare JRE 8 (Java Runtime Environment) a 64 bit o OpenJDK nel computer del runtime di integrazione.For copy empowered by Self-hosted Integration Runtime e.g. between on-premises and cloud data stores, if you are not copying Parquet files as-is, you need to install the 64-bit JRE 8 (Java Runtime Environment) or OpenJDK on your IR machine. Per informazioni più dettagliate, vedere il paragrafo seguente.See the following paragraph with more details.

Per la copia in esecuzione nel runtime di integrazione self-hosted con la serializzazione/deserializzazione dei file Parquet, il file di definizione dell'applicazione (AFD) individua il runtime Java eseguendo prima una ricerca di JRE nel Registro di sistema (SOFTWARE\JavaSoft\Java Runtime Environment\{Current Version}\JavaHome) . In caso di esito negativo, esegue una ricerca di OpenJDK nella variabile di sistema JAVA_HOME .For copy running on Self-hosted IR with Parquet file serialization/deserialization, ADF locates the Java runtime by firstly checking the registry (SOFTWARE\JavaSoft\Java Runtime Environment\{Current Version}\JavaHome) for JRE, if not found, secondly checking system variable JAVA_HOME for OpenJDK.

  • Per usare JRE: il runtime di integrazione a 64 bit richiede jre a 64 bit.To use JRE: The 64-bit IR requires 64-bit JRE. disponibile qui.You can find it from here.
  • Per usare OpenJDK: è supportato a partire dalla versione 3.13 del runtime di integrazione.To use OpenJDK: it's supported since IR version 3.13. Includere jvm.dll in un pacchetto con tutti gli altri assembly necessari di OpenJDK nel computer del runtime di integrazione self-hosted e impostare di conseguenza la variabile di ambiente di sistema JAVA_HOME.Package the jvm.dll with all other required assemblies of OpenJDK into Self-hosted IR machine, and set system environment variable JAVA_HOME accordingly.

Suggerimento

Se si copiano i dati nel/dal formato Parquet usando il runtime di integrazione self-hosted e si verifica l'errore "An error occurred when invoking java, message: java.lang.OutOfMemoryError:Java heap space" (Errore durante la chiamata di Java, messaggio: java.lang.OutOfMemoryError: spazio dell'heap di Java), è possibile aggiungere una variabile di ambiente _JAVA_OPTIONS nel computer che ospita il runtime di integrazione self-hosted per regolare le dimensioni min/max dell'heap per JVM e poter ottimizzare la copia, quindi eseguire di nuovo la pipeline.If you copy data to/from Parquet format using Self-hosted Integration Runtime and hit error saying "An error occurred when invoking java, message: java.lang.OutOfMemoryError:Java heap space", you can add an environment variable _JAVA_OPTIONS in the machine that hosts the Self-hosted IR to adjust the min/max heap size for JVM to empower such copy, then rerun the pipeline.

Impostare le dimensioni dell'heap JVM nel runtime di integrazione self-hosted

Esempio: impostare la variabile _JAVA_OPTIONS con il valore -Xms256m -Xmx16g.Example: set variable _JAVA_OPTIONS with value -Xms256m -Xmx16g. Il flag Xms specifica il pool di allocazione della memoria iniziale per Java Virtual Machine (JVM), mentre Xmx specifica il pool di allocazione della memoria massima.The flag Xms specifies the initial memory allocation pool for a Java Virtual Machine (JVM), while Xmx specifies the maximum memory allocation pool. JVM verrà quindi avviato con una quantità di memoria pari a Xms e potrà usare una quantità massima di memoria pari a Xmx.This means that JVM will be started with Xms amount of memory and will be able to use a maximum of Xmx amount of memory. Per impostazione predefinita, Azure Data Factory usa una quantità di memoria minima pari a 64 MB e una quantità di memoria massima pari a 1 GB.By default, ADF use min 64MB and max 1G.

Mapping dei tipi di dati per i file ParquetData type mapping for Parquet files

Tipo di dati provvisori di Data FactoryData factory interim data type Tipo Parquet primitivoParquet Primitive Type Tipo Parquet originale (deserializzazione)Parquet Original Type (Deserialize) Tipo Parquet originale (serializzazione)Parquet Original Type (Serialize)
booleanBoolean booleanBoolean N/DN/A N/DN/A
SByteSByte Int32Int32 Int8Int8 Int8Int8
ByteByte Int32Int32 UInt8UInt8 Int16Int16
Int16Int16 Int32Int32 Int16Int16 Int16Int16
UInt16UInt16 Int32Int32 UInt16UInt16 Int32Int32
Int32Int32 Int32Int32 Int32Int32 Int32Int32
UInt32UInt32 Int64Int64 UInt32UInt32 Int64Int64
Int64Int64 Int64Int64 Int64Int64 Int64Int64
UInt64UInt64 Int64/BinaryInt64/Binary UInt64UInt64 DECIMALDecimal
SingoloSingle FloatFloat N/DN/A N/DN/A
DOUBLEDouble DOUBLEDouble N/DN/A N/DN/A
DECIMALDecimal BinaryBinary DECIMALDecimal DECIMALDecimal
StringaString BinaryBinary Utf8Utf8 Utf8Utf8
Data e oraDateTime Int96Int96 N/DN/A N/DN/A
Intervallo di tempoTimeSpan Int96Int96 N/DN/A N/DN/A
DateTimeOffsetDateTimeOffset Int96Int96 N/DN/A N/DN/A
ByteArrayByteArray BinaryBinary N/DN/A N/DN/A
GUIDGuid BinaryBinary Utf8Utf8 Utf8Utf8
CharChar BinaryBinary Utf8Utf8 Utf8Utf8
CharArrayCharArray Supporto non disponibileNot supported N/DN/A N/DN/A

Formato ORCORC format

Nota

Data Factory introdotto un nuovo set di dati in formato ORC, vedere l'articolo relativo al formato ORC con i dettagli.Data Factory introduced new ORC format dataset, see ORC format article with details. Le configurazioni seguenti nel set di dati dell'archivio dati basato su file sono ancora supportate così come sono per le Compabitility precedenti.The following configurations on file-based data store dataset is still supported as-is for backward compabitility. Si consiglia di utilizzare il nuovo modello in futuro.You are suggested to use the new model going forward.

Per analizzare i file ORC o scrivere i dati in formato ORC, impostare la proprietà format type su OrcFormat.If you want to parse the ORC files or write the data in ORC format, set the format type property to OrcFormat. Non è necessario specificare le proprietà nella sezione Format all'interno della sezione typeProperties.You do not need to specify any properties in the Format section within the typeProperties section. Esempio:Example:

"format":
{
    "type": "OrcFormat"
}

Tenere presente quanto segue:Note the following points:

  • I tipi di dati complessi non sono supportati (STRUCT, MAP, LIST, UNION).Complex data types are not supported (STRUCT, MAP, LIST, UNION).
  • Spazi vuoti nel nome della colonna non sono supportati.White space in column name is not supported.
  • Il file ORC dispone di tre opzioni relative alla compressione: NONE, ZLIB, SNAPPY.ORC file has three compression-related options: NONE, ZLIB, SNAPPY. Data Factory supporta la lettura dei dati dal file ORC in uno di questi formati compressi.Data Factory supports reading data from ORC file in any of these compressed formats. Per leggere i dati, Data Factoy usa la compressione codec dei metadati.It uses the compression codec is in the metadata to read the data. Tuttavia, durante la scrittura in un file ORC, Data Factory sceglie ZLIB che è il valore predefinito per ORC.However, when writing to an ORC file, Data Factory chooses ZLIB, which is the default for ORC. Al momento non esiste alcuna opzione per ignorare tale comportamento.Currently, there is no option to override this behavior.

Importante

Per le copie attivate dal runtime di integrazione self-hosted, ad esempio tra l'archivio dati locale e quello nel cloud, se non si esegue una copia identica dei file ORC, è necessario installare JRE 8 (Java Runtime Environment) a 64 bit o OpenJDK nel computer del runtime di integrazione.For copy empowered by Self-hosted Integration Runtime e.g. between on-premises and cloud data stores, if you are not copying ORC files as-is, you need to install the 64-bit JRE 8 (Java Runtime Environment) or OpenJDK on your IR machine. Per informazioni più dettagliate, vedere il paragrafo seguente.See the following paragraph with more details.

Per la copia in esecuzione nel runtime di integrazione self-hosted con la serializzazione/deserializzazione dei file ORC, il file di definizione dell'applicazione (AFD) individua il runtime Java eseguendo prima una ricerca di JRE nel Registro di sistema (SOFTWARE\JavaSoft\Java Runtime Environment\{Current Version}\JavaHome) . In caso di esito negativo, esegue una ricerca di OpenJDK nella variabile di sistema JAVA_HOME .For copy running on Self-hosted IR with ORC file serialization/deserialization, ADF locates the Java runtime by firstly checking the registry (SOFTWARE\JavaSoft\Java Runtime Environment\{Current Version}\JavaHome) for JRE, if not found, secondly checking system variable JAVA_HOME for OpenJDK.

  • Per usare JRE: il runtime di integrazione a 64 bit richiede jre a 64 bit.To use JRE: The 64-bit IR requires 64-bit JRE. disponibile qui.You can find it from here.
  • Per usare OpenJDK: è supportato a partire dalla versione 3.13 del runtime di integrazione.To use OpenJDK: it's supported since IR version 3.13. Includere jvm.dll in un pacchetto con tutti gli altri assembly necessari di OpenJDK nel computer del runtime di integrazione self-hosted e impostare di conseguenza la variabile di ambiente di sistema JAVA_HOME.Package the jvm.dll with all other required assemblies of OpenJDK into Self-hosted IR machine, and set system environment variable JAVA_HOME accordingly.

Mapping dei tipi di dati per i file ORCData type mapping for ORC files

Tipo di dati provvisori di Data FactoryData factory interim data type Tipi ORCORC types
booleanBoolean booleanBoolean
SByteSByte ByteByte
ByteByte BreveShort
Int16Int16 BreveShort
UInt16UInt16 IntInt
Int32Int32 IntInt
UInt32UInt32 LungoLong
Int64Int64 LungoLong
UInt64UInt64 StringaString
SingoloSingle FloatFloat
DOUBLEDouble DOUBLEDouble
DECIMALDecimal DECIMALDecimal
StringaString StringaString
Data e oraDateTime TimestampTimestamp
DateTimeOffsetDateTimeOffset TimestampTimestamp
Intervallo di tempoTimeSpan TimestampTimestamp
ByteArrayByteArray BinaryBinary
GUIDGuid StringaString
CharChar Char(1)Char(1)

Formato AVROAVRO format

Nota

Data Factory introdotto un nuovo set di dati in formato Avro, vedere l'articolo relativo al formato avri con i dettagli.Data Factory introduced new Avro format dataset, see Avri format article with details. Le configurazioni seguenti nel set di dati dell'archivio dati basato su file sono ancora supportate così come sono per le Compabitility precedenti.The following configurations on file-based data store dataset is still supported as-is for backward compabitility. Si consiglia di utilizzare il nuovo modello in futuro.You are suggested to use the new model going forward.

Per analizzare i file Avro o scrivere i dati in formato Avro, impostare la proprietà format type su AvroFormat.If you want to parse the Avro files or write the data in Avro format, set the format type property to AvroFormat. Non è necessario specificare le proprietà nella sezione Format all'interno della sezione typeProperties.You do not need to specify any properties in the Format section within the typeProperties section. Esempio:Example:

"format":
{
    "type": "AvroFormat",
}

Per usare il formato Avro in una tabella Hive, fare riferimento all' esercitazione su Apache Hive.To use Avro format in a Hive table, you can refer to Apache Hive’s tutorial.

Tenere presente quanto segue:Note the following points:

Formato binarioBinary format

Per informazioni dettagliate, vedere l'articolo formato binario .Refer to Binary format article on details.

Supporto della compressioneCompression support

Azure Data Factory supporta la compressione/decompressione dei dati durante la copia.Azure Data Factory supports compress/decompress data during copy. Quando si specifica una proprietà compression in un set di dati di input, l'attività di copia legge i dati compressi dall'origine e li decomprime. Quando si specifica la proprietà in un set di dati di output, l'attività di copia comprime e quindi scrive i dati nel sink.When you specify compression property in an input dataset, the copy activity read the compressed data from the source and decompress it; and when you specify the property in an output dataset, the copy activity compress then write data to the sink. Di seguito vengono forniti alcuni scenari di esempio:Here are a few sample scenarios:

  • Leggere i dati compressi GZIP da un BLOB di Azure, decomprimerli e scrivere i dati del risultato in un database SQL di Azure.Read GZIP compressed data from an Azure blob, decompress it, and write result data to an Azure SQL database. Definire il set di dati di input del BLOB di Azure con la proprietà compression type impostata su GZIP.You define the input Azure Blob dataset with the compression type property as GZIP.
  • Leggere i dati da un file di testo normale dal file system locale, comprimerli usando il formato GZIP e scrivere i dati compressi in un BLOB di Azure.Read data from a plain-text file from on-premises File System, compress it using GZip format, and write the compressed data to an Azure blob. Definire il set di dati di output del BLOB di Azure con la proprietà compression type impostata su GZIP.You define an output Azure Blob dataset with the compression type property as GZip.
  • Leggere il file con estensione zip dal server FTP, decomprimerlo per ottenere i file all'interno e inserire i file in Azure Data Lake Store.Read .zip file from FTP server, decompress it to get the files inside, and land those files in Azure Data Lake Store. Definire un set di dati FTP di input con la proprietà compression type impostata su ZipDeflate.You define an input FTP dataset with the compression type property as ZipDeflate.
  • Leggere i dati compressi GZIP da un BLOB di Azure, decomprimerli, comprimerli usando BZIP2 e scrivere i dati del risultato in un BLOB di Azure.Read a GZIP-compressed data from an Azure blob, decompress it, compress it using BZIP2, and write result data to an Azure blob. Definire il set di dati di input del BLOB di Azure con compression type impostato su GZIP e il set di dati di output con compression type impostato su BZIP2.You define the input Azure Blob dataset with compression type set to GZIP and the output dataset with compression type set to BZIP2.

Per specificare la compressione per un set di dati, usare la proprietà compression nel set di dati JSON come illustrato di seguito:To specify compression for a dataset, use the compression property in the dataset JSON as in the following example:

{
    "name": "AzureBlobDataSet",
    "properties": {
        "type": "AzureBlob",
        "linkedServiceName": {
            "referenceName": "StorageLinkedService",
            "type": "LinkedServiceReference"
        },
        "typeProperties": {
            "fileName": "pagecounts.csv.gz",
            "folderPath": "compression/file/",
            "format": {
                "type": "TextFormat"
            },
            "compression": {
                "type": "GZip",
                "level": "Optimal"
            }
        }
    }
}

La sezione compression ha due proprietà:The compression section has two properties:

  • Type: codec di compressione, che può essere GZIP, Deflate, BZIP2 o ZipDeflate.Type: the compression codec, which can be GZIP, Deflate, BZIP2, or ZipDeflate.

  • Level: rapporto di compressione, che può essere Optimal o Fastest.Level: the compression ratio, which can be Optimal or Fastest.

    • Fastest: l'operazione di compressione deve essere completata il più rapidamente possibile, anche se il file risultante non viene compresso in modo ottimale.Fastest: The compression operation should complete as quickly as possible, even if the resulting file is not optimally compressed.

    • Optimal: l'operazione di compressione deve comprimere il file in modo ottimale, anche se il completamento richiede più tempo.Optimal: The compression operation should be optimally compressed, even if the operation takes a longer time to complete.

      Per maggiori informazioni, vedere l'argomento relativo al livello di compressione .For more information, see Compression Level topic.

Nota

Le impostazioni di compressione non sono attualmente supportate per i dati in AvroFormat, OrcFormat o ParquetFormat.Compression settings are not supported for data in the AvroFormat, OrcFormat, or ParquetFormat. Quando si leggono file in questi formati, Data Factory rileva e usa il codec di compressione nei metadati.When reading files in these formats, Data Factory detects and uses the compression codec in the metadata. Quando si scrive in un file che si presenta in uno di questi formati, Data Factory sceglie il codice di compressione predefinito per il formato specifico.When writing to files in these formats, Data Factory chooses the default compression codec for that format. ad esempio ZLIB per OrcFormat e SNAPPY per ParquetFormat.For example, ZLIB for OrcFormat and SNAPPY for ParquetFormat.

Tipi di file e formati di compressione non supportatiUnsupported file types and compression formats

È possibile utilizzare le funzionalità di estendibilità di Azure Data Factory per trasformare i file non supportati.You can use the extensibility features of Azure Data Factory to transform files that aren't supported. Due opzioni includono funzioni di Azure e attività personalizzate usando Azure Batch.Two options include Azure Functions and custom tasks by using Azure Batch.

È possibile vedere un esempio che usa una funzione di Azure per estrarre il contenuto di un file tar.You can see a sample that uses an Azure function to extract the contents of a tar file. Per altre informazioni, vedere attività di funzioni di Azure.For more information, see Azure Functions activity.

È anche possibile compilare questa funzionalità usando un'attività DotNet personalizzata.You can also build this functionality using a custom dotnet activity. Altre informazioni sono disponibili quiFurther information is available here

Passaggi successiviNext steps

Per gli archivi dati basati su file supportati da Azure Data Factory, vedere i seguenti articoli:See the following articles for file-based data stores supported by Azure Data Factory: