

终止支持通知： AWS 将于 2025 年 12 月 15 日终止对的支持 AWS IoT Analytics。2025 年 12 月 15 日之后，您将无法再访问 AWS IoT Analytics 控制台或 AWS IoT Analytics 资源。有关更多信息，请参阅[AWS IoT Analytics 终止支持](https://docs.aws.amazon.com/iotanalytics/latest/userguide/iotanalytics-end-of-support.html)。

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

# 通过 Java 使用 CreateDataset API 和 AWS CLI
<a name="automate-create-dataset"></a>

创建数据集。数据集存储通过应用 `queryAction`（SQL 查询）或 `containerAction`（执行容器化应用程序）从数据存储中检索的数据。此操作创建数据集的骨架。该数据集可以通过调用 `CreateDatasetContent` 手动填充，也可以根据您指定的 `trigger` 自动填充。有关更多信息，请参阅[CreateDataset](https://docs.aws.amazon.com/iotanalytics/latest/APIReference/API_CreateDataset.html)和[https://docs.aws.amazon.com/iotanalytics/latest/APIReference/API_CreateDatasetContent.html](https://docs.aws.amazon.com/iotanalytics/latest/APIReference/API_CreateDatasetContent.html)。

**Topics**
+ [示例 1 - 创建 SQL 数据集 (java)](#automate-example1)
+ [示例 2 - 创建具有增量时段的 SQL 数据集 (Java)](#automate-example2)
+ [示例 3 - 创建自带计划触发器的容器数据集 (Java)](#automate-example3)
+ [示例 4 - 创建以 SQL 数据集作为触发器的容器数据集 (Java)](#automate-example4)
+ [示例 5 - 创建 SQL 数据集 (CLI)](#automate-example5)
+ [示例 6 - 创建具有增量时段的 SQL 数据集 (CLI)](#automate-example6)

## 示例 1 - 创建 SQL 数据集 (java)
<a name="automate-example1"></a>

```
CreateDatasetRequest request = new CreateDatasetRequest();
request.setDatasetName(dataSetName);
DatasetAction action = new DatasetAction();

//Create Action
action.setActionName("SQLAction1");
action.setQueryAction(new SqlQueryDatasetAction().withSqlQuery("select * from DataStoreName"));

// Add Action to Actions List
List<DatasetAction> actions = new ArrayList<DatasetAction>();
actions.add(action);

//Create Trigger
DatasetTrigger trigger = new DatasetTrigger();
trigger.setSchedule(new Schedule().withExpression("cron(0 12 * * ? *)"));

//Add Trigger to Triggers List
List<DatasetTrigger> triggers = new ArrayList<DatasetTrigger>();
triggers.add(trigger);

// Add Triggers and Actions to CreateDatasetRequest object
request.setActions(actions);
request.setTriggers(triggers);

// Add RetentionPeriod to CreateDatasetRequest object
request.setRetentionPeriod(new RetentionPeriod().withNumberOfDays(10));
final CreateDatasetResult result = iot.createDataset(request);
```

成功时的输出：

```
{DatasetName: <datatsetName>, DatasetArn: <datatsetARN>, RetentionPeriod: {unlimited: true} or {numberOfDays: 10, unlimited: false}}
```

## 示例 2 - 创建具有增量时段的 SQL 数据集 (Java)
<a name="automate-example2"></a>

```
CreateDatasetRequest request = new CreateDatasetRequest();
request.setDatasetName(dataSetName);
DatasetAction action = new DatasetAction();

//Create Filter for DeltaTime
QueryFilter deltaTimeFilter = new QueryFilter();
deltaTimeFilter.withDeltaTime(
                new DeltaTime()
                .withOffsetSeconds(-1 * EstimatedDataDelayInSeconds)
                .withTimeExpression("from_unixtime(timestamp)"));

//Create Action
action.setActionName("SQLActionWithDeltaTime");
action.setQueryAction(new SqlQueryDatasetAction()
                .withSqlQuery("SELECT * from DataStoreName")
                .withFilters(deltaTimeFilter));

// Add Action to Actions List
List<DatasetAction> actions = new ArrayList<DatasetAction>();
actions.add(action);

//Create Trigger
DatasetTrigger trigger = new DatasetTrigger();
trigger.setSchedule(new Schedule().withExpression("cron(0 12 * * ? *)"));

//Add Trigger to Triggers List
List<DatasetTrigger> triggers = new ArrayList<DatasetTrigger>();
triggers.add(trigger);

// Add Triggers and Actions to CreateDatasetRequest object
request.setActions(actions);
request.setTriggers(triggers);

// Add RetentionPeriod to CreateDatasetRequest object
request.setRetentionPeriod(new RetentionPeriod().withNumberOfDays(10));
final CreateDatasetResult result = iot.createDataset(request);
```

成功时的输出：

```
{DatasetName: <datatsetName>, DatasetArn: <datatsetARN>, RetentionPeriod: {unlimited: true} or {numberOfDays: 10, unlimited: false}}
```

## 示例 3 - 创建自带计划触发器的容器数据集 (Java)
<a name="automate-example3"></a>

```
CreateDatasetRequest request = new CreateDatasetRequest();
request.setDatasetName(dataSetName);
DatasetAction action = new DatasetAction();

//Create Action
action.setActionName("ContainerActionDataset");
action.setContainerAction(new ContainerDatasetAction()
        .withImage(ImageURI)
        .withExecutionRoleArn(ExecutionRoleArn)
        .withResourceConfiguration(
                new ResourceConfiguration()
                .withComputeType(new ComputeType().withAcu(1))
                .withVolumeSizeInGB(1))
        .withVariables(new Variable()
        .withName("VariableName")
        .withStringValue("VariableValue"));

// Add Action to Actions List
List<DatasetAction> actions = new ArrayList<DatasetAction>();
actions.add(action);

//Create Trigger
DatasetTrigger trigger = new DatasetTrigger();
trigger.setSchedule(new Schedule().withExpression("cron(0 12 * * ? *)"));

//Add Trigger to Triggers List
List<DatasetTrigger> triggers = new ArrayList<DatasetTrigger>();
triggers.add(trigger);

// Add Triggers and Actions to CreateDatasetRequest object
request.setActions(actions);
request.setTriggers(triggers);

// Add RetentionPeriod to CreateDatasetRequest object
request.setRetentionPeriod(new RetentionPeriod().withNumberOfDays(10));
final CreateDatasetResult result = iot.createDataset(request);
```

成功时的输出：

```
{DatasetName: <datatsetName>, DatasetArn: <datatsetARN>, RetentionPeriod: {unlimited: true} or {numberOfDays: 10, unlimited: false}}
```

## 示例 4 - 创建以 SQL 数据集作为触发器的容器数据集 (Java)
<a name="automate-example4"></a>

```
CreateDatasetRequest request = new CreateDatasetRequest();
request.setDatasetName(dataSetName);
DatasetAction action = new DatasetAction();

//Create Action
action.setActionName("ContainerActionDataset");
action.setContainerAction(new ContainerDatasetAction()
        .withImage(ImageURI)
        .withExecutionRoleArn(ExecutionRoleArn)
        .withResourceConfiguration(
                new ResourceConfiguration()
                .withComputeType(new ComputeType().withAcu(1))
                .withVolumeSizeInGB(1))
        .withVariables(new Variable()
        .withName("VariableName")
        .withStringValue("VariableValue"));

// Add Action to Actions List
List<DatasetAction> actions = new ArrayList<DatasetAction>();
actions.add(action);

//Create Trigger
DatasetTrigger trigger = new DatasetTrigger()
        .withDataset(new TriggeringDataset()
                .withName(TriggeringSQLDataSetName));

//Add Trigger to Triggers List
List<DatasetTrigger> triggers = new ArrayList<DatasetTrigger>();
triggers.add(trigger);

// Add Triggers and Actions to CreateDatasetRequest object
request.setActions(actions);
request.setTriggers(triggers);
final CreateDatasetResult result = iot.createDataset(request);
```

成功时的输出：

```
{DatasetName: <datatsetName>, DatasetArn: <datatsetARN>}
```

## 示例 5 - 创建 SQL 数据集 (CLI)
<a name="automate-example5"></a>

```
aws iotanalytics --endpoint <EndPoint>  --region <Region> create-dataset --dataset-name="<dataSetName>" --actions="[{\"actionName\":\"<ActionName>\", \"queryAction\":{\"sqlQuery\":\"<SQLQuery>\"}}]" --retentionPeriod numberOfDays=10
```

成功时的输出：

```
{
    "datasetName": "<datasetName>",
    "datasetArn": "<datatsetARN>",
    "retentionPeriod": {unlimited: true} or {numberOfDays: 10, unlimited: false}
}
```

## 示例 6 - 创建具有增量时段的 SQL 数据集 (CLI)
<a name="automate-example6"></a>

增量时段是一系列用户定义的不重叠且连续的时间间隔。通过使用增量时段，您可以使用在上次分析后到达数据存储的新数据创建数据集内容，并对新数据执行分析。您可以通过在数据集的`filters`部分`deltaTime`中设置来创建增量窗口 ([CreateDataset](https://docs.aws.amazon.com/iotanalytics/latest/userguide/api.html#cli-iotanalytics-createdataset))。`queryAction`通常，您还希望设置时间间隔触发器以自动创建数据集内容 (`triggers:schedule:expression`)。基本上，这使您可以筛选在特定时间窗口中到达的消息，这样来自以前时间窗口的消息中包含的数据不会重复计数。

在该示例中，我们创建一个新数据集，它仅使用在上次传送后到达的数据每隔 15 分钟自动创建新的数据集内容。我们指定 3 分钟（180 秒）的 `deltaTime` 偏差，以允许到达指定数据存储的消息延迟 3 分钟。因此，如果数据集内容是在上午 10:30 创建的，则使用的数据（包含在数据集内容中）的时间戳在上午 10:12 到上午 10:27 之间（即上午 10:30 - 15 分钟 - 3 分钟到上午 10:30 - 3 分钟）。

```
aws iotanalytics --endpoint <EndPoint>  --region <Region> create-dataset --cli-input-json file://delta-window.json
```

`delta-window.json` 文件包含以下内容。

```
{
  "datasetName": "delta_window_example",
  "actions": [
    {
      "actionName": "delta_window_action",
      "queryAction": {
        "sqlQuery": "SELECT temperature, humidity, timestamp FROM my_datastore",
        "filters": [
          {
            "deltaTime": {
              "offsetSeconds": -180,
              "timeExpression": "from_unixtime(timestamp)"
            }
          }
        ]
      }
    }
  ],
  "triggers": [
    {
      "schedule": {
        "expression": "cron(0/15 * * * ? *)"
      }
    }
  ]
}
```

成功时的输出：

```
{
    "datasetName": "<datasetName>",
    "datasetArn": "<datatsetARN>",
}
```