

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# (Opsional) Buat skema (pengguna tingkat lanjut)
<a name="create-schema"></a>

Membuat skema secara manual adalah untuk pengguna tingkat lanjut.

Berikut ini adalah deskripsi format file skema JSON untuk file input dengan atau tanpa header kolom. Pengguna tingkat lanjut dapat langsung menulis atau memodifikasi skema jika diinginkan.

**catatan**  
Klien enkripsi C3R dapat membantu Anda dalam membuat skema melalui proses interaktif yang dijelaskan dalam [Contoh: Menghasilkan skema enkripsi dengansealed,fingerprint, dan kolom cleartext](gen-encryption-schema-csv.md#gen-encryption-schema) atau melalui pembuatan templat rintisan.

## Skema tabel yang dipetakan dan posisi
<a name="mapped-and-positional-schemas"></a>

Bagian berikut menjelaskan dua jenis skema tabel: 
+ **Skema tabel yang dipetakan** - Skema ini digunakan untuk mengenkripsi file.csv dengan baris header dan file. Apache Parquet
+ Skema **tabel posisi - Skema** ini digunakan untuk mengenkripsi file.csv tanpa baris header.

Klien enkripsi C3R dapat mengenkripsi file tabular untuk kolaborasi. Untuk melakukan ini, ia harus memiliki file skema yang sesuai yang menentukan bagaimana output terenkripsi harus diturunkan dari input.

Klien enkripsi C3R dapat membantu menghasilkan skema untuk `INPUT` file dengan menjalankan perintah skema klien enkripsi C3R di baris perintah. Contoh dari sebuah perintah adalah`java -jar c3r-cli.jar schema --interactive INPUT`.

Skema menentukan informasi berikut: 

1. Kolom sumber mana yang memetakan kolom yang mengubah kolom dalam file output melalui nama tajuknya (skema yang dipetakan) atau posisi (skema posisi)

1. Kolom target mana yang akan tetap cleartext

1. Kolom target mana yang akan dienkripsi untuk kueri SELECT

1. Kolom target mana yang akan dienkripsi untuk kueri JOIN

Informasi ini dikodekan dalam file skema JSON khusus tabel, yang terdiri dari satu objek yang bidangnya `headerRow` adalah nilai Boolean. Nilai harus `true` untuk Parquet file dan file.csv dengan baris header, dan `false` sebaliknya. 

### Skema tabel yang dipetakan
<a name="mapped-schemas"></a>

Skema yang dipetakan memiliki bentuk sebagai berikut.

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

Jika `headerRow` ya`true`, bidang berikutnya dalam objek adalah`columns`, yang berisi larik skema kolom yang memetakan header sumber ke header target (yaitu, objek JSON yang menjelaskan apa yang harus berisi kolom keluaran). 
+ `sourceHeader`— Nama `STRING` header dari kolom sumber tempat datanya berasal. 
**catatan**  
Kolom sumber yang sama dapat digunakan untuk beberapa kolom target.  
Kolom dari file input yang tidak terdaftar sebagai di `sourceHeader` mana saja dalam skema tidak muncul di file output. 
+ `targetHeader`— Nama `STRING` header dari kolom yang sesuai dalam file output. 
**catatan**  
Bidang ini opsional untuk skema yang dipetakan. Jika bidang ini dihilangkan, `sourceHeader` digunakan kembali untuk nama header dalam output. Entah `_fingerprint` atau `_sealed` ditambahkan jika kolom output masing-masing adalah fingerprint kolom atau sealed kolom. 
+ `type`— Kolom target dalam file output. `TYPE` Yaitu, salah satu `cleartext``sealed`, atau `fingerprint` tergantung pada bagaimana kolom akan digunakan dalam kolaborasi. 
+ `pad`- Bidang objek skema kolom yang hanya ada saat ada. `TYPE` `sealed` Nilai yang sesuai dari `PAD` adalah objek yang menggambarkan bagaimana data harus empuk sebelum dienkripsi.

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

  Untuk menentukan padding pra-enkripsi, `type` dan `length` digunakan sebagai berikut: 
  + `PAD_TYPE`as `none` — Tidak ada padding yang akan diterapkan pada data kolom dan `length` bidang tidak berlaku (yaitu, dihilangkan).
  + `PAD_TYPE`as `fixed` — Data kolom diempuk dengan byte `length` yang ditentukan.
  + `PAD_TYPE`as `max` — Data kolom dipadatkan dengan ukuran panjang byte nilai terpanjang ditambah `length` byte tambahan.

Berikut ini adalah contoh skema yang dipetakan, dengan kolom masing-masing jenis.

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

Sebagai contoh yang lebih kompleks, berikut ini adalah contoh file.csv dengan header. 

```
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
```

Dalam contoh skema dipetakan berikut, kolom `FirstName` dan `LastName` kolom. `cleartext` `State`Kolom dienkripsi sebagai `fingerprint` kolom dan sebagai `sealed` kolom dengan padding. `none` Kolom yang tersisa dihilangkan. 

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

Berikut ini adalah file.csv yang dihasilkan dari skema yang dipetakan. 

```
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=
```

### Skema tabel posisi
<a name="positional-schemas"></a>

Skema posisi memiliki bentuk sebagai berikut.

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

Jika `headerRow` ya`false`, bidang berikutnya dalam objek adalah`columns`, yang berisi array entri. Setiap entri itu sendiri merupakan larik skema kolom posisi nol atau lebih (tanpa `sourceHeader` bidang), yang merupakan objek JSON yang menjelaskan apa yang harus dikandung output. 
+ `sourceHeader`— Nama `STRING` header dari kolom sumber tempat datanya berasal. 
**catatan**  
Bidang ini harus dihilangkan dalam skema posisi. Dalam skema posisi, kolom sumber disimpulkan oleh indeks kolom yang sesuai dalam file skema.
+ `targetHeader`— Nama `STRING` header dari kolom yang sesuai dalam file output. 
**catatan**  
Bidang ini diperlukan untuk skema posisi. 
+ `type`— Kolom target dalam file output. `TYPE` Yaitu, salah satu `cleartext``sealed`, atau `fingerprint` tergantung pada bagaimana kolom akan digunakan dalam kolaborasi. 
+ `pad`- Bidang objek skema kolom yang hanya ada saat ada. `TYPE` `sealed` Nilai yang sesuai dari `PAD` adalah objek yang menggambarkan bagaimana data harus empuk sebelum dienkripsi.

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

  Untuk menentukan padding pra-enkripsi, `type` dan `length` digunakan sebagai berikut: 
  + `PAD_TYPE`as `none` — Tidak ada padding yang akan diterapkan pada data kolom dan `length` bidang tidak berlaku (yaitu, dihilangkan).
  + `PAD_TYPE`as `fixed` — Data kolom diempuk dengan byte `length` yang ditentukan.
  + `PAD_TYPE`as `max` — Data kolom dipadatkan dengan ukuran panjang byte nilai terpanjang ditambah `length` byte tambahan.
**catatan**  
`fixed`berguna jika Anda tahu sebelumnya batas atas pada ukuran byte data kolom. Kesalahan muncul jika ada data di kolom itu lebih panjang dari yang ditentukan`length`.   
`max`nyaman ketika ukuran yang tepat dari data input tidak diketahui karena berfungsi terlepas dari ukuran data. Namun, `max` membutuhkan waktu pemrosesan tambahan karena mengenkripsi data dua kali. `max`mengenkripsi data sekali ketika dibaca ke file sementara dan sekali setelah entri data terpanjang di kolom diketahui.   
Juga, panjang nilai terpanjang tidak disimpan di antara pemanggilan klien. Jika Anda berencana untuk mengenkripsi data Anda dalam batch, atau mengenkripsi data baru secara berkala, ketahuilah bahwa panjang ciphertext yang dihasilkan dapat bervariasi antar batch.

Berikut ini adalah contoh skema posisi.

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

Sebagai contoh kompleks, berikut ini adalah contoh file.csv jika tidak memiliki baris pertama dengan header. 

```
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
```

Skema posisi memiliki bentuk berikut. 

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

Skema sebelumnya menghasilkan file output berikut dengan baris header yang berisi header target yang ditentukan. 

```
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=
```