

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 单独导入物品
<a name="importing-items"></a>

完成[创建架构和数据集](data-prep-creating-datasets.md)以创建物品数据集后，您可以单独将一个或多个新物品导入数据集。单独导入物品允许您随着目录的增长而进行小批量导入，从而使您的物品数据集保持最新状态。您一次最多可以导入 10 个物品。如果您有大量新物品，我们建议您先批量导入数据，然后根据需要单独导入物品数据。请参阅[通过数据集导入作业将批量数据导入到 Amazon Personalize](bulk-data-import-step.md)。

您可以使用 Amazon Personalize 控制台、 AWS Command Line Interface (AWS CLI) 或 AWS SDKs 导入商品。如果您导入的物品的 `itemId` 与您物品数据集中已有的物品 ID 相同，则 Amazon Personalize 会将其替换为新物品。

 有关 Amazon Personalize 如何更新新记录筛选器以及新记录如何影响建议的信息，请参阅[将单个记录导入 Amazon Personalize 数据集](incremental-data-updates.md)。

**Topics**
+ [单独导入物品（控制台）](#importing-items-console)
+ [单独导入物品 (AWS CLI)](#importing-items-cli)
+ [单独导入物品 (AWS SDKs)](#importing-items-cli-sdk)

## 单独导入物品（控制台）
<a name="importing-items-console"></a>

您一次最多可以向物品数据集导入 10 个物品。此过程假定您已经创建了一个物品数据集。有关创建数据集的信息，请参阅[创建架构和数据集](data-prep-creating-datasets.md)。

**单独导入物品（控制台）**

1. 在[https://console.aws.amazon.com/personalize/家](https://console.aws.amazon.com/personalize/home)中打开 Amazon Personalize 控制台并登录您的账户。

1. 在**数据集组**页面上，选择包含要将物品导入到的物品数据集的数据集组。

1. 在导航窗格中，选择**数据集**。

1. 在**数据集**页面上，选择物品数据集。

1. 在数据集详细信息页面的右上角，选择**修改数据集**，然后选择**创建记录**。

1. 在**创建物品记录**页面中，对于**记录输入**，以 JSON 格式输入物品详细信息。物品的字段名称和值必须与您在创建物品数据集时使用的架构匹配。Amazon Personalize 提供一个 JSON 模板，其中包含该架构中的字段名称和数据类型。

1. 选择**创建记录**。在**响应**中，将列出导入结果并显示成功或失败消息。

## 单独导入物品 (AWS CLI)
<a name="importing-items-cli"></a>

使用 [PutItems](API_UBS_PutItems.md) 操作将一个或多个物品添加到您的物品数据集。通过单次 `PutItems` 调用最多可以导入 10 个物品。此部分假定您已经创建了一个物品数据集。有关创建数据集的信息，请参阅[创建架构和数据集](data-prep-creating-datasets.md)。

通过 AWS CLI使用以下 `put-items` 命令添加一个或多个物品。将 `dataset arn` 替换为数据集的 Amazon 资源名称 (ARN)，将 `item Id` 替换为物品 ID。如果具有相同 `itemId` 的物品已存在于物品数据集中，则 Amazon Personalize 会将其替换为新物品。

对于 `properties`，针对物品数据集中的每个字段，将 `propertyName` 替换为架构中的字段名称（采用混合大小写）。例如，GENRES 将是 `genres`，CREATION\$1TIMESTAMP 将是 creationTimestamp。将 `item data` 替换为物品的数据。`CREATION_TIMESTAMP` 数据必须采用 [Unix 纪元时间格式](interactions-datasets.md#timestamp-data)（以秒为单位）。对于分类字符串数据，要包含单个属性的多个类别，请使用竖线 (`|`) 分隔每个类别。例如 `\"Horror|Action\"`。

```
aws personalize-events put-items \
  --dataset-arn dataset arn \
  --items '[{
      "itemId": "item Id", 
      "properties": "{\"propertyName\": "\item data\"}" 
    }, 
    {
      "itemId": "item Id", 
      "properties": "{\"propertyName\": "\item data\"}" 
    }]'
```

## 单独导入物品 (AWS SDKs)
<a name="importing-items-cli-sdk"></a>

使用 [PutItems](API_UBS_PutItems.md) 操作将一个或多个物品添加到您的物品数据集。通过单次 `PutItems` 调用最多可以导入 10 个物品。如果具有相同 `itemId` 的物品已存在于物品数据集中，则 Amazon Personalize 会将其替换为新物品。此部分假定您已经创建了一个物品数据集。有关创建数据集的信息，请参阅[创建架构和数据集](data-prep-creating-datasets.md)。

 以下代码显示如何将一个或多个物品添加到物品数据集。对于每个属性名称参数，传递架构中的字段名称（采用混合大小写）。例如，GENRES 将是 `genres`，CREATION\$1TIMESTAMP 将是 `creationTimestamp`。对于每个属性值参数，传递物品的数据。`CREATION_TIMESTAMP` 数据必须采用 [Unix 纪元时间格式](interactions-datasets.md#timestamp-data)（以秒为单位）。

对于分类字符串数据，要包含单个属性的多个类别，请使用竖线 (`|`) 分隔每个类别。例如 `"Horror|Action"`。

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

```
import boto3

personalize_events = boto3.client(service_name='personalize-events')

personalize_events.put_items(
    datasetArn = 'dataset arn',
    items = [{
      'itemId': 'item ID',
      'properties': "{\"propertyName\": \"item data\"}"   
      },
      {
      'itemId': 'item ID',
      'properties': "{\"propertyName\": \"item data\"}"   
      }]
)
```

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

```
public static int putItems(PersonalizeEventsClient personalizeEventsClient,
                           String datasetArn,
                           String item1Id,
                           String item1PropertyName,
                           String item1PropertyValue,
                           String item2Id,
                           String item2PropertyName,
                           String item2PropertyValue) {

    int responseCode = 0;
    ArrayList<Item> items = new ArrayList<>();

    try {
        Item item1 = Item.builder()
                .itemId(item1Id)
                .properties(String.format("{\"%1$s\": \"%2$s\"}",
                        item1PropertyName, item1PropertyValue))
                .build();

        items.add(item1);

        Item item2 = Item.builder()
                .itemId(item2Id)
                .properties(String.format("{\"%1$s\": \"%2$s\"}",
                        item2PropertyName, item2PropertyValue))
                .build();

        items.add(item2);

        PutItemsRequest putItemsRequest = PutItemsRequest.builder()
                .datasetArn(datasetArn)
                .items(items)
                .build();

        responseCode = personalizeEventsClient.putItems(putItemsRequest).sdkHttpResponse().statusCode();
        System.out.println("Response code: " + responseCode);
        return responseCode;

    } catch (PersonalizeEventsException e) {
        System.out.println(e.awsErrorDetails().errorMessage());
    }
    return responseCode;
    }
```

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

```
import {
  PutItemsCommand,
  PersonalizeEventsClient,
} from "@aws-sdk/client-personalize-events";

const personalizeEventsClient = new PersonalizeEventsClient({
  region: "REGION",
});

// set the put items parameters
var putItemsParam = {
  datasetArn:
    "DATASET ARN",
  items: [
    {
      itemId: "itemId", 
      properties: '{"column1Name": "value", "column2Name": "value"}',
    },
    {
      itemId: "itemId",
      properties: '{"column1Name": "value", "column2Name": "value"}',
    },
  ],
};
export const run = async () => {
  try {
    const response = await personalizeEventsClient.send(
      new PutItemsCommand(putItemsParam)
    );
    console.log("Success!", response);
    return response; // For unit tests.
  } catch (err) {
    console.log("Error", err);
  }
};
run();
```

------