def merge_entity(self, table_name, entity, if_match='*', timeout=None):
        '''
        Updates an existing entity by merging the entity's properties. Throws 
        if the entity does not exist. 
        
        This operation does not replace the existing entity as the update_entity
        operation does. A property cannot be removed with merge_entity.
        
        Any properties with null values are ignored. All other properties will be 
        updated or added.

        :param str table_name:
            The name of the table containing the entity to merge.
        :param entity:
            The entity to merge. Could be a dict or an entity object. 
            Must contain a PartitionKey and a RowKey.
        :type entity: dict or :class:`~azure.storage.table.models.Entity`
        :param str if_match:
            The client may specify the ETag for the entity on the 
            request in order to compare to the ETag maintained by the service 
            for the purpose of optimistic concurrency. The merge operation 
            will be performed only if the ETag sent by the client matches the 
            value maintained by the server, indicating that the entity has 
            not been modified since it was retrieved by the client. To force 
            an unconditional merge, set If-Match to the wildcard character (*).
        :param int timeout:
            The server timeout, expressed in seconds.
        :return: The etag of the entity.
        :rtype: str
        '''

        _validate_not_none('table_name', table_name)

        request = _merge_entity(entity, if_match, self.require_encryption,
                                self.key_encryption_key)
        request.host_locations = self._get_host_locations()
        request.query['timeout'] = _int_to_str(timeout)
        request.path = _get_entity_path(table_name, entity['PartitionKey'], entity['RowKey'])

        return self._perform_request(request, _extract_etag)
Updates an existing entity by merging the entity's properties. Throws 
        if the entity does not exist. 
        
        This operation does not replace the existing entity as the update_entity
        operation does. A property cannot be removed with merge_entity.
        
        Any properties with null values are ignored. All other properties will be 
        updated or added.

        :param str table_name:
            The name of the table containing the entity to merge.
        :param entity:
            The entity to merge. Could be a dict or an entity object. 
            Must contain a PartitionKey and a RowKey.
        :type entity: dict or :class:`~azure.storage.table.models.Entity`
        :param str if_match:
            The client may specify the ETag for the entity on the 
            request in order to compare to the ETag maintained by the service 
            for the purpose of optimistic concurrency. The merge operation 
            will be performed only if the ETag sent by the client matches the 
            value maintained by the server, indicating that the entity has 
            not been modified since it was retrieved by the client. To force 
            an unconditional merge, set If-Match to the wildcard character (*).
        :param int timeout:
            The server timeout, expressed in seconds.
        :return: The etag of the entity.
        :rtype: str