

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# (Facoltativo) Creare uno schema (utenti esperti)
<a name="create-schema"></a>

La creazione manuale di uno schema è riservata agli utenti esperti.

Di seguito è riportata una descrizione del formato di file dello schema JSON per i file di input con o senza intestazioni di colonna. Gli utenti esperti possono scrivere o modificare direttamente lo schema, se lo desiderano.

**Nota**  
Il client di crittografia C3R può aiutarti a creare uno schema tramite il processo interattivo descritto in [Esempio: generazione di uno schema di crittografia con sealedfingerprint, e colonne cleartext](gen-encryption-schema-csv.md#gen-encryption-schema) o tramite la creazione di un modello di stub.

## Schemi di tabelle mappati e posizionali
<a name="mapped-and-positional-schemas"></a>

La sezione seguente descrive due tipi di schemi di tabelle: 
+ **Schema di tabella mappato**: questo schema viene utilizzato per crittografare i file.csv con una riga di intestazione e file. Apache Parquet
+ Schema **della tabella posizionale: questo schema** viene utilizzato per crittografare i file.csv senza una riga di intestazione.

Il client di crittografia C3R può crittografare un file tabulare per una collaborazione. A tale scopo, deve disporre di un file di schema corrispondente che specifichi in che modo l'output crittografato deve essere derivato dall'input.

Il client di crittografia C3R può aiutare a generare uno schema per un `INPUT` file eseguendo il comando schema del client di crittografia C3R nella riga di comando. Un esempio di comando è. `java -jar c3r-cli.jar schema --interactive INPUT`

Lo schema specifica le seguenti informazioni: 

1. Quali colonne di origine vengono mappate a quali colonne trasformate nel file di output tramite i nomi di intestazione (schemi mappati) o la posizione (schemi posizionali)

1. Quali colonne di destinazione devono rimanere cleartext

1. Quali colonne di destinazione devono essere crittografate per le SELECT query

1. Quali colonne di destinazione devono essere crittografate per le query JOIN

Queste informazioni sono codificate in un file di schema JSON specifico della tabella, che consiste in un singolo oggetto il cui `headerRow` campo è un valore booleano. Il valore deve riguardare Parquet i file e `true` i file.csv con una riga di intestazione e altro. `false` 

### Schema della tabella mappata
<a name="mapped-schemas"></a>

Lo schema mappato ha la forma seguente.

```
{
  "headerRow": true,
  "columns": [
    {
      "sourceHeader": STRING,
      "targetHeader": STRING,
      "type": TYPE,
      "pad": PAD
    },
    ...
  ]
}
```

In caso `headerRow` affermativo`true`, il campo successivo nell'oggetto è`columns`, che contiene una matrice di schemi di colonne che mappano le intestazioni di origine alle intestazioni di destinazione (ovvero oggetti JSON che descrivono cosa devono contenere le colonne di output). 
+ `sourceHeader`— Il nome dell'`STRING`intestazione della colonna di origine da cui derivano i dati. 
**Nota**  
La stessa colonna di origine può essere utilizzata per più colonne di destinazione.  
Una colonna del file di input non elencata in `sourceHeader` nessun punto dello schema non viene visualizzata nel file di output. 
+ `targetHeader`— Il nome dell'`STRING`intestazione della colonna corrispondente nel file di output. 
**Nota**  
Questo campo è facoltativo per gli schemi mappati. Se questo campo viene omesso, `sourceHeader` viene riutilizzato come nome dell'intestazione nell'output. `_sealed`Viene aggiunto `_fingerprint` o se la colonna di output è rispettivamente una colonna o una fingerprint colonna. sealed 
+ `type`— La colonna `TYPE` di destinazione nel file di output. Cioè, una delle `cleartext` due o `fingerprint` dipende da come la colonna verrà utilizzata nella collaborazione. `sealed` 
+ `pad`— Un campo di un oggetto dello schema a colonne che è presente solo quando `TYPE` è`sealed`. Il valore corrispondente di `PAD` è un oggetto che descrive come aggiungere i dati prima di essere crittografati.

  ```
  {
    "type": PAD_TYPE,
    "length": INT
  }
  ```

  Per specificare il padding di pre-crittografia, `type` `length` vengono utilizzati come segue: 
  + `PAD_TYPE`as`none`: non verrà applicato alcun riempimento ai dati della colonna e il `length` campo non è applicabile (ovvero omesso).
  + `PAD_TYPE`as `fixed` — I dati della colonna vengono aggiunti al numero di byte specificato`length`.
  + `PAD_TYPE`as `max` — I dati della colonna vengono aggiunti alla dimensione della lunghezza in byte del valore più lungo più un byte aggiuntivo. `length`

Di seguito è riportato un esempio di schema mappato, con una colonna di ogni tipo.

```
{
  "headerRow": true,
  "columns": [
    {
      "sourceHeader": "FullName",
      "targetHeader": "name",
      "type": "cleartext"
    },
    {
      "sourceHeader": "City",
      "targetHeader": "city_sealed",
      "type": "sealed",
      "pad": {
        "type": "max",
        "length": 16
      }
    },
    {
      "sourceHeader": "PhoneNumber",
      "targetHeader": "phone_number_fingerprint",
      "type": "fingerprint"
    },
    {
      "sourceHeader": "PhoneNumber",
      "targetHeader": "phone_number_sealed",
      "type": "sealed",
      "pad": {
        "type": "fixed",
        "length": 20
      }
    }
  ]
}
```

Come esempio più complesso, quello che segue è un esempio di file.csv con intestazioni. 

```
FirstName,LastName,Address,City,State,PhoneNumber,Title,Level,Notes
Jorge,Souza,12345 Mills Rd,Anytown,SC,703-555-1234,CEO,10,
Paulo,Santos,0 Street,Anytown,MD,404-555-111,CIO,9,This is a really long note that could really be a paragraph
Mateo,Jackson,1 Two St,Anytown,NY,304-555-1324,COO,9,""
Terry,Whitlock4 N St,Anytown,VA,407-555-8888,EA,7,Secret notes
Diego,Ramirez,9 Hollows Rd,Anytown,VA,407-555-1222,SDE I,4,null
John,Doe,8 Hollows Rd,Anytown,VA,407-555-4321,SDE I,4,Jane's younger brother
Jane,Doe,8 Hollows Rd,Anytown,VA,407-555-4322,SDE II,5,John's older sister
```

Nel seguente esempio di schema mappato, le colonne e sono colonne`FirstName`. `LastName` `cleartext` La `State` colonna viene crittografata come `fingerprint` colonna e come `sealed` colonna con una spaziatura di. `none` Le colonne rimanenti vengono omesse. 

```
{
  "headerRow": true,
  "columns": [
    {
      "sourceHeader": "FirstName",
      "targetHeader": "GivenName",
      "type": "cleartext"
    },
    {
      "sourceHeader": "LastName",
      "targetHeader": "Surname",
      "type": "cleartext"
    },
    {
      "sourceHeader": "State",
      "targetHeader": "State_Join",
      "type": "fingerprint"
    },
    {
      "sourceHeader": "State",
      "targetHeader": "State",
      "type": "sealed",
      "pad": {
        "type": "none"
      }
    }
  ]
}
```

Di seguito è riportato il file.csv che risulta dallo schema mappato. 

```
givenname,surname,state_fingerprint,state
John,Doe,01:hmac:UK8s8Cn/WR2JO/To2dTxWD73aDEe2ZUXeSHy3Tv+1Mk=,01:enc:FQ3n3Ahv9BQQNWQGcugeHzHYzEZE1vapHa2Uu4SRgSAtZ3qObjPA4TcsHt+BOkMKBcnHWI13BeGG/SBqmj7vKpI=
Paulo,Santos,01:hmac:CHF4eIrtTNgAooU9v4h9Qjc+txBnMidQTjdjWuaDTTA=,01:enc:KZ5n5GtaXACco65AXk48BQO2durDNR2ULc4YxmMC8NaZZKKJiksU1IwFadAvV4iBQ1Bus5TU5c4biez3bilfTY8=
Mateo,Jackson,01:hmac:iIRnjfNBzryusIJ1w35lgNzeY1RQ1bSfq6PDHW8Xrbk=,01:enc:mLKpS5HIOSgphdEsrzhEdIp/eN9nBO2gAbIygt4OFn4LalYn9Xyj/XUWXlmn8zFe2T4kyDTD8kGOvpQEUGxAUFk=
Diego,Ramirez,01:hmac:UK8s8Cn/WR2JO/To2dTxWD73aDEe2ZUXeSHy3Tv+1Mk=,01:enc:rmZhT98Zm+IIGw1UTjMIJP4IrW/AAltBLMXcHvnYfRgmWP623VFQ6aUnhsb2MDqEw4G5Uwg5rKKZepUxx5uKbfk=
Jorge,Souza,01:hmac:3BxJdXiFFyZ8HBbYNqqEhBVqhNOd7s2ZiKUe7QiTyo8=,01:enc:vVaqWC1VRbhvkf8gnuR7q0zxVPcvEjuaglYz34+KyyLcGZLpAmsDUc6wZ07f2KvHoOySqRsEU7dG1QfdHYcTSWE=
Terry,Whitlock01:hmac:UK8s8Cn/WR2JO/To2dTxWD73aDEe2ZUXeSHy3Tv+1Mk=,01:enc:3c9VEWbODO/xbQjdGuccLvI7oZTBdPU+SyrJIyr2kudfAxbuMQ2uRdU/q7rbgyJjxZS8M2U35ILJf/lDgTyg7cM=
Jane,Doe,01:hmac:UK8s8Cn/WR2JO/To2dTxWD73aDEe2ZUXeSHy3Tv+1Mk=,01:enc:9RWv46YLveykeNZ/G0NdlYFg+AVdOnu05hHyAYTQkPLHnyX+0/jbzD/g9ZT8GCgVE9aB5bV4ooJIXHGBVMXcjrQ=
```

### Schema della tabella posizionale
<a name="positional-schemas"></a>

Lo schema posizionale ha la forma seguente.

```
{
  "headerRow": false,
  "columns": [
    [
      {
        "targetHeader": STRING,
        "type": TYPE,
        "pad": PAD
      },
      {
        "targetHeader": STRING,
        "type": TYPE,
        "pad": PAD
      }
    ],
    [],
    ...
  ]
}
```

In caso `headerRow` affermativo`false`, il campo successivo nell'oggetto è`columns`, che contiene una matrice di voci. Ogni voce è a sua volta una matrice di zero o più schemi di colonne posizionali (nessun `sourceHeader` campo), che sono oggetti JSON che descrivono cosa deve contenere l'output. 
+ `sourceHeader`— Il nome dell'`STRING`intestazione della colonna di origine da cui derivano i dati. 
**Nota**  
Questo campo deve essere omesso negli schemi posizionali. Negli schemi posizionali, la colonna di origine viene dedotta dall'indice corrispondente della colonna nel file di schema.
+ `targetHeader`— Il nome dell'`STRING`intestazione della colonna corrispondente nel file di output. 
**Nota**  
Questo campo è obbligatorio per gli schemi posizionali. 
+ `type`— La colonna `TYPE` di destinazione nel file di output. Cioè, una delle `cleartext` due o `fingerprint` dipende da come la colonna verrà utilizzata nella collaborazione. `sealed` 
+ `pad`— Un campo di un oggetto dello schema a colonne che è presente solo quando `TYPE` è`sealed`. Il valore corrispondente di `PAD` è un oggetto che descrive come aggiungere i dati prima di essere crittografati.

  ```
  {
    "type": PAD_TYPE,
    "length": INT
  }
  ```

  Per specificare il padding di pre-crittografia, `type` `length` vengono utilizzati come segue: 
  + `PAD_TYPE`as`none`: non verrà applicato alcun riempimento ai dati della colonna e il `length` campo non è applicabile (ovvero omesso).
  + `PAD_TYPE`as `fixed` — I dati della colonna vengono aggiunti al numero di byte specificato`length`.
  + `PAD_TYPE`as `max` — I dati della colonna vengono aggiunti alla dimensione della lunghezza in byte del valore più lungo più un byte aggiuntivo. `length`
**Nota**  
`fixed`è utile se si conosce in anticipo il limite superiore della dimensione in byte dei dati della colonna. Viene generato un errore se i dati in quella colonna sono più lunghi di quelli `length` specificati.   
`max`è utile quando la dimensione esatta dei dati di input non è nota perché funziona indipendentemente dalla dimensione dei dati. Tuttavia, `max` richiede tempi di elaborazione aggiuntivi perché crittografa i dati due volte. `max`crittografa i dati una volta quando vengono letti nel file temporaneo e una volta dopo che è nota l'immissione dei dati più lunga nella colonna.   
Inoltre, la lunghezza del valore più lungo non viene salvata tra le chiamate del client. Se prevedi di crittografare i dati in batch o di crittografare periodicamente nuovi dati, tieni presente che la lunghezza del testo cifrato risultante potrebbe variare da un batch all'altro.

Di seguito è riportato un esempio di schema posizionale.

```
{
  "headerRow": false,
  "columns": [
    [
      {
        "targetHeader": "name",
        "type": "cleartext"
      }
    ],
    [
      {
        "targetHeader": "city_sealed",
        "type": "sealed",
        "pad": {
          "type": "max",
          "length": 16
        }
      }
    ],
    [
      {
        "targetHeader": "phone_number_fingerprint",
        "type": "fingerprint"
      },
      {
        "targetHeader": "phone_number_sealed",
        "type": "sealed",
        "pad": {
          "type": "fixed",
          "length": 20
        }
      }
    ]
  ]
}
```

Come esempio complesso, quello che segue è un esempio di file.csv se non aveva la prima riga con le intestazioni. 

```
Jorge,Souza,12345 Mills Rd,Anytown,SC, 703 -555 -1234,CEO, 10,
Paulo,Santos, 0 Street,Anytown,MD, 404-555-111,CIO, 9,This is a really long note that could really be a paragraph
Mateo,Jackson, 1 Two St,Anytown,NY, 304-555-1324,COO, 9, ""
Terry,Whitlock, 4 N St,Anytown,VA, 407-555-8888,EA, 7,Secret notes
Diego,Ramirez, 9 Hollows Rd,Anytown,VA, 407-555-1222,SDE I, 4,null
John,Doe, 8 Hollows Rd,Anytown,VA, 407-555-4321,SDE I, 4,Jane's younger brother
Jane,Doe, 8 Hollows Rd,Anytown,VA, 407-555-4322,SDE II, 5,John's older sister
```

Lo schema posizionale ha la forma seguente. 

```
{
  "headerRow": false,
  "columns": [
    [
      {
        "targetHeader": "GivenName",
        "type": "cleartext"
      }
    ],
    [
      {
        "targetHeader": "Surname",
        "type": "cleartext"
      }
    ],
    [],
    [],
    [
      {
        "targetHeader": "State_Join",
        "type": "fingerprint"
      },
      {
        "targetHeader": "State",
        "type": "sealed",
        "pad": {
          "type": "none"
        }
      }
    ],
    [],
    [],
    [],
    []
  ]
}
```

Lo schema precedente produce il seguente file di output con una riga di intestazione contenente le intestazioni di destinazione specificate. 

```
givenname,surname,state_fingerprint,state
Mateo,Jackson,01:hmac:iIRnjfNBzryusIJ1w35lgNzeY1RQ1bSfq6PDHW8Xrbk=,01:enc:ENS6QD3cMVl9vQEGfe9MNWfR0UOupchswZFr94zOMG5jY/Q8m/Y5SA89dJwKpT5rGPp8e36h6klwDoslpFzGvU0=
Jorge,Souza,01:hmac:3BxJdXiFFyZ8HBbYNqqEhBVqhNOd7s2ZiKUe7QiTyo8=,01:enc:LKo0zirq2++XEIIIMNRjAsGMdyWUDwYaum0B+IFP+rUf1BNeZDJjtFe1Z+zbZfXQWwJy52Rt7HqvAb2WIK1oMmk=
Paulo,Santos,01:hmac:CHF4eIrtTNgAooU9v4h9Qjc+txBnMidQTjdjWuaDTTA=,01:enc:MyQKyWxJ9kvK1xDQQtXlUNwv3F+yrBRr0xrUY/1BGg5KFgOn9pK+MZ7g+ZNqZEPcPz4lht1u0t/wbTaqzOCLXFQ=
Jane,Doe,01:hmac:UK8s8Cn/WR2JO/To2dTxWD73aDEe2ZUXeSHy3Tv+1Mk=,01:enc:Pd8sbITBfb0/ttUB4svVsgoYkDfnDvgkvxzeci0Yxq54rLSwccy1o3/B50C3cpkkn56dovCwzgmmPNwrmCmYtb4=
Terry,Whitlock01:hmac:UK8s8Cn/WR2JO/To2dTxWD73aDEe2ZUXeSHy3Tv+1Mk=,01:enc:Qmtzu3B3GAXKh2KkRYTiEAaMopYedsSdF2e/ADUiBQ9kv2CxKPzWyYTD3ztmKPMka19dHre5VhUHNpO3O+j1AQ8=
Diego,Ramirez,01:hmac:UK8s8Cn/WR2JO/To2dTxWD73aDEe2ZUXeSHy3Tv+1Mk=,01:enc:ysdg+GHKdeZrS/geBIooOEPLHG68MsWpx1dh3xjb+fG5rmFmqUcJLNuuYBHhHAlxchM2WVeV1fmHkBX3mvZNvkc=
John,Doe,01:hmac:UK8s8Cn/WR2JO/To2dTxWD73aDEe2ZUXeSHy3Tv+1Mk=,01:enc:9uX0wZuO7kAPAx+Hf6uvQownkWqFSKtWS7gQIJSe5aXFquKWCK6yZN0X5Ea2N3bn03Uj1kh0agDWoiP9FRZGJA4=
```