"Not found: Table" 用于新的 bigquery table
"Not found: Table" for new bigquery table
我使用 python sdk 创建一个新的 bigquery table:
tableInfo = {
'tableReference':{
'datasetId':datasetId,
'projectId':projectId,
'tableId':targetTableId
},
'schema':schema
}
result = bigquery_service.tables().insert(projectId=projectId,
datasetId=datasetId,
body=tableInfo).execute()
result
变量包含使用 etag,id,kind,schema,selfLink,tableReference,type
创建的 table 信息 - 因此我假设 table 已正确创建。
之后我什至得到 table,当我调用 bigquery_service.tables().list(...)
问题是:
在那之后插入时,我仍然(经常)得到一个错误:Not found: MY_TABLE_NAME
我的插入函数调用如下所示:
response = bigquery_service.tabledata().insertAll(
projectId=projectId,
datasetId=datasetId,
tableId=targetTableId,
body=body).execute()
我什至多次重试插入,两次重试之间有 3 秒的休眠。有什么想法吗?
我的 projectId 是 stylight-bi-testing
在 10:00 和 12:00 之间有很多失败(以 UTC 给出的时间)
Sean/Nils,我也有同样的问题。我首先尝试流式插入,如果失败,我继续创建 table。但是在创建 table 之后,流式插入仍然失败了一段时间(约 30 秒到 4 分钟)并出现错误 "Table not found"。在此间隔之后,相同的流式插入将毫无问题地通过。
根据你对我关于使用 NOT_FOUND 作为指标来创建 table 的问题的回答,这是有意的(虽然公认有些令人沮丧)行为。
流式插入路径缓存有关 table 的信息(以及用户插入 table 的授权)。这是因为 API 的预期高 QPS 性质。我们还缓存某些负面响应,以再次保护有缺陷或滥用行为的客户。其中一个缓存的否定响应是目的地不存在 table。我们一直在每台机器上这样做,但最近添加了一个额外的集中式缓存,这样所有机器都会在返回第一个 NOT_FOUND 响应后几乎立即看到负面缓存结果。
一般来说,我们建议 table 创建不要与插入请求内联,因为在发出数千 QPS 插入的系统中,table 未命中可能会导致数千 table 创建操作可能会对我们的系统造成负担。相反,如果您事先知道可能的 table 集合,我们建议使用一些周期性进程,在将它们用作流媒体目的地之前执行 table 创建。如果您的目的地 table 本质上更具动态性,您可能需要在执行 table 创建后实施延迟。
对困难表示歉意。我们确实希望解决这个问题,但我们还没有任何时间表。
我使用 python sdk 创建一个新的 bigquery table:
tableInfo = {
'tableReference':{
'datasetId':datasetId,
'projectId':projectId,
'tableId':targetTableId
},
'schema':schema
}
result = bigquery_service.tables().insert(projectId=projectId,
datasetId=datasetId,
body=tableInfo).execute()
result
变量包含使用 etag,id,kind,schema,selfLink,tableReference,type
创建的 table 信息 - 因此我假设 table 已正确创建。
之后我什至得到 table,当我调用 bigquery_service.tables().list(...)
问题是:
在那之后插入时,我仍然(经常)得到一个错误:Not found: MY_TABLE_NAME
我的插入函数调用如下所示:
response = bigquery_service.tabledata().insertAll(
projectId=projectId,
datasetId=datasetId,
tableId=targetTableId,
body=body).execute()
我什至多次重试插入,两次重试之间有 3 秒的休眠。有什么想法吗?
我的 projectId 是 stylight-bi-testing
在 10:00 和 12:00 之间有很多失败(以 UTC 给出的时间)
Sean/Nils,我也有同样的问题。我首先尝试流式插入,如果失败,我继续创建 table。但是在创建 table 之后,流式插入仍然失败了一段时间(约 30 秒到 4 分钟)并出现错误 "Table not found"。在此间隔之后,相同的流式插入将毫无问题地通过。
根据你对我关于使用 NOT_FOUND 作为指标来创建 table 的问题的回答,这是有意的(虽然公认有些令人沮丧)行为。
流式插入路径缓存有关 table 的信息(以及用户插入 table 的授权)。这是因为 API 的预期高 QPS 性质。我们还缓存某些负面响应,以再次保护有缺陷或滥用行为的客户。其中一个缓存的否定响应是目的地不存在 table。我们一直在每台机器上这样做,但最近添加了一个额外的集中式缓存,这样所有机器都会在返回第一个 NOT_FOUND 响应后几乎立即看到负面缓存结果。
一般来说,我们建议 table 创建不要与插入请求内联,因为在发出数千 QPS 插入的系统中,table 未命中可能会导致数千 table 创建操作可能会对我们的系统造成负担。相反,如果您事先知道可能的 table 集合,我们建议使用一些周期性进程,在将它们用作流媒体目的地之前执行 table 创建。如果您的目的地 table 本质上更具动态性,您可能需要在执行 table 创建后实施延迟。
对困难表示歉意。我们确实希望解决这个问题,但我们还没有任何时间表。