

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

# 建立結構描述和資料集
<a name="data-prep-creating-datasets"></a>

[建立資料集群組](data-prep-ds-group.md)之後，您就可以為匯入的每種類型的資料建立 Amazon Personalize 結構描述和資料集。*結構描述*會告知 Amazon Personalize 您資料的結構，並允許 Amazon Personalize 剖析資料。當您在 Amazon Personalize 中建立結構描述時，您可以使用您在 中建立的 JSON 檔案[為 Amazon Personalize 結構描述建立結構描述 JSON 檔案](how-it-works-dataset-schema.md)。

 *資料集*是在 Amazon Personalize 中訓練資料的容器。不同的資料集類型有不同的需求。您可以為要匯入的每種資料類型建立資料集。如需有關不同類型的資料集以及如何準備資料的資訊，請參閱 [準備 Amazon Personalize 的訓練資料](preparing-training-data.md)。

您可以使用 Amazon Personalize 主控台、 AWS Command Line Interface (AWS CLI) 或 AWS SDKs 建立結構描述和資料集。您無法在網域資料集群組中建立下一個最佳動作資源，包括動作和動作互動資料集。

**重要**  
 建立結構描述後，您無法變更結構描述。不過，如果您新增資料欄，您可以將資料集的結構描述取代為新的資料欄。如需詳細資訊，請參閱[取代資料集的結構描述以新增資料欄](updating-dataset-schema.md)。

**Topics**
+ [建立資料集和結構描述 （主控台）](#data-prep-creating-ds-console)
+ [建立資料集和結構描述 (AWS CLI)](#data-prep-creating-ds-cli)
+ [建立資料集和結構描述 (AWS SDKs)](#data-prep-creating-ds-sdk)

## 建立資料集和結構描述 （主控台）
<a name="data-prep-creating-ds-console"></a>

 如果這是您資料集群組中的第一個資料集，則第一個資料集類型將是項目互動資料集。若要在主控台中建立項目互動資料集，請指定資料集名稱，然後以 [Avro 格式](https://docs.oracle.com/database/nosql-12.1.3.0/GettingStartedGuide/avroschemas.html)指定 JSON 結構描述。如果不是此資料集群組中的第一個資料集，請選擇資料集類型，然後指定名稱和結構描述。

如需 Amazon Personalize 資料集需求的資訊，請參閱 [準備 Amazon Personalize 的訓練資料](preparing-training-data.md)。如果您剛完成，[建立 Amazon Personalize 資料集群組](data-prep-ds-group.md)而且已經在建立資料集，請跳至此程序的步驟 4。

**建立資料集和結構描述**

1. 如果您尚未建立結構描述 JSON 檔案，請依照 中的指示[為 Amazon Personalize 結構描述建立結構描述 JSON 檔案](how-it-works-dataset-schema.md)建立概述您資料的結構描述 JSON 檔案。

1. 在 [https://console.aws.amazon.com/personalize/home](https://console.aws.amazon.com/personalize/home)：// 開啟 Amazon Personalize 主控台並登入您的帳戶。

1.  在**資料集群組**頁面上，選擇您在 中建立的資料集群組[建立 Amazon Personalize 資料集群組](data-prep-ds-group.md)。

1. 在**步驟 1 中。建立資料集並匯入資料** 選擇**建立資料集**，然後選擇要建立的資料集類型。

1. 選擇將**資料直接匯入 Amazon Personalize 資料集**，然後選擇**下一步**。

1. 在**資料集詳細資訊**中，針對**資料集名稱**，指定資料集的名稱。

1. 針對**資料集結構描述**，選擇**建立新的結構描述****或使用現有的結構描述**。

1. 如果您使用的是現有的結構描述，請選擇要使用的現有結構描述。如果您要建立新的結構描述，請為結構描述命名並貼上符合您資料的結構描述 JSON。您已在 中建立此檔案[為 Amazon Personalize 結構描述建立結構描述 JSON 檔案](how-it-works-dataset-schema.md)。

1. 對於**標籤**，選擇性地新增任何標籤。如需標記 Amazon Personalize 資源的詳細資訊，請參閱 [標記 Amazon Personalize 資源](tagging-resources.md)。

1. 選擇**下一步**，然後依照 中的指示[將訓練資料匯入 Amazon Personalize 資料集](import-data.md)匯入您的資料。

## 建立資料集和結構描述 (AWS CLI)
<a name="data-prep-creating-ds-cli"></a>

若要使用 建立資料集和結構描述 AWS CLI，您可以使用 `create-schema`命令 （使用 [CreateSchema](API_CreateSchema.md) API 操作），然後使用 `create-dataset`（使用 [CreateDataset](API_CreateDataset.md) API 操作）。

**建立結構描述和資料集**

1. 如果您尚未建立結構描述 JSON 檔案，請依照 中的指示[為 Amazon Personalize 結構描述建立結構描述 JSON 檔案](how-it-works-dataset-schema.md)建立概述您資料的結構描述 JSON 檔案。

1. 執行下列命令，在 Amazon Personalize 中建立結構描述。建立結構描述後，您無法變更結構描述。`schemaName` 將 取代為結構描述的名稱，並將 取代`file://SchemaName.json`為 JSON 檔案的位置。此範例會顯示屬於目前資料夾的檔案。如果您要為網域資料集群組中的資料集建立結構描述，請新增 `domain` 參數並將其設定為 `ECOMMERCE`或 `VIDEO_ON_DEMAND`。如需 API (匯入 API) 的詳細資訊，請參閱「[CreateSchema](API_CreateSchema.md)」。

   ```
   aws personalize create-schema \
     --name {{SchemaName}} \
     --schema {{file://SchemaName.json}}
   ```

   結構描述 Amazon Resource Name (ARN) 隨即顯示，如下列範例所示：

   ```
   {
     "schemaArn": "arn:aws:personalize:us-west-2:acct-id:schema/SchemaName"
   }
   ```

1. 執行以下命令來建立空的資料集。提供來自 的資料集群組 Amazon Resource Name (ARN) [建立資料集群組 (AWS CLI)](data-prep-ds-group.md#data-prep-creating-ds-group-cli)和上一個步驟的結構描述 ARN。資料集類型值可以是 `Interactions`、`Users`、`Actions`、 `Items`或 `Action_Interactions`。如需 API (匯入 API) 的詳細資訊，請參閱「[CreateDataset](API_CreateDataset.md)」。

   ```
   aws personalize create-dataset \
     --name {{Dataset Name}} \
     --dataset-group-arn {{Dataset Group ARN}} \
     --dataset-type {{Dataset Type}} \
     --schema-arn {{Schema Arn}}
   ```

   資料集 ARN 隨即顯示，如下列範例所示。

   ```
   {
     "datasetArn": "arn:aws:personalize:us-west-2:acct-id:dataset/DatasetName/INTERACTIONS"
   }
   ```

1. 記錄資料集 ARN 以供日後使用。建立資料集之後，您就可以匯入訓練資料。請參閱 [將訓練資料匯入 Amazon Personalize 資料集](import-data.md)。

## 建立資料集和結構描述 (AWS SDKs)
<a name="data-prep-creating-ds-sdk"></a>

若要使用 AWS SDKs 建立資料集和結構描述，您必須先定義 [Avro 格式](https://docs.oracle.com/database/nosql-12.1.3.0/GettingStartedGuide/avroschemas.html)的結構描述，並使用 [CreateSchema](API_CreateSchema.md)操作將其新增至 Amazon Personalize。建立結構描述後，您無法變更結構描述。然後使用 [CreateDataset](API_CreateDataset.md)操作建立資料集。

**建立結構描述和資料集**

1. 如果您尚未建立結構描述 JSON 檔案，請依照 中的指示[為 Amazon Personalize 結構描述建立結構描述 JSON 檔案](how-it-works-dataset-schema.md)建立概述您資料的結構描述 JSON 檔案。

1. 使用下列程式碼在 Amazon Personalize 中建立結構描述。指定結構描述的名稱，以及結構描述 JSON 檔案的檔案路徑。如果您要為網域資料集群組中的資料集建立結構描述，請新增 `domain` 參數並將其設定為 `ECOMMERCE`或 `VIDEO_ON_DEMAND`。如需 API (匯入 API) 的詳細資訊，請參閱「[CreateSchema](API_CreateSchema.md)」。

------
#### [ SDK for Python (Boto3) ]

   ```
   import boto3
   
   personalize = boto3.client('personalize')
   
   with open('{{schemaFile.json}}') as f:
       createSchemaResponse = personalize.create_schema(
           name = '{{schema name}}',
           schema = f.read()
       )
   
   schema_arn = createSchemaResponse['schemaArn']
   
   print('Schema ARN:' + schema_arn )
   ```

------
#### [ SDK for Java 2.x ]

   ```
   public static String createSchema(PersonalizeClient personalizeClient, String schemaName, String filePath) {
       
       String schema = null;
       
       try {
           schema = new String(Files.readAllBytes(Paths.get(filePath)));
       } catch (IOException e) {
           System.out.println(e.getMessage());
       }
       
       try {
           CreateSchemaRequest createSchemaRequest = CreateSchemaRequest.builder()
                   .name(schemaName)
                   .schema(schema)
                   .build();
   
           String schemaArn = personalizeClient.createSchema(createSchemaRequest).schemaArn();    
           System.out.println("Schema arn: " + schemaArn);
   
           return schemaArn;
   
       } catch(PersonalizeException e) {
           System.err.println(e.awsErrorDetails().errorMessage());
           System.exit(1);
       }
       return "";
   }
   ```

------
#### [ SDK for JavaScript v3 ]

   ```
   // Get service clients module and commands using ES6 syntax.
   import { CreateSchemaCommand } from "@aws-sdk/client-personalize";
   import { personalizeClient } from "./libs/personalizeClients.js";
   
   // Or, create the client here.
   // const personalizeClient = new PersonalizeClient({ region: "REGION"});
   
   import fs from "node:fs";
   
   const schemaFilePath = "SCHEMA_PATH";
   let mySchema = "";
   
   try {
     mySchema = fs.readFileSync(schemaFilePath).toString();
   } catch (err) {
     mySchema = "TEST"; // For unit tests.
   }
   // Set the schema parameters.
   export const createSchemaParam = {
     name: "NAME" /* required */,
     schema: mySchema /* required */,
   };
   
   export const run = async () => {
     try {
       const response = await personalizeClient.send(
         new CreateSchemaCommand(createSchemaParam),
       );
       console.log("Success", response);
       return response; // For unit tests.
     } catch (err) {
       console.log("Error", err);
     }
   };
   run();
   ```

------

   Amazon Personalize 會傳回新結構描述的 ARN。記錄它，因為您將在下一個步驟中需要它。

1. 使用 [CreateDataset](API_CreateDataset.md)操作建立資料集。下列程式碼說明如何建立資料集。指定資料集群組的 Amazon Resource Name (ARN)、上一個步驟的結構描述 ARN，並指定資料集類型。資料集類型值可以是 `Interactions`、`Users`、`Actions`、 `Items`或 `Action_Interactions`。如需不同資料集類型的資訊，請參閱 [準備 Amazon Personalize 的訓練資料](preparing-training-data.md)。

------
#### [ SDK for Python (Boto3) ]

   ```
   import boto3
   
   personalize = boto3.client('personalize')
   
   response = personalize.create_dataset(
       name = '{{dataset_name}}',
       schemaArn = '{{schema_arn}}',
       datasetGroupArn = '{{dataset_group_arn}}',
       datasetType = '{{dataset_type}}'
   )
   
   print ('Dataset Arn: ' + response['datasetArn'])
   ```

------
#### [ SDK for Java 2.x ]

   ```
   public static String createDataset(PersonalizeClient personalizeClient, 
                                       String datasetName, 
                                       String datasetGroupArn, 
                                       String datasetType, 
                                       String schemaArn) {
       try {
           CreateDatasetRequest request = CreateDatasetRequest.builder()
                   .name(datasetName)
                   .datasetGroupArn(datasetGroupArn)
                   .datasetType(datasetType)
                   .schemaArn(schemaArn).build();
       
           String datasetArn = personalizeClient.createDataset(request).datasetArn();
           System.out.println("Dataset " + datasetName + " created. Dataset ARN: " + datasetArn);
           
           return datasetArn;
           
       } catch(PersonalizeException e) {
           System.err.println(e.awsErrorDetails().errorMessage());
           System.exit(1);
       }
       return "";
   }
   ```

------
#### [ SDK for JavaScript v3 ]

   ```
   // Get service clients module and commands using ES6 syntax.
   import { CreateDatasetCommand } from "@aws-sdk/client-personalize";
   import { personalizeClient } from "./libs/personalizeClients.js";
   
   // Or, create the client here.
   // const personalizeClient = new PersonalizeClient({ region: "REGION"});
   
   // Set the dataset's parameters.
   export const createDatasetParam = {
     datasetGroupArn: "DATASET_GROUP_ARN" /* required */,
     datasetType: "DATASET_TYPE" /* required */,
     name: "NAME" /* required */,
     schemaArn: "SCHEMA_ARN" /* required */,
   };
   
   export const run = async () => {
     try {
       const response = await personalizeClient.send(
         new CreateDatasetCommand(createDatasetParam),
       );
       console.log("Success", response);
       return response; // For unit tests.
     } catch (err) {
       console.log("Error", err);
     }
   };
   run();
   ```

------

   建立資料集之後，您就可以匯入訓練資料。請參閱[將訓練資料匯入 Amazon Personalize 資料集](import-data.md)。