Formati di file e codec di compressione supportati in Azure Data Factory e Synapse Analytics (legacy)

SI APPLICA A: Azure Data Factory Azure Synapse Analytics

Suggerimento

Provare Data Factory in Microsoft Fabric, una soluzione di analisi completa per le aziende. Microsoft Fabric copre tutti gli elementi, dallo spostamento dei dati all'analisi scientifica dei dati, all'analisi in tempo reale, alla business intelligence e alla creazione di report. Scopri come avviare gratuitamente una nuova versione di valutazione .

Questo articolo si applica ai connettori seguenti: Amazon S3, BLOB di Azure, Azure Data Lake Archiviazione Gen1, Azure Data Lake Archiviazione Gen2, File di Azure, File System, FTP, Google Cloud Archiviazione, HDFS, HTTPe SFTP.

Importante

Il servizio ha introdotto il nuovo modello di set di dati basato sul formato, vedere l'articolo relativo al formato con i dettagli:
- Formato Avro
- Formato binario
- Formato testo delimitato
- Formato JSON
- Formato ORC
- Formato Parquet
Le altre configurazioni indicate in questo articolo sono ancora supportate così com'è per la compabitilità all'indietro. Si consiglia di usare il nuovo modello in futuro.

Formato testo (legacy)

Nota

Informazioni sul nuovo modello dall'articolo Formato testo delimitato. Le configurazioni seguenti nel set di dati dell'archivio dati basato su file sono ancora supportate così com'è per la compabitilità all'indietro. Si consiglia di usare il nuovo modello in futuro.

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. È anche possibile specificare le proprietà facoltative seguenti nella sezione format. Vedere la sezione Esempio di TextFormat sulla configurazione.

Proprietà Descrizione Valori consentiti Richiesto
columnDelimiter Il carattere usato per separare le colonne in un file. È possibile usare un carattere non stampabile raro che potrebbe non esistere nei dati. Ad esempio, specificare "\u0001", che rappresenta l'inizio intestazione (SOH). È consentito un solo carattere. Il valore predefinito è la virgola (",").

Per usare un carattere Unicode, vedere i caratteri Unicode per ottenere il codice corrispondente.
No
rowDelimiter carattere usato per separare le righe in un file. È consentito un solo carattere. Sono consentiti i seguenti valori predefiniti in lettura: ["\r\n", "\r", "\n"] e "\r\n" in scrittura. No
escapeChar carattere speciale usato per eseguire l'escape di un delimitatore di colonna nel contenuto del file di input.

Non è possibile specificare sia escapeChar sia quoteChar per una tabella.
È consentito un solo carattere. Nessun valore predefinito.

Esempio: se è presente una virgola (',') come delimitatore di colonna, ma si vuole avere il carattere virgola nel testo (ad esempio: "Hello, world"), è possibile definire '$' come carattere di escape e usare la stringa "Hello$, world" nell'origine.
No
quoteChar carattere usato per inserire un valore stringa tra virgolette. I delimitatori di riga e colonna all'interno delle virgolette sono considerati come parte del valore della stringa. Questa proprietà è applicabile ai set di dati di input e di output.

Non è possibile specificare sia escapeChar sia quoteChar per una tabella.
È consentito un solo carattere. Nessun valore predefinito.

Ad esempio, se si dispone di una virgola (',') come delimitatore di colonna, ma si vuole avere un carattere virgola nel testo (ad esempio: <Hello, world>), è possibile definire " (virgolette doppie) come carattere virgolette e usare la stringa "Hello, world" nell'origine.
No
nullValue uno o più caratteri usati per rappresentare un valore null. Uno o più caratteri. I valori predefiniti sono "\N" e "NULL" in lettura e "\N" in scrittura. No
encodingName specifica il nome della codifica. Un nome di codifica valido. Vedere Proprietà Encoding.EncodingName. Esempio: windows-1250 o shift_jis. Il valore predefinito è UTF-8. No
firstRowAsHeader Specifica se considerare la prima riga come intestazione. Per un set di dati di input, il servizio legge la prima riga come intestazione. Per un set di dati di output, il servizio scrive la prima riga come intestazione.

Vedere Scenari per l'uso di firstRowAsHeader e skipLineCount per gli scenari di esempio.
True
False (impostazione predefinita)
No
skipLineCount Indica il numero di righe non vuote da ignorare durante la lettura di dati da file di input. Se vengono specificati sia skipLineCount che firstRowAsHeader, le righe vengono ignorate e quindi le informazioni dell'intestazione vengono lette dal file di input.

Vedere Scenari per l'uso di firstRowAsHeader e skipLineCount per gli scenari di esempio.
Integer No
treatEmptyAsNull specifica se considerare una stringa null o vuota come valore null durante la lettura dei dati da un file di input. True (impostazione predefinita)
False
No

Esempio di TextFormat

Nella definizione JSON seguente per un set di dati sono specificate alcune proprietà facoltative.

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

"escapeChar": "$",

Scenari di utilizzo di firstRowAsHeader e 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). Per questo scenario specificare firstRowAsHeader come true nel set di dati di output.
  • Si desidera copiare da un file di testo contenente una riga di intestazione a un sink non basato su file ed eliminare tale riga. Specificare firstRowAsHeader come true nel set di dati di input.
  • Si desidera copiare da un file di testo e ignorare alcune righe all'inizio che non contengono né dati né un'intestazione. Specificare skipLineCount per indicare il numero di righe da ignorare. Se il resto del file contiene una riga di intestazione, è anche possibile specificare firstRowAsHeader. Se sono specificati sia skipLineCount che firstRowAsHeader, le righe vengono ignorate e le informazioni di intestazione vengono lette dal file di input.

Formato JSON (legacy)

Nota

Informazioni sul nuovo modello dall'articolo formato JSON. Le configurazioni seguenti nel set di dati dell'archivio dati basato su file sono ancora supportate così com'è per la compabitilità all'indietro. Si consiglia di usare il nuovo modello in futuro.

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).

Per analizzare i file JSON o scrivere i dati in formato JSON, impostare la proprietà type nella sezione format su JsonFormat. È anche possibile specificare le proprietà facoltative seguenti nella sezione format. Vedere la sezione Esempio JsonFormat sulla configurazione.

Proprietà Descrizione Richiesto
filePattern Indicare il modello dei dati archiviati in ogni file JSON. I valori consentiti sono: setOfObjects e arrayOfObjects. Il valore predefinito è setOfObjects. Vedere la sezione Modelli di file JSON per i dettagli su questi modelli. No
jsonNodeReference 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. Questa proprietà è supportata solo quando si copiano dati da file JSON. No
jsonPathDefinition Specificare l'espressione del percorso JSON per ogni mapping colonne con un nome di colonna personalizzato. Iniziare con una lettera minuscola. Questa proprietà è supportata solo quando si copiano dati da file JSON ed è possibile estrarre dati dall'oggetto o dalla matrice.

Per i campi sotto l'oggetto radice, iniziare con la radice $. Per i campi nella matrice scelta dalla proprietà jsonNodeReference, iniziare dall'elemento matrice. Vedere la sezione Esempio JsonFormat sulla configurazione.
No
encodingName specifica il nome della codifica. Per l'elenco di nomi di codifica validi, vedere: Proprietà Encoding.EncodingName . Ad esempio: windows-1250 o shift_jis. Il valore predefinito è UTF-8. No
nestingSeparator Carattere utilizzato per separare i livelli di nidificazione. Il valore predefinito è "." (punto). No

Nota

Per il caso di applicare dati incrociati nella matrice in più righe (caso 1 -> esempio 2 negli esempi JsonFormat), è possibile scegliere di espandere una singola matrice usando la proprietà jsonNodeReference.

Modelli di file JSON

L'attività di copia può eseguire l'analisi dei seguenti modelli di file JSON:

  • Tipo I: setOfObjects

    Ogni file contiene un solo oggetto o più oggetti con delimitatori di riga/concatenati. 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).

    • Esempio di JSON a oggetto singolo

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

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

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

    Ogni file contiene una matrice di oggetti.

    [
        {
            "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 JsonFormat

Caso 1: Copia di dati dai file JSON

Esempio 1: Estrarre i dati dall'oggetto e dalla matrice

In questo esempio si prevede che un oggetto JSON radice esegua il mapping a un singolo record in un risultato tabulare. Se si dispone di un file JSON con il contenuto seguente:

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

ID deviceType targetResourceType resourceManagementProcessRunId occurrenceTime
ed0e4960-d9c5-11e6-85dc-d7996816aad3 PC Microsoft.Compute/virtualMachines 827f8aaa-ab72-437c-ba48-d8917a7336a3 1/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). In particolare:

  • La sezione structure definisce i nomi di colonna personalizzati e il tipo di dati corrispondente durante la conversione in dati tabulari. Questa sezione è facoltativa a meno che non sia necessario eseguire il mapping colonne. Per altre informazioni, vedere Eseguire il mapping delle colonne del set di dati di origine alle colonne del set di dati di destinazione.
  • jsonPathDefinition specifica il percorso JSON per ogni colonna indicante da dove estrarre i dati. 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à.
"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 matrice

In questo esempio si prevede di trasformare un oggetto JSON radice in più record in risultato tabulare. Se si dispone di un file JSON con il contenuto seguente:

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

ordernumber orderdate order_pd order_price city
01 20170122 P1 23 [{"sanmateo":"No 1"}]
01 20170122 P2 13 [{"sanmateo":"No 1"}]
01 20170122 P3 231 [{"sanmateo":"No 1"}]

Il set di dati di input con il tipo JsonFormat è definito come segue (definizione parziale che include solo le parti pertinenti). In particolare:

  • La sezione structure definisce i nomi di colonna personalizzati e il tipo di dati corrispondente durante la conversione in dati tabulari. Questa sezione è facoltativa a meno che non sia necessario eseguire il mapping colonne. Per altre informazioni, vedere Eseguire il mapping delle colonne del set di dati di origine alle colonne del set di dati di destinazione.
  • jsonNodeReference indica di seguire l'iterazione dei dati e di estrarli dagli oggetti con lo stesso modello sotto la matriceorderlines.
  • jsonPathDefinition specifica il percorso JSON per ogni colonna indicante da dove estrarre i dati. 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 $..
"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:

  • structure Se e jsonPathDefinition non sono definiti nel set di dati, l'attività di copia rileva lo schema dal primo oggetto e appiattisce l'intero oggetto.
  • Se l'input JSON presenta una matrice, per impostazione predefinita, l'attività di copia converte l'intero valore della matrice in una stringa. È possibile scegliere di estrarre i dati usando jsonNodeReference e/o jsonPathDefinition oppure di ignorarlo non specificandolo in jsonPathDefinition.
  • Se ci sono nomi duplicati allo stesso livello, l'attività di copia sceglie quello più recente.
  • I nomi delle proprietà distinguono tra maiuscole e minuscole. Due proprietà con lo stesso nome ma con una combinazione differente di maiuscole e minuscole vengono considerate come due proprietà diverse.

Caso 2: Scrittura dei dati nel file JSON

Se nel database SQL è presente la tabella seguente:

ID order_date order_price ordina per
1 20170119 2000 David
2 20170120 3500 Patrick
3 20170121 4000 Jason

e per ogni record si prevede di scrivere in un oggetto JSON nel formato seguente:

{
    "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). 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. 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à.

"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 Parquet (legacy)

Nota

Informazioni sul nuovo modello dall'articolo formato Parquet. Le configurazioni seguenti nel set di dati dell'archivio dati basato su file sono ancora supportate così com'è per la compabitilità all'indietro. Si consiglia di usare il nuovo modello in futuro.

Per analizzare i file Parquet o scrivere i dati in formato Parquet, impostare la proprietà formattype su ParquetFormat. Non è necessario specificare le proprietà nella sezione Format all'interno della sezione typeProperties. Esempio:

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

Notare i punti seguenti:

  • I tipi di dati complessi non sono supportati (MAP, LIST).
  • Spazi vuoti nel nome della colonna non sono supportati.
  • Un file Parquet ha le seguenti opzioni relative alla compressione: NONE, SNAPPY, GZIP e LZO. Il servizio supporta la lettura dei dati dal file Parquet in uno di questi formati compressi, ad eccezione di LZO, che usa il codec di compressione nei metadati per leggere i dati. Tuttavia, quando si scrive in un file Parquet, il servizio sceglie SNAPPY, ovvero l'impostazione predefinita per il formato Parquet. Al momento non esiste alcuna opzione per ignorare tale comportamento.

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. Per informazioni più dettagliate, vedere il paragrafo seguente.

Per la copia in esecuzione nel runtime di integrazione self-hosted con serializzazione/deserializzazione dei file Parquet, il servizio individua il runtime Java controllando prima di tutto il Registro di sistema (SOFTWARE\JavaSoft\Java Runtime Environment\{Current Version}\JavaHome) per JRE, se non trovato, controllando in secondo luogo la variabile JAVA_HOME di sistema per OpenJDK.

  • Per usare JRE: il runtime di integrazione a 64 bit richiede JRE a 64 bit. disponibile qui.
  • Per usare OpenJDK: è supportato a partire dalla versione 3.13 del runtime di integrazione. 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.

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.

Set JVM heap size on Self-hosted IR

Esempio: impostare la variabile _JAVA_OPTIONS con il valore -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. JVM verrà quindi avviato con una quantità di memoria pari a Xms e potrà usare una quantità massima di memoria pari a Xmx. Per impostazione predefinita, il servizio usa min 64 MB e max 1G.

Mapping dei tipi di dati per i file Parquet

Tipo di dati del servizio provvisorio Tipo Parquet primitivo Tipo Parquet originale (deserializzazione) Tipo Parquet originale (serializzazione)
Boolean Boolean N/A N/A
SByte Int32 Int8 Int8
Byte Int32 UInt8 Int16
Int16 Int32 Int16 Int16
UInt16 Int32 UInt16 Int32
Int32 Int32 Int32 Int32
UInt32 Int64 UInt32 Int64
Int64 Int64 Int64 Int64
UInt64 Int64/Binary UInt64 Decimale
Singola Mobile N/A N/A
Double Double N/A N/A
Decimale Binario Decimale Decimale
Stringa Binario Utf8 Utf8
Data/Ora Int96 N/A N/A
TimeSpan Int96 N/A N/A
DateTimeOffset Int96 N/A N/A
ByteArray Binario N/A N/A
GUID Binario Utf8 Utf8
Char Binario Utf8 Utf8
CharArray Non supportato N/A N/A

Formato ORC (legacy)

Nota

Informazioni sul nuovo modello dall'articolo sul formato ORC. Le configurazioni seguenti nel set di dati dell'archivio dati basato su file sono ancora supportate così com'è per la compabitilità all'indietro. Si consiglia di usare il nuovo modello in futuro.

Per analizzare i file ORC o scrivere i dati in formato ORC, impostare la proprietà formattype su OrcFormat. Non è necessario specificare le proprietà nella sezione Format all'interno della sezione typeProperties. Esempio:

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

Notare i punti seguenti:

  • I tipi di dati complessi non sono supportati (STRUCT, MAP, LIST, UNION).
  • Spazi vuoti nel nome della colonna non sono supportati.
  • Il file ORC dispone di tre opzioni relative alla compressione: NONE, ZLIB, SNAPPY. Il servizio supporta la lettura dei dati dal file ORC in uno di questi formati compressi. Per leggere i dati, Data Factoy usa la compressione codec dei metadati. Tuttavia, quando si scrive in un file ORC, il servizio sceglie ZLIB, che è l'impostazione predefinita per ORC. Al momento non esiste alcuna opzione per ignorare tale comportamento.

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. Per informazioni più dettagliate, vedere il paragrafo seguente.

Per la copia in esecuzione nel runtime di integrazione self-hosted con serializzazione/deserializzazione dei file ORC, il servizio individua il runtime Java controllando innanzitutto il Registro di sistema (SOFTWARE\JavaSoft\Java Runtime Environment\{Current Version}\JavaHome) per JRE, se non trovato, controllando in secondo luogo la variabile JAVA_HOME di sistema per OpenJDK.

  • Per usare JRE: il runtime di integrazione a 64 bit richiede JRE a 64 bit. disponibile qui.
  • Per usare OpenJDK: è supportato a partire dalla versione 3.13 del runtime di integrazione. 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.

Mapping dei tipi di dati per i file ORC

Tipo di dati del servizio provvisorio Tipi ORC
Boolean Boolean
SByte Byte
Byte Short
Int16 Short
UInt16 Int
Int32 Int
UInt32 Lungo
Int64 Lungo
UInt64 Stringa
Singola Mobile
Double Double
Decimale Decimale
Stringa Stringa
Data/Ora Timestamp:
DateTimeOffset Timestamp:
TimeSpan Timestamp:
ByteArray Binario
GUID Stringa
Char Char(1)

Formato AVRO (legacy)

Nota

Informazioni sul nuovo modello dall'articolo sul formato Avro. Le configurazioni seguenti nel set di dati dell'archivio dati basato su file sono ancora supportate così com'è per la compabitilità all'indietro. Si consiglia di usare il nuovo modello in futuro.

Per analizzare i file Avro o scrivere i dati in formato Avro, impostare la proprietà formattype su AvroFormat. Non è necessario specificare le proprietà nella sezione Format all'interno della sezione typeProperties. Esempio:

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

Per usare il formato Avro in una tabella Hive, è possibile fare riferimento all'esercitazione di Apache Hive.

Notare i punti seguenti:

Supporto per la compressione (legacy)

Il servizio supporta la compressione/decompressione dei dati durante la copia. 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. Di seguito vengono forniti alcuni scenari di esempio:

  • Leggere i dati compressi GZIP da un BLOB di Azure, decomprimerli e scrivere i dati dei risultati in database SQL di Azure. Definire il set di dati di input del BLOB di Azure con la proprietà compressiontype impostata su 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. Definire il set di dati di output del BLOB di Azure con la proprietà compressiontype impostata su 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. Definire un set di dati FTP di input con la proprietà compressiontype impostata su 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. Definire il set di dati di input del BLOB di Azure con compressiontype impostato su GZIP e il set di dati di output con compressiontype impostato su BZIP2.

Per specificare la compressione per un set di dati, usare la proprietà compression nel set di dati JSON come illustrato di seguito:

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

  • Type: codec di compressione, che può essere GZIP, Deflate, BZIP2 o ZipDeflate. Si noti che quando si usa l'attività di copia per decomprimere i file ZipDeflate e scrivere nell'archivio dati sink basato su file, i file verranno estratti nella cartella : <path specified in dataset>/<folder named as source zip file>/.

  • Level: rapporto di compressione, che può essere Optimal o Fastest.

    • Fastest: l'operazione di compressione deve essere completata il più rapidamente possibile, anche se il file risultante non viene compresso in modo ottimale.

    • Optimal: l'operazione di compressione deve comprimere il file in modo ottimale, anche se il completamento richiede più tempo.

      Per maggiori informazioni, vedere l'argomento relativo al livello di compressione .

Nota

Le impostazioni di compressione non sono attualmente supportate per i dati in AvroFormat, OrcFormat o ParquetFormat. Quando si leggono i file in questi formati, il servizio rileva e usa il codec di compressione nei metadati. Quando si scrive in file in questi formati, il servizio sceglie il codec di compressione predefinito per tale formato. ad esempio ZLIB per OrcFormat e SNAPPY per ParquetFormat.

Tipi di file e formati di compressione non supportati

È possibile usare le funzionalità di estendibilità per trasformare i file non supportati. Due opzioni includono Funzioni di Azure e attività personalizzate usando Azure Batch.

È possibile visualizzare un esempio che usa una funzione di Azure per estrarre il contenuto di un file tar. Per altre informazioni, vedere Funzioni di Azure attività.

È anche possibile compilare questa funzionalità usando un'attività dotnet personalizzata. Altre informazioni sono disponibili qui

Informazioni sui formati e le compressioni di file supportati più recenti in Formati di file e compressione supportati.