Skip to content

Commit fc94637

Browse files
AWS IoT SiteWise now supports ingestion and querying of Null (all data types) and NaN (double type) values of bad or uncertain data quality. New partial error handling prevents data loss during ingestion. Enabled by default for new customers; existing customers can opt-in.
1 parent 75a1064 commit fc94637

21 files changed

+527
-28
lines changed

generator/ServiceModels/iotsitewise/iotsitewise-2019-12-02.api.json

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2717,6 +2717,7 @@
27172717
"type":"structure",
27182718
"required":["entries"],
27192719
"members":{
2720+
"enablePartialEntryProcessing":{"shape":"BooleanValue"},
27202721
"entries":{"shape":"PutAssetPropertyValueEntries"}
27212722
}
27222723
},
@@ -2727,6 +2728,7 @@
27272728
"errorEntries":{"shape":"BatchPutAssetPropertyErrorEntries"}
27282729
}
27292730
},
2731+
"BooleanValue":{"type":"boolean"},
27302732
"Bucket":{
27312733
"type":"string",
27322734
"max":63,
@@ -4232,7 +4234,8 @@
42324234
"configurationStatus":{"shape":"ConfigurationStatus"},
42334235
"lastUpdateDate":{"shape":"Timestamp"},
42344236
"warmTier":{"shape":"WarmTierState"},
4235-
"warmTierRetentionPeriod":{"shape":"WarmTierRetentionPeriod"}
4237+
"warmTierRetentionPeriod":{"shape":"WarmTierRetentionPeriod"},
4238+
"disallowIngestNullNaN":{"shape":"DisallowIngestNullNaN"}
42364239
}
42374240
},
42384241
"DescribeTimeSeriesRequest":{
@@ -4305,6 +4308,7 @@
43054308
"type":"list",
43064309
"member":{"shape":"DetailedError"}
43074310
},
4311+
"DisallowIngestNullNaN":{"type":"boolean"},
43084312
"DisassociateAssetsRequest":{
43094313
"type":"structure",
43104314
"required":[
@@ -5876,10 +5880,7 @@
58765880
"type":"boolean",
58775881
"box":true
58785882
},
5879-
"NumberOfDays":{
5880-
"type":"integer",
5881-
"min":30
5882-
},
5883+
"NumberOfDays":{"type":"integer"},
58835884
"Offset":{
58845885
"type":"string",
58855886
"max":25,
@@ -6097,6 +6098,13 @@
60976098
"PropertyValueBooleanValue":{"type":"boolean"},
60986099
"PropertyValueDoubleValue":{"type":"double"},
60996100
"PropertyValueIntegerValue":{"type":"integer"},
6101+
"PropertyValueNullValue":{
6102+
"type":"structure",
6103+
"required":["valueType"],
6104+
"members":{
6105+
"valueType":{"shape":"RawValueType"}
6106+
}
6107+
},
61006108
"PropertyValueStringValue":{"type":"string"},
61016109
"PutAssetPropertyValueEntries":{
61026110
"type":"list",
@@ -6157,7 +6165,8 @@
61576165
"disassociatedDataStorage":{"shape":"DisassociatedDataStorageState"},
61586166
"retentionPeriod":{"shape":"RetentionPeriod"},
61596167
"warmTier":{"shape":"WarmTierState"},
6160-
"warmTierRetentionPeriod":{"shape":"WarmTierRetentionPeriod"}
6168+
"warmTierRetentionPeriod":{"shape":"WarmTierRetentionPeriod"},
6169+
"disallowIngestNullNaN":{"shape":"DisallowIngestNullNaN"}
61616170
}
61626171
},
61636172
"PutStorageConfigurationResponse":{
@@ -6173,7 +6182,8 @@
61736182
"retentionPeriod":{"shape":"RetentionPeriod"},
61746183
"configurationStatus":{"shape":"ConfigurationStatus"},
61756184
"warmTier":{"shape":"WarmTierState"},
6176-
"warmTierRetentionPeriod":{"shape":"WarmTierRetentionPeriod"}
6185+
"warmTierRetentionPeriod":{"shape":"WarmTierRetentionPeriod"},
6186+
"disallowIngestNullNaN":{"shape":"DisallowIngestNullNaN"}
61776187
}
61786188
},
61796189
"Qualities":{
@@ -6203,6 +6213,16 @@
62036213
"error":{"httpStatusCode":400},
62046214
"exception":true
62056215
},
6216+
"RawValueType":{
6217+
"type":"string",
6218+
"enum":[
6219+
"D",
6220+
"B",
6221+
"S",
6222+
"I",
6223+
"U"
6224+
]
6225+
},
62066226
"Reference":{
62076227
"type":"structure",
62086228
"members":{
@@ -6950,7 +6970,8 @@
69506970
"stringValue":{"shape":"PropertyValueStringValue"},
69516971
"integerValue":{"shape":"PropertyValueIntegerValue"},
69526972
"doubleValue":{"shape":"PropertyValueDoubleValue"},
6953-
"booleanValue":{"shape":"PropertyValueBooleanValue"}
6973+
"booleanValue":{"shape":"PropertyValueBooleanValue"},
6974+
"nullValue":{"shape":"PropertyValueNullValue"}
69546975
}
69556976
},
69566977
"Version":{

generator/ServiceModels/iotsitewise/iotsitewise-2019-12-02.docs.json

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -995,6 +995,12 @@
995995
"refs": {
996996
}
997997
},
998+
"BooleanValue": {
999+
"base": null,
1000+
"refs": {
1001+
"BatchPutAssetPropertyValueRequest$enablePartialEntryProcessing": "<p>This setting enables partial ingestion at entry-level. If set to <code>true</code>, we ingest all TQVs not resulting in an error. If set to <code>false</code>, an invalid TQV fails ingestion of the entire entry that contains it.</p>"
1002+
}
1003+
},
9981004
"Bucket": {
9991005
"base": null,
10001006
"refs": {
@@ -1799,6 +1805,14 @@
17991805
"ErrorDetails$details": "<p> A list of detailed errors. </p>"
18001806
}
18011807
},
1808+
"DisallowIngestNullNaN": {
1809+
"base": null,
1810+
"refs": {
1811+
"DescribeStorageConfigurationResponse$disallowIngestNullNaN": "<p>Describes the configuration for ingesting NULL and NaN data. By default the feature is allowed. The feature is disallowed if the value is <code>true</code>.</p>",
1812+
"PutStorageConfigurationRequest$disallowIngestNullNaN": "<p>Describes the configuration for ingesting NULL and NaN data. By default the feature is allowed. The feature is disallowed if the value is <code>true</code>.</p>",
1813+
"PutStorageConfigurationResponse$disallowIngestNullNaN": "<p>Describes the configuration for ingesting NULL and NaN data. By default the feature is allowed. The feature is disallowed if the value is <code>true</code>.</p>"
1814+
}
1815+
},
18021816
"DisassociateAssetsRequest": {
18031817
"base": null,
18041818
"refs": {
@@ -3192,7 +3206,7 @@
31923206
"PropertyValueDoubleValue": {
31933207
"base": null,
31943208
"refs": {
3195-
"Variant$doubleValue": "<p>Asset property data of type double (floating point number).</p>"
3209+
"Variant$doubleValue": "<p> Asset property data of type double (floating point number). The min value is -10^10. The max value is 10^10. Double.NaN is allowed. </p>"
31963210
}
31973211
},
31983212
"PropertyValueIntegerValue": {
@@ -3201,10 +3215,16 @@
32013215
"Variant$integerValue": "<p>Asset property data of type integer (whole number).</p>"
32023216
}
32033217
},
3218+
"PropertyValueNullValue": {
3219+
"base": "<p>The value type of null asset property data with BAD and UNCERTAIN qualities.</p>",
3220+
"refs": {
3221+
"Variant$nullValue": "<p>The type of null asset property data with BAD and UNCERTAIN qualities.</p>"
3222+
}
3223+
},
32043224
"PropertyValueStringValue": {
32053225
"base": null,
32063226
"refs": {
3207-
"Variant$stringValue": "<p>Asset property data of type string (sequence of characters).</p>"
3227+
"Variant$stringValue": "<p> Asset property data of type string (sequence of characters). The allowed pattern: \"^$|[^\\u0000-\\u001F\\u007F]+\". The max length is 1024. </p>"
32083228
}
32093229
},
32103230
"PutAssetPropertyValueEntries": {
@@ -3278,6 +3298,12 @@
32783298
"refs": {
32793299
}
32803300
},
3301+
"RawValueType": {
3302+
"base": null,
3303+
"refs": {
3304+
"PropertyValueNullValue$valueType": "<p>The type of null asset property data.</p>"
3305+
}
3306+
},
32813307
"Reference": {
32823308
"base": "<p>Contains the reference information.</p>",
32833309
"refs": {

generator/ServiceModels/iotsitewise/iotsitewise-2019-12-02.normal.json

Lines changed: 46 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3583,6 +3583,10 @@
35833583
"type":"structure",
35843584
"required":["entries"],
35853585
"members":{
3586+
"enablePartialEntryProcessing":{
3587+
"shape":"BooleanValue",
3588+
"documentation":"<p>This setting enables partial ingestion at entry-level. If set to <code>true</code>, we ingest all TQVs not resulting in an error. If set to <code>false</code>, an invalid TQV fails ingestion of the entire entry that contains it.</p>"
3589+
},
35863590
"entries":{
35873591
"shape":"PutAssetPropertyValueEntries",
35883592
"documentation":"<p>The list of asset property value entries for the batch put request. You can specify up to 10 entries per request.</p>"
@@ -3599,6 +3603,7 @@
35993603
}
36003604
}
36013605
},
3606+
"BooleanValue":{"type":"boolean"},
36023607
"Bucket":{
36033608
"type":"string",
36043609
"max":63,
@@ -6023,6 +6028,10 @@
60236028
"warmTierRetentionPeriod":{
60246029
"shape":"WarmTierRetentionPeriod",
60256030
"documentation":"<p>Set this period to specify how long your data is stored in the warm tier before it is deleted. You can set this only if cold tier is enabled.</p>"
6031+
},
6032+
"disallowIngestNullNaN":{
6033+
"shape":"DisallowIngestNullNaN",
6034+
"documentation":"<p>Describes the configuration for ingesting NULL and NaN data. By default the feature is allowed. The feature is disallowed if the value is <code>true</code>.</p>"
60266035
}
60276036
}
60286037
},
@@ -6133,6 +6142,7 @@
61336142
"type":"list",
61346143
"member":{"shape":"DetailedError"}
61356144
},
6145+
"DisallowIngestNullNaN":{"type":"boolean"},
61366146
"DisassociateAssetsRequest":{
61376147
"type":"structure",
61386148
"required":[
@@ -8206,10 +8216,7 @@
82068216
"type":"boolean",
82078217
"box":true
82088218
},
8209-
"NumberOfDays":{
8210-
"type":"integer",
8211-
"min":30
8212-
},
8219+
"NumberOfDays":{"type":"integer"},
82138220
"Offset":{
82148221
"type":"string",
82158222
"max":25,
@@ -8543,6 +8550,17 @@
85438550
"PropertyValueBooleanValue":{"type":"boolean"},
85448551
"PropertyValueDoubleValue":{"type":"double"},
85458552
"PropertyValueIntegerValue":{"type":"integer"},
8553+
"PropertyValueNullValue":{
8554+
"type":"structure",
8555+
"required":["valueType"],
8556+
"members":{
8557+
"valueType":{
8558+
"shape":"RawValueType",
8559+
"documentation":"<p>The type of null asset property data.</p>"
8560+
}
8561+
},
8562+
"documentation":"<p>The value type of null asset property data with BAD and UNCERTAIN qualities.</p>"
8563+
},
85468564
"PropertyValueStringValue":{"type":"string"},
85478565
"PutAssetPropertyValueEntries":{
85488566
"type":"list",
@@ -8652,6 +8670,10 @@
86528670
"warmTierRetentionPeriod":{
86538671
"shape":"WarmTierRetentionPeriod",
86548672
"documentation":"<p>Set this period to specify how long your data is stored in the warm tier before it is deleted. You can set this only if cold tier is enabled.</p>"
8673+
},
8674+
"disallowIngestNullNaN":{
8675+
"shape":"DisallowIngestNullNaN",
8676+
"documentation":"<p>Describes the configuration for ingesting NULL and NaN data. By default the feature is allowed. The feature is disallowed if the value is <code>true</code>.</p>"
86558677
}
86568678
}
86578679
},
@@ -8683,6 +8705,10 @@
86838705
"warmTierRetentionPeriod":{
86848706
"shape":"WarmTierRetentionPeriod",
86858707
"documentation":"<p>Set this period to specify how long your data is stored in the warm tier before it is deleted. You can set this only if cold tier is enabled.</p>"
8708+
},
8709+
"disallowIngestNullNaN":{
8710+
"shape":"DisallowIngestNullNaN",
8711+
"documentation":"<p>Describes the configuration for ingesting NULL and NaN data. By default the feature is allowed. The feature is disallowed if the value is <code>true</code>.</p>"
86868712
}
86878713
}
86888714
},
@@ -8714,6 +8740,16 @@
87148740
"error":{"httpStatusCode":400},
87158741
"exception":true
87168742
},
8743+
"RawValueType":{
8744+
"type":"string",
8745+
"enum":[
8746+
"D",
8747+
"B",
8748+
"S",
8749+
"I",
8750+
"U"
8751+
]
8752+
},
87178753
"Reference":{
87188754
"type":"structure",
87198755
"members":{
@@ -9773,19 +9809,23 @@
97739809
"members":{
97749810
"stringValue":{
97759811
"shape":"PropertyValueStringValue",
9776-
"documentation":"<p>Asset property data of type string (sequence of characters).</p>"
9812+
"documentation":"<p> Asset property data of type string (sequence of characters). The allowed pattern: \"^$|[^\\u0000-\\u001F\\u007F]+\". The max length is 1024. </p>"
97779813
},
97789814
"integerValue":{
97799815
"shape":"PropertyValueIntegerValue",
97809816
"documentation":"<p>Asset property data of type integer (whole number).</p>"
97819817
},
97829818
"doubleValue":{
97839819
"shape":"PropertyValueDoubleValue",
9784-
"documentation":"<p>Asset property data of type double (floating point number).</p>"
9820+
"documentation":"<p> Asset property data of type double (floating point number). The min value is -10^10. The max value is 10^10. Double.NaN is allowed. </p>"
97859821
},
97869822
"booleanValue":{
97879823
"shape":"PropertyValueBooleanValue",
97889824
"documentation":"<p>Asset property data of type Boolean (true or false).</p>"
9825+
},
9826+
"nullValue":{
9827+
"shape":"PropertyValueNullValue",
9828+
"documentation":"<p>The type of null asset property data with BAD and UNCERTAIN qualities.</p>"
97899829
}
97909830
},
97919831
"documentation":"<p>Contains an asset property value (of a single type only).</p>"

sdk/code-analysis/ServiceAnalysis/IoTSiteWise/Generated/PropertyValueRules.xml

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3334,10 +3334,6 @@
33343334
<max>36</max>
33353335
<pattern>^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$</pattern>
33363336
</property-value-rule>
3337-
<property-value-rule>
3338-
<property>Amazon.IoTSiteWise.Model.RetentionPeriod.NumberOfDays</property>
3339-
<min>30</min>
3340-
</property-value-rule>
33413337
<property-value-rule>
33423338
<property>Amazon.IoTSiteWise.Model.SiemensIE.IotCoreThingName</property>
33433339
<min>1</min>
@@ -3432,8 +3428,4 @@
34323428
<max>256</max>
34333429
<pattern>[^\u0000-\u001F\u007F]+</pattern>
34343430
</property-value-rule>
3435-
<property-value-rule>
3436-
<property>Amazon.IoTSiteWise.Model.WarmTierRetentionPeriod.NumberOfDays</property>
3437-
<min>30</min>
3438-
</property-value-rule>
34393431
</property-value-rules>

sdk/src/Services/IoTSiteWise/Generated/Model/BatchPutAssetPropertyValueRequest.cs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,29 @@ namespace Amazon.IoTSiteWise.Model
7070
/// </summary>
7171
public partial class BatchPutAssetPropertyValueRequest : AmazonIoTSiteWiseRequest
7272
{
73+
private bool? _enablePartialEntryProcessing;
7374
private List<PutAssetPropertyValueEntry> _entries = AWSConfigs.InitializeCollections ? new List<PutAssetPropertyValueEntry>() : null;
7475

76+
/// <summary>
77+
/// Gets and sets the property EnablePartialEntryProcessing.
78+
/// <para>
79+
/// This setting enables partial ingestion at entry-level. If set to <c>true</c>, we ingest
80+
/// all TQVs not resulting in an error. If set to <c>false</c>, an invalid TQV fails ingestion
81+
/// of the entire entry that contains it.
82+
/// </para>
83+
/// </summary>
84+
public bool EnablePartialEntryProcessing
85+
{
86+
get { return this._enablePartialEntryProcessing.GetValueOrDefault(); }
87+
set { this._enablePartialEntryProcessing = value; }
88+
}
89+
90+
// Check to see if EnablePartialEntryProcessing property is set
91+
internal bool IsSetEnablePartialEntryProcessing()
92+
{
93+
return this._enablePartialEntryProcessing.HasValue;
94+
}
95+
7596
/// <summary>
7697
/// Gets and sets the property Entries.
7798
/// <para>

sdk/src/Services/IoTSiteWise/Generated/Model/DescribeStorageConfigurationResponse.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ namespace Amazon.IoTSiteWise.Model
3535
public partial class DescribeStorageConfigurationResponse : AmazonWebServiceResponse
3636
{
3737
private ConfigurationStatus _configurationStatus;
38+
private bool? _disallowIngestNullNaN;
3839
private DisassociatedDataStorageState _disassociatedDataStorage;
3940
private DateTime? _lastUpdateDate;
4041
private MultiLayerStorage _multiLayerStorage;
@@ -59,6 +60,25 @@ internal bool IsSetConfigurationStatus()
5960
return this._configurationStatus != null;
6061
}
6162

63+
/// <summary>
64+
/// Gets and sets the property DisallowIngestNullNaN.
65+
/// <para>
66+
/// Describes the configuration for ingesting NULL and NaN data. By default the feature
67+
/// is allowed. The feature is disallowed if the value is <c>true</c>.
68+
/// </para>
69+
/// </summary>
70+
public bool DisallowIngestNullNaN
71+
{
72+
get { return this._disallowIngestNullNaN.GetValueOrDefault(); }
73+
set { this._disallowIngestNullNaN = value; }
74+
}
75+
76+
// Check to see if DisallowIngestNullNaN property is set
77+
internal bool IsSetDisallowIngestNullNaN()
78+
{
79+
return this._disallowIngestNullNaN.HasValue;
80+
}
81+
6282
/// <summary>
6383
/// Gets and sets the property DisassociatedDataStorage.
6484
/// <para>

0 commit comments

Comments
 (0)