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 all-in-one per le aziende. Microsoft Fabric copre tutto, dallo spostamento dati al data science, all'analisi in tempo reale, alla business intelligence e alla creazione di report. Vedere le informazioni su come iniziare una nuova prova gratuita!
Questo argomento si applica ai connettori seguenti: Amazon S3, Azure BLOB, Azure Data Lake Storage Gen1, Azure Data Lake Storage Gen2, File di Azure, File system, FTP, Google Cloud Storage, HDFS, HTTP e SFTP.
Importante
Il servizio ha introdotto il nuovo modello di set di dati basato sul formato; vedere l'articolo sul formato corrispondente con i dettagli:
- Formato Avro
- Formato binario
- Formato di testo delimitato
- Formato JSON
- Formato ORC
- Formato Parquet
Le configurazioni rimanenti citate in questo articolo sono ancora supportate senza variazioni per la retrocompatibilità. 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 senza variazioni per la retrocompatibilità. 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. Ad esempio, se la virgola (',') è il delimitatore di colonna ma si vuole inserire un 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 la virgola (',') è il delimitatore di colonna ma si vuole inserire 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. |
Vero 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) Falso |
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 specificarefirstRowAsHeader
. Se sono specificati siaskipLineCount
chefirstRowAsHeader
, 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 senza variazioni per la retrocompatibilità. 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 dati con applicazione incrociata in una matrice con più righe (caso 1 -> esempio 2 in Esempi di 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 usarearray[x].property
per estrarre il valore della proprietà specificata dall'oggettoxth
, oppure è possibile usarearray[*].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 eseguire l'iterazione e l'estrazione dei dati dagli oggetti con lo stesso modello sotto matriceorderlines
.jsonPathDefinition
specifica il percorso JSON per ogni colonna indicante da dove estrarre i dati. In questo esempioordernumber
,orderdate
ecity
sono sotto l'oggetto radice con il percorso JSON che inizia con$.
, mentreorder_pd
eorder_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:
- Se
structure
ejsonPathDefinition
non sono definiti nel set di dati della data factory, l'attività Copy rileva lo schema dal primo oggetto e rende flat 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/ojsonPathDefinition
oppure di ignorarlo non specificandolo injsonPathDefinition
. - 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 senza variazioni per la retrocompatibilità. Si consiglia di usare il nuovo modello in futuro.
Per analizzare i file Parquet o scrivere i dati in formato Parquet, impostare la proprietà format
type
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 tranne LZO. Per leggere i dati, usa il codec di compressione nei metadati. Tuttavia, durante la scrittura in un file Parquet, il servizio sceglie SNAPPY, che è 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 la serializzazione/deserializzazione dei file Parquet, il servizio individua il runtime Java eseguendo in primo luogo una ricerca di JRE nel registro (SOFTWARE\JavaSoft\Java Runtime Environment\{Current Version}\JavaHome)
; se non viene trovato, in secondo luogo esegue una ricerca di OpenJDK nella variabile di sistema JAVA_HOME
.
- 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.
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 1 G.
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) |
---|---|---|---|
Booleano | Booleano | N/D | N/D |
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 |
Singolo | Float | N/D | N/D |
Double | Double | N/D | N/D |
Decimale | Binario | Decimale | Decimale |
String | Binario | Utf8 | Utf8 |
Data/Ora | Int96 | N/D | N/D |
TimeSpan | Int96 | N/D | N/D |
DateTimeOffset | Int96 | N/D | N/D |
ByteArray | Binario | N/D | N/D |
GUID | Binario | Utf8 | Utf8 |
Char | Binario | Utf8 | Utf8 |
CharArray | Non supportato | N/D | N/D |
Formato ORC (legacy)
Nota
Informazioni sul nuovo modello dall'articolo Formato ORC. Le configurazioni seguenti nel set di dati dell'archivio dati basato su file sono ancora supportate senza variazioni per la retrocompatibilità. Si consiglia di usare il nuovo modello in futuro.
Per analizzare i file ORC o scrivere i dati in formato ORC, impostare la proprietà format
type
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, durante la scrittura 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 la serializzazione/deserializzazione dei file ORC, il servizio individua il runtime Java eseguendo in primo luogo una ricerca di JRE nel registro (SOFTWARE\JavaSoft\Java Runtime Environment\{Current Version}\JavaHome)
; se non viene trovato, in secondo luogo esegue una ricerca di OpenJDK nella variabile di sistema JAVA_HOME
.
- 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 |
---|---|
Booleano | Booleano |
SByte | Byte |
Byte | Short |
Int16 | Short |
UInt16 | Int |
Int32 | Int |
UInt32 | Lungo |
Int64 | Lungo |
UInt64 | String |
Singolo | Float |
Double | Double |
Decimale | Decimale |
String | Stringa |
DataOra | Timestamp: |
DateTimeOffset | Timestamp: |
TimeSpan | Timestamp: |
ByteArray | Binario |
GUID | String |
Char | Char(1) |
Formato AVRO (legacy)
Nota
Informazioni sul nuovo modello dall'articolo Formato Avro. Le configurazioni seguenti nel set di dati dell'archivio dati basato su file sono ancora supportate senza variazioni per la retrocompatibilità. Si consiglia di usare il nuovo modello in futuro.
Per analizzare i file Avro o scrivere i dati in formato Avro, impostare la proprietà format
type
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 vedere l'Esercitazione su Apache Hive.
Notare i punti seguenti:
- I tipi di dati complessi non sono supportati (record, enumerazioni, matrici, mappe, unioni e dati fissi).
Supporto della compressione (BZip2)
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 del risultato in Database SQL di Azure. Definire il set di dati di BLOB di Azure di input con la proprietà
compression
type
come 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 un set di dati di BLOB di Azure di output con la proprietà
compression
type
come 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à
compression
type
come 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 BLOB di Azure di input con
compression
type
impostato su GZIP e il set di dati di output concompression
type
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. Tener presente che quando si usa l'attività Copy per decomprimere 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 file in questi formati, il servizio rileva e usa il codec di compressione nei metadati. Quando si scrive in un 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 file non supportati. Due opzioni includono Funzioni di Azure e attività personalizzate usando Azure Batch.
È possibile vedere un esempio in cui viene usata una funzione di Azure per estrarre il contenuto di un file tar. Per altre informazioni, vedere Attività di Funzioni di Azure.
È anche possibile creare questa funzionalità usando un'attività dotnet personalizzata. Ulteriori informazioni sono disponibili qui
Contenuto correlato
Informazioni sulle compressioni e sui formati di file supportati più recenti da Compressioni e formati di file supportati.