phpamazon-web-servicesamazon-timestream

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


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.


Solution

  • 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