0

私が取得する唯一の削除操作は、一度に 1 つずつ削除します: https://www.windowsazure.com/en-us/develop/nodejs/how-to-guides/table-services/#delete-entity

私が欲しいのは、SQLステートメントと同等です

DELETE FROM MyTable WHERE PartitionKey = 'something'

また、そのページにはバッチを送信する方法があります (これを削除で動作させることはできませんでしたが、誰かが理由を知っていますか?)。ただし、RowKeys を取得するために、削除するエンティティのリストを取得するためにまず選択を行う必要があります。Azure への 1 回のリクエストでそれを実行できるかどうか疑問に思っていました。

前もって感謝します。

更新: ここに私が試したコードがありますが、動作しません。関数が呼び出されたとき、すべての引数が正しいことを確認しました。

// subAccts all have PartitionKey = pKey
function deleteAccount(pKey, rKey, subAccts, callback) {
  var tasks = subAccts; // rename for readability
  tasks.push({ PartitionKey: pKey, RowKey: rKey });
  tableService.beginBatch();
  async.forEach(tasks, function(task, callback) {
    tableService.deleteEntity(myTable, task, function(error) {
      if (!error) {
        callback(null);
      }
      else {
        console.log(error);
        callback(error);
      }
    });
  }, function(error) {
    if (error) {
      console.log(error);
      callback(error);
      return;
    }
    tableService.commitBatch(callback);
  });
}
4

1 に答える 1

0

削除するエンティティのリストが事前にわからない場合は、最初にクエリを実行してそれらを見つける必要があります。

ただし、テーブルの再構築を検討することもできます。これらのエンティティを同じパーティションに配置するだけでなく、すべてを同じテーブルに (単独で) 配置できる場合は、テーブルを削除できます。これは一般的に古いログを削除するために使用されます... log_january、log_february などのテーブルを作成すると、1 つのコマンドで一度に 1 か月分を削除できます。

編集

ライブラリにバグがあるようです。回避策として、この編集を試してください。

BatchServiceClient.prototype.addOperation = function (webResource, outputData) {
    if (azureutil.objectIsNull(outputData)) {
        outputData = '';
    }

    if (webResource.httpVerb !== 'GET') {
        webResource.headers[HeaderConstants.CONTENT_ID] = this.operations.length + 1;

        if (webResource.httpVerb !== 'DELETE') {
            webResource.headers[HeaderConstants.CONTENT_TYPE] = 'application/atom+xml;type=entry';
        } else {
            delete webResource.headers[HeaderConstants.CONTENT_TYPE];
        }
...

これを修正するために、dev ブランチでプル リクエストを作成しました: https://github.com/WindowsAzure/azure-sdk-for-node/pull/300

これが修正されるまでは、コードを手動で編集するのではなく、いつでもフォーク ( https://github.com/smarx/azure-sdk-for-node ) を複製し、devブランチをチェックアウトできます。npm install

于 2012-08-03T05:17:01.090 に答える