Google App Engine批量下载

5 投票
2 回答
858 浏览
提问于 2025-04-16 16:42

我在用批量下载从数据存储中下载数据(超过1GB)。突然,我的网络出了问题,下载过程在中间停止了。我想从停止的地方继续下载。但是当我尝试时,出现了以下错误:

File "/Users/FYP/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/api/datastore_types.py", line 156, in ValidateString
    (name, value, typename(value)))
BadArgumentError: kind should be a string; received 3 (a int):
[INFO    ] [WorkerThread-2] Backing off due to errors: 1.0 seconds
[INFO    ] An error occurred. Shutting down...
[ERROR   ] Error in WorkerThread-0: kind should be a string; received 3 (a int):

这是我用来下载数据的代码:

appcfg.py download_data --config_file=bulkloader.yaml --batch_size=200 --filename=final80_2.csv 
--kind=TasksTime1 --url=http://abc.appspot.com/_ah/remote_api --rps_limit=40 
--db_filename=bulkloader-progress-20110429.141103 --result_db_filename=bulkloader-results-20110429.141103

我该怎么解决这个问题呢?

2 个回答

0

我也遇到过同样的问题:

Error in WorkerThread-0: kind should be a string; received 3 (a int)

删除所有的 *.sql3 和 *.csv 文件后,这个错误就不再出现了。很明显,恢复功能是坏掉了,但如果你想再次进行批量下载,就必须先把它关掉。

通常情况下,我们会把批量加载的命令放在一个函数里,这样可以提前清理这些文件。

1

只需要重新运行相同的命令。根据文档的说明:

如果传输中断了,你可以使用 --db_filename=... 参数从中断的地方继续传输。这个参数的值是工具创建的进度文件的名字,这个名字可以是你在开始传输时用 --db_filename 参数提供的名字,或者是一个包含时间戳的默认名字。这是基于你已经安装了sqlite3,并且没有通过 --db_filename=skip 禁用进度文件的前提下。

你在第一次执行时指定了一个 db_filename,所以如果你重新运行这个命令,它应该能找到已有的文件,并从中断的地方继续。

撰写回答