Хранилище php в хранилище Azure не работает - PullRequest
0 голосов
/ 05 июня 2018

Я новичок в хранилище таблиц Azure, и я строил таблицу со ссылками на страницы с данными из хранилища таблиц Azure с помощью php.Вы можете проверить, например, здесь . Все работает нормально до 1000 записей, но когда я перехожу к 1010 записям, он возвращает эту ошибку: -

Fail: Code: 400 Значение: Bad Requestдетали (если есть): {"odata.error": {"code": "InvalidInput", "message": {"lang": "en-US", "value": "Один из входных данных запроса недействителен.

Так что этот код в примере queryPaginationEntitiesSample function {$options->setTop($numPerPage * ($page-1));} вызывает эту ошибку. Может кто-нибудь помочь мне с этой проблемой?

function queryPaginationEntitiesSample($tableClient,$tableName,$numPerPage,$page,$filter) { 
    try { 
        $options = new QueryEntitiesOptions(); 
        $options->setFilter(Filter::applyQueryString($filter)); 
        if($page==1){ 
            $options->setTop($numPerPage);
            $options->setSelectFields(array('PartitionKey','RowKey','Timestamp'));  
            $result = $tableClient->queryEntities($tableName, $options); 
            $entities = $result->getEntities(); 
        } else{ 

             //skip $numPerPage * ($page-1) records 
            $options->setTop($numPerPage * ($page-1)); 
            $options->setSelectFields(array('PartitionKey','RowKey','Timestamp')); 
            $result = $tableClient->queryEntities($tableName, $options); 
            $nRowKey = $result->getNextRowKey(); 
            $nPartitionKey = $result->getNextPartitionKey(); 
            $options = new QueryEntitiesOptions(); 
            $options->setFilter(Filter::applyQueryString($filter)); 
            $options->setTop($numPerPage); 
            $options->setNextRowKey($nRowKey); 
            $options->setNextPartitionKey($nPartitionKey);  
            $result = $tableClient->queryEntities($tableName, $options); 
            $entities = $result->getEntities(); 
        }
        return $entities; 
    }catch(ServiceException $e){ 
        $code = $e->getCode(); 
        $error_message = $e->getMessage(); 
        echo $code.": ".$error_message.PHP_EOL; 
        return null; 
    } 
} 

1 Ответ

0 голосов
/ 07 июня 2018

Максимальное количество объектов, которые можно извлечь в одном запросе к табличному сервису, составляет 1000.Поскольку вы просите табличный сервис вернуть 1010 сущностей, вы получаете эту ошибку.

Я думаю, вам нужно как-то изменить свою логику (извините, я не настолько разбираюсь в PHP, поэтомуне могу предоставить код).Но, по сути, вам нужно будет вернуть токены продолжения (следующий PartitionKey и следующий RowKey) вместе с сущностями и передать эти значения методу queryPaginationEntitiesSample и использовать их.

См. нумерацию таблицы хранения Azure для запроса10 штук каждый раз в качестве ссылки (решение в .Net).

...