SODA API を使用して、Socrata データセット内のすべての行をプログラムで削除しようとしています。データセット自体を削除したくありません。再構築するために多くの作業が必要になるからです。また、数千行に対してこれを行うのは非常に遅いです。
以前は、 Twitterの誰かが行なしで Upsert を行うことを提案するまで、各行をゆっくりと繰り返し、それぞれを削除していました。私はこれを実装してうまくいったと信じていますが、今はそうではありません。
関連するコードは次のとおりです。
headers = {'X-App-Token': config.app_token}
headers['Content-Type'] = 'application/json'
r = requests.put(config.dataset + '.json', data='[ ]', headers=headers, auth=config.auth)
print r.status_code, r.text
出力は次のとおりです。
200 {
"By RowIdentifier" : 0,
"Rows Updated" : 0,
"Rows Deleted" : 0,
"Rows Created" : 0,
"Errors" : 0,
"By SID" : 0
}
(したがって、問題は認証や承認などに関係していないと言っても過言ではないと思いますか?行をアップサートする他の機能は正常に動作するため、間違ったデータセット URL などの問題でもありません。)
前後の行数も問い合わせてみましたが変化なし。まだ数千行。
私が知る限り、行を一括で置換するための API ドキュメントに従っています。
私が考えることができる唯一のことは、バグのために、同じ行 ID を持つ複数の行があるということです。
編集
いくつかの重複する行識別子を次に示します。
rowid
行識別子として確実に設定されます。
行識別子は「本質的に主キーと同じように動作する」と想定されているため、これはバグなのか、それとも何かがひどく間違っているのか疑問に思い始めています。パブリッシング コードは次のようになります。
def publishDataset(rows):
r = requests.post(config.dataset, data=simplejson.dumps(rows), headers = headers, auth=config.auth)
j = r.json()
print
if r.status_code != 200:
raise RuntimeError ( "%d Socrata error: %s" % (r.status_code, j['message']))
return j
完全なコードはこちら: https://github.com/stevage/meshlium-soda