Nil*_*ehn 4 python google-bigquery
我使用 python sdk 创建一个新的 bigquery 表:
tableInfo = {
'tableReference':{
'datasetId':datasetId,
'projectId':projectId,
'tableId':targetTableId
},
'schema':schema
}
result = bigquery_service.tables().insert(projectId=projectId,
datasetId=datasetId,
body=tableInfo).execute()
Run Code Online (Sandbox Code Playgroud)
该result变量包含创建的表信息etag,id,kind,schema,selfLink,tableReference,type- 因此我假设该表已正确创建。
之后我什至拿到桌子,当我打电话时 bigquery_service.tables().list(...)
问题是:在那之后插入时,我仍然(经常)收到错误: Not found: MY_TABLE_NAME
我的插入函数调用如下所示:
response = bigquery_service.tabledata().insertAll(
projectId=projectId,
datasetId=datasetId,
tableId=targetTableId,
body=body).execute()
Run Code Online (Sandbox Code Playgroud)
我什至多次重试插入,重试之间有 3 秒的睡眠时间。有任何想法吗?
我的项目 ID 是 stylight-bi-testing
10:00 到 12:00(UTC 时间)之间发生了很多故障
根据您对我关于使用 NOT_FOUND 作为指标来创建表的问题的回答,这是有意的(尽管公认有些令人沮丧)行为。
流式插入路径缓存有关表的信息(以及用户插入表的授权)。这是因为 API 的预期高 QPS 性质。我们还会缓存某些负面响应,以再次保护有问题或滥用行为的客户端。缓存的否定响应之一是目标表不存在。我们总是在每台机器的基础上这样做,但最近添加了一个额外的集中缓存,这样所有机器几乎会在第一个 NOT_FOUND 响应返回后立即看到否定的缓存结果。
通常,我们建议不要在插入请求中内联创建表,因为在发出数千 QPS 插入的系统中,表未命中可能会导致数千次表创建操作,这会对我们的系统造成负担。相反,如果您事先知道可能的表集,我们建议一些定期过程,在将表用作流目的地之前执行表创建。如果目标表本质上更具动态性,则可能需要在执行表创建后实现延迟。
为困难道歉。我们确实希望解决这个问题,但我们还没有这样做的时间表。
| 归档时间: |
|
| 查看次数: |
1825 次 |
| 最近记录: |