为什么我的 BigQuery 流式插入受到速率限制?
Why are my BigQuery streaming inserts being rate limited?
我在 BigQuery 中进行流式插入时遇到 403 rateLimitExceeded
错误。我正在并行执行许多流式插入,所以虽然我知道这可能是某些速率限制的原因,但我不确定具体的速率限制是什么问题。
这是我得到的:
{
"code" : 403,
"errors" : [ {
"domain" : "global",
"message" : "Exceeded rate limits: Your table exceeded quota for rows. For more information, see https://cloud.google.com/bigquery/troubleshooting-errors",
"reason" : "rateLimitExceeded"
} ],
"message" : "Exceeded rate limits: Your table exceeded quota for rows. For more information, see https://cloud.google.com/bigquery/troubleshooting-errors"
}
基于 BigQuery's troubleshooting docs, 403 rateLimitExceeded
is caused by either concurrent rate limiting or API request limits,但文档听起来好像这些都不适用于流操作。
然而,错误中的message
提到了table exceeded quota for rows
,这听起来更像是403 quotaExceeded
错误。 streaming quotas 是:
- 最大行大小:1 MB - 我在这个范围内 - 我的平均行大小以 KB 为单位,我特别限制大小以确保它们不会达到 1MB
- HTTP 请求大小限制:10 MB - 我在这个范围内 - 我的平均批量小于 400KB,最大小于 1MB
- 每秒最大行数:每秒 100,000 行,每 table。超过此数量将导致 quota_exceeded 错误。 - 无法想象我会结束这个 - 每批大约有 500 行,每批大约需要 500 毫秒。我是 运行 并行但插入大约 2,000 tables,所以虽然我可能(虽然不太可能)做 100k rows/second,但不可能是每个 [=57] =](更像是每 table 最大值 1,000 rows/sec)
- 每个请求的最大行数:500 - 我正好是 500
- 每秒最大字节数:每秒 100 MB,根据 table。超过此数量将导致 quota_exceeded 错误。 - 同样,我的插入率与这个数量相差 table。
任何 thoughts/suggestions 关于这个速率限制是什么,我们将不胜感激!
我怀疑您偶尔会每秒向单个 table 提交超过 100,000 行。您的并行插入进程有时可能会全部排列在同一个 table 上吗?
将此报告为速率限制错误的原因是为了发出减速信号:要处理单个 table 上的零星操作峰值,您可以后退并重试分散负载。
这与配额失败不同,配额失败意味着重试仍然会失败,直到配额时期结束(例如,每日配额限制)。
我在 BigQuery 中进行流式插入时遇到 403 rateLimitExceeded
错误。我正在并行执行许多流式插入,所以虽然我知道这可能是某些速率限制的原因,但我不确定具体的速率限制是什么问题。
这是我得到的:
{
"code" : 403,
"errors" : [ {
"domain" : "global",
"message" : "Exceeded rate limits: Your table exceeded quota for rows. For more information, see https://cloud.google.com/bigquery/troubleshooting-errors",
"reason" : "rateLimitExceeded"
} ],
"message" : "Exceeded rate limits: Your table exceeded quota for rows. For more information, see https://cloud.google.com/bigquery/troubleshooting-errors"
}
基于 BigQuery's troubleshooting docs, 403 rateLimitExceeded
is caused by either concurrent rate limiting or API request limits,但文档听起来好像这些都不适用于流操作。
然而,错误中的message
提到了table exceeded quota for rows
,这听起来更像是403 quotaExceeded
错误。 streaming quotas 是:
- 最大行大小:1 MB - 我在这个范围内 - 我的平均行大小以 KB 为单位,我特别限制大小以确保它们不会达到 1MB
- HTTP 请求大小限制:10 MB - 我在这个范围内 - 我的平均批量小于 400KB,最大小于 1MB
- 每秒最大行数:每秒 100,000 行,每 table。超过此数量将导致 quota_exceeded 错误。 - 无法想象我会结束这个 - 每批大约有 500 行,每批大约需要 500 毫秒。我是 运行 并行但插入大约 2,000 tables,所以虽然我可能(虽然不太可能)做 100k rows/second,但不可能是每个 [=57] =](更像是每 table 最大值 1,000 rows/sec)
- 每个请求的最大行数:500 - 我正好是 500
- 每秒最大字节数:每秒 100 MB,根据 table。超过此数量将导致 quota_exceeded 错误。 - 同样,我的插入率与这个数量相差 table。
任何 thoughts/suggestions 关于这个速率限制是什么,我们将不胜感激!
我怀疑您偶尔会每秒向单个 table 提交超过 100,000 行。您的并行插入进程有时可能会全部排列在同一个 table 上吗?
将此报告为速率限制错误的原因是为了发出减速信号:要处理单个 table 上的零星操作峰值,您可以后退并重试分散负载。
这与配额失败不同,配额失败意味着重试仍然会失败,直到配额时期结束(例如,每日配额限制)。