

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 步驟 4：產生表格式檔案的加密結構描述
<a name="gen-encryption-schema-csv"></a>

若要加密資料，需要描述如何使用資料的加密結構描述。本節說明 C3R 加密用戶端如何協助產生具有標頭列或檔案之 CSV Parquet 檔案的加密結構描述。

每個檔案只需要執行此動作一次。結構描述存在之後，可以重複使用它來加密相同的檔案 （或任何具有相同資料欄名稱的檔案）。如果資料欄名稱或所需的加密結構描述變更，您必須更新結構描述檔案。如需詳細資訊，請參閱[（選用） 建立結構描述 （進階使用者）](create-schema.md)。

**重要**  
重要的是，所有協作方都使用相同的共用私密金鑰。協作方也應該協調資料欄名稱，以便在查詢中JOIN進行編輯或以其他方式比較相等性時相符。否則，SQL 查詢可能會產生非預期或不正確的結果。不過，如果協同合作建立者在協同合作建立期間啟用`allowJoinsOnColumnsWithDifferentNames`加密設定，則不需要這麼做。如需加密相關設定的詳細資訊，請參閱 [密碼編譯運算參數](crypto-computing-parameters.md)。

在結構描述模式下執行時，C3R 加密用戶端會依資料欄逐一查看輸入檔案資料欄，提示您是否應處理該資料欄以及如何處理該資料欄。如果檔案包含加密輸出不需要的許多資料欄，則互動式結構描述產生可能會變得繁瑣，因為您必須略過每個不需要的資料欄。若要避免這種情況，您可以手動撰寫結構描述，或建立僅具有所需資料欄的簡化輸入檔案版本。然後，互動式結構描述產生器可以在減少的檔案上執行。C3R 加密用戶端會輸出結構描述檔案的相關資訊，並詢問如何在目標輸出中包含或加密來源資料欄 （如果有的話）。

對於輸入檔案中的每個來源資料欄，系統會提示您： 

1. 應該產生多少目標資料欄

1. 如何加密每個目標資料欄 （如果有的話）

1. 每個目標資料欄的名稱

1. 如果資料欄正在加密為sealed資料欄，如何在加密之前填入資料

**注意**  
當您加密已加密為sealed資料欄的資料時，您必須判斷哪些資料需要填補。C3R 加密用戶端會在產生結構描述期間建議預設填補，以相同長度填補資料欄中的所有項目。  
判斷 的長度時`fixed`，請注意填補是以位元組為單位，而不是位元。

以下是建立結構描述的決策表。


**結構描述決策表**  

| 決策 | 來源資料欄的目標資料欄數 <‘name-of-column’＞？ | 目標欄類型：【c】cleartext、【f】 fingerprint或 【s】sealed？ | 目標欄標頭名稱 <default 'name-of-column'> | 將尾碼 <suffix> 新增至標頭，以指出加密方式、【y】 是或 【n】 否 <default 'yes'> | <‘name-of-column\$1sealed’> 填補類型：【n】 1、【f】 固定或 【m】 max <default ’max’> | 
| --- | --- | --- | --- | --- | --- | 
| 保持資料欄未加密。 | 1 | c | 不適用 | 不適用 | 不適用 | 
| 將資料欄加密為資料fingerprint欄。 | 1 | f | 選擇預設或輸入新的標頭名稱。 | 輸入 y以選擇預設 (\$1fingerprint) 或輸入 n。 | 不適用 | 
| 將資料欄加密為資料sealed欄。 | 1 | s | 選擇預設或輸入新的標頭名稱。 | 輸入 y以選擇預設 (\$1sealed) 或輸入 n。 |  選擇填補類型 。 如需詳細資訊，請參閱[（選用） 建立結構描述 （進階使用者）](create-schema.md)。  | 
| 將資料欄同時加密為 fingerprint和 sealed。 | 2 |  輸入第一個目標欄：**f **。 輸入第二個目標欄：**s**。  | 為每個目標資料欄選擇目標標頭。 | 輸入 y以選擇預設或輸入 n. |  選擇填補類型 （僅適用於sealed欄）。 如需詳細資訊，請參閱[（選用） 建立結構描述 （進階使用者）](create-schema.md)。  | 

以下是如何建立加密結構描述的兩個範例。互動的確切內容取決於輸入檔案和您提供的回應。

**Topics**
+ [範例：產生資料fingerprint欄和cleartext資料欄的加密結構描述](#gen-encryption-schema_join)
+ [範例：使用 sealed、 fingerprint和 cleartext資料欄產生加密結構描述](#gen-encryption-schema)

## 範例：產生資料fingerprint欄和cleartext資料欄的加密結構描述
<a name="gen-encryption-schema_join"></a>

在此範例中，對於 `ads.csv`，只有兩個資料欄： `username`和 `ad_variant`。對於這些資料欄，我們需要下列項目：
+ 將資料`username`欄加密為資料`fingerprint`欄
+ 讓資料`ad_variant`欄成為資料`cleartext`欄

**為資料fingerprint欄和cleartext資料欄產生加密結構描述**

1. (*選用*) 為確保要加密c3r-cli.jar的檔案存在：

   1. 導覽至所需的目錄並執行 `ls`（如果使用 Mac或 Unix/Linux)，或者`dir`如果使用 Windows)。

   1. 檢視表格式資料檔案清單 （例如 .csv)，然後選擇要加密的檔案。

      在此範例中， `ads.csv` 是要加密的檔案。

1. 從 CLI 執行下列命令，以互動方式建立結構描述。

   `java -jar c3r-cli.jar schema ads.csv --interactive --output=ads.json`
**注意**  
您可以執行 `java --jar PATH/TO/c3r-cli.jar`。或者，如果您已將 `PATH/TO/c3r-cli.jar`新增至 CLASSPATH 環境變數，您也可以執行類別名稱。C3R 加密用戶端會在 CLASSPATH 中尋找它 （例如，`java com.amazon.psion.cli.Main`)。
`--interactive` 旗標會選取開發結構描述的互動式模式。這會引導使用者完成建立結構描述的精靈。具備進階技能的使用者無需使用精靈即可建立自己的結構描述 JSON。如需詳細資訊，請參閱[（選用） 建立結構描述 （進階使用者）](create-schema.md)。
`--output` 旗標會設定輸出名稱。如果您未包含 `--output`旗標，C3R 加密用戶端會嘗試挑選預設輸出名稱 （例如 `<input>.out.csv`或結構描述的 `<input>.json`)。

1. 對於 `Number of target columns from source column ‘username’?`，輸入 **1**，然後按 **Enter**。

1. 對於 `Target column type: [c]leartext, [f]ingerprint, or [s]ealed?`，輸入 **f**，然後按 **Enter**。

1. 對於 `Target column headername <default 'username'>`，請按 **Enter**。

   使用預設名稱「`username`」。

1. 對於 `Add suffix '_fingerprint' to header to indicate how it was encrypted, [y]es or [n]o <default 'yes'>`，輸入 **y**，然後按 **Enter**。
**注意**  
互動式模式建議將尾碼新增至加密的資料欄標頭 (`_fingerprint` 代表fingerprint資料欄， `_sealed` 代表資料sealed欄）。當您執行上傳資料 AWS 服務 或建立 AWS Clean Rooms 協同合作等任務時，字尾可能很有幫助。這些字尾有助於指出如何處理每個資料欄中的加密資料。例如，如果您將資料欄加密為資料欄 (`_sealed`)，並嘗試在資料sealed欄JOIN上進行加密或反向嘗試，則實物將無法運作。

1. 對於 `Number of target columns from source column ‘ad_variant’?`，輸入 **1**，然後按 **Enter**。

1. 對於 `Target column type: [c]leartext, [f]ingerprint, or [s]ealed?`，輸入 **c**，然後按 **Enter**。

1. 對於 `Target column headername <default 'username'>`，請按 **Enter**。

   使用預設名稱「`ad_variant`」。

   結構描述會寫入名為 的新檔案`ads.json`。
**注意**  
您可以在任何文字編輯器中開啟結構描述，例如 Notepad 上的 Windows或 TextEdit上的 macOS。

1. 您現在已準備好[加密資料](encrypt-data.md)。

## 範例：使用 sealed、 fingerprint和 cleartext資料欄產生加密結構描述
<a name="gen-encryption-schema"></a>

在此範例中，對於 `sales.csv`，有三個資料欄：`username`、 `purchased`和 `product`。對於這些資料欄，我們需要下列項目：
+ 讓資料`product`欄成為資料`sealed`欄
+ 將資料`username`欄加密為資料`fingerprint`欄
+ 讓資料`purchased`欄成為資料`cleartext`欄

**使用 sealed、 fingerprint和 cleartext資料欄產生加密結構描述**

1. (*選用*) 為確保要加密c3r-cli.jar的檔案存在：

   1. 導覽至所需的目錄並執行 `ls`（如果使用 Mac或 Unix/Linux)，或者`dir`如果使用 Windows)。

   1. 檢視表格式資料檔案 (.csv) 的清單，然後選擇要加密的檔案。

      在此範例中， `sales.csv` 是我們想要加密的檔案。

1. 從 CLI 執行下列命令，以互動方式建立結構描述。

   `java -jar c3r-cli.jar schema sales.csv --interactive --output=sales.json`
**注意**  
`--interactive` 旗標會選取開發結構描述的互動式模式。這會引導使用者完成建立結構描述的引導式工作流程。
如果您是進階使用者，則可以建立自己的結構描述 JSON，而無需使用引導式工作流程。如需詳細資訊，請參閱[（選用） 建立結構描述 （進階使用者）](create-schema.md)。
對於沒有資料欄標頭的 .csv 檔案，請參閱 CLI 中可用的結構描述命令`--noHeaders`旗標。
`--output` 旗標會設定輸出名稱。如果您未包含 `--output`旗標，C3R 加密用戶端會嘗試挑選預設輸出名稱 （例如 `<input>.out`或結構描述的 `<input>.json`)。

1. 對於 `Number of target columns from source column ‘username’?`，輸入 **1**，然後按 **Enter**。

1. 對於 `Target column type: [c]leartext, [f]ingerprint, or [s]ealed?`，輸入 **f**，然後按 **Enter**。

1. 對於 `Target column headername <default 'username'>`，請按 **Enter**。

   使用預設名稱「`username`」。

1. 對於 `Add suffix '_fingerprint' to header to indicate how it was encrypted, [y]es or [n]o <default 'yes'>`，輸入 **y**，然後按 **Enter**。

1. 對於 `Number of target columns from source column ‘purchased’?`，輸入 **1**，然後按 **Enter**。

1. 對於 `Target column type: [c]leartext, [f]ingerprint, or [s]ealed?`，輸入 **c**，然後按 **Enter**。

1. 對於 `Target column headername <default 'purchased'>`，請按 **Enter**。

   使用預設名稱「`purchased`」。

1. 對於 `Number of target columns from source column ‘product’?`，輸入 **1**，然後按 **Enter**。

1. 對於 `Target column type: [c]leartext, [f]ingerprint, or [s]ealed?`，輸入 **s**，然後按 **Enter**。

1. 對於 `Target column headername <default 'product'>`，請按 **Enter**。

   使用預設名稱「`product`」。

1. 針對 `‘product_sealed’ padding type: [n]one, [f]ixed, or [m]ax <default ’max’?>`，按 **Enter** 選擇預設值。

1. 針對 ，`Byte-length beyond max length to pad cleartext to in ‘product_sealed’ <default ‘0’>?`按 **Enter** 選擇預設值。

   結構描述會寫入名為 的新檔案`sales.json`。

1. 您現在已準備好[加密資料](encrypt-data.md)。