Home > database >  Writing record with MeasureValues error: Please use measureValue to send the data
Writing record with MeasureValues error: Please use measureValue to send the data

Time:05-05

I am writing to Timestream a list of dimensions and a list of measureValues but I keep getting this error:

"Message":"measureValues (list) not supported for BOOL, DOUBLE, VARCHAR and BIGINT data types. Please use measureValue to send the data."

Here is my code:

$dimensions= [];

$dimensions[] = [
 'Dimensions' => [
    [
        'DimensionValueType' => 'VARCHAR',
        'Name' => 'id',
        'Value' => '123456',
    ],
  ],
'MeasureValues' => [
    [
        'Name' => 'remark',
        'Type' => 'VARCHAR',
        'Value' => 'Some test text',
    ],
  ]
];

$query = [
'CommonAttributes' => [
    'MeasureName' => 'table_cnt',
    'MeasureValue' => 'table_cnt',
    'MeasureValueType' => 'VARCHAR',
    'Time' => '1651501311000', 
    'TimeUnit' => 'MILLISECONDS',
    'Version' => 1,
],
'DatabaseName' => 'mydb',
'Records' => $dimensions,
'TableName' => 'table',
];

$db->WriteRecords($query);

According to AWS documentation here (Parameter Syntax) it clearly shows that the supported data types are "DOUBLE|BIGINT|VARCHAR|BOOLEAN|TIMESTAMP|MULTI". If you check a bit down below under "MeasureValues" bulletpoint, it says the opposite: "This is only allowed for type MULTI." . Eitherway, I did try to change the type to MULTI but it still throws the same error.

CodePudding user response:

As you're expecting to use the format

[
    'Name' => 'remark',
    'Type' => 'VARCHAR',
    'Value' => 'Some test text',
],

as input to measures, you need to declare the MeasureValueType as 'MULTI' and not send a MeasureValue on the body of the request. In your example, the final request would be like this:

$dimensions= [];

$dimensions[] = [
 'Dimensions' => [
    [
        'DimensionValueType' => 'VARCHAR',
        'Name' => 'id',
        'Value' => '123456',
    ],
  ],
'MeasureValues' => [
    [
        'Name' => 'remark',
        'Type' => 'VARCHAR',
        'Value' => 'Some test text',
    ],
  ]
];

$query = [
'CommonAttributes' => [
    'MeasureName' => 'table_cnt',
     // Removed MeasureValue from here as it's MULTI
    'MeasureValueType' => 'MULTI', // <- changed from 'VARCHAR' to 'MULTI'
    'Time' => '1651501311000', 
    'TimeUnit' => 'MILLISECONDS',
    'Version' => 1,
],
'DatabaseName' => 'mydb',
'Records' => $dimensions,
'TableName' => 'table',
];

$db->WriteRecords($query); 

As a reference, I would suggest you to try it first without the CommonAttributes, as you're inserting only one record, like I demonstrate on this article: https://du7.medium.com/aws-timestream-multi-measures-71b41c089af4

  • Related