我使用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()
result
变量包含用etag,id,kind,schema,selfLink,tableReference,type
创建的表信息,因此我假设表是正确创建的。在
后来我甚至得到了表,当我调用bigquery_service.tables().list(...)
问题是:
当插入之后,我仍然(经常)得到一个错误:Not found: MY_TABLE_NAME
我的insert函数调用如下所示:
^{pr2}$我甚至多次尝试插入,两次重试之间有3秒钟的睡眠时间。有什么想法吗?在
我的projectId是stylight-bi-testing
在10:00到12:00之间发生了很多故障(UTC时间)
根据您对我关于使用NOT_FOUND作为指示符创建表的问题的回答,这是有意的(尽管承认有些令人沮丧)行为。在
流式插入路径缓存有关表的信息(以及用户插入表的授权)。这是因为API的预期高QPS特性。我们还缓存某些负面响应,以再次保护缺陷或虐待客户。缓存的否定响应之一是目标表不存在。我们一直是以每台机器为基础来完成这项工作的,但是最近增加了一个额外的集中式缓存,这样所有的机器在第一个NOT_FOUND响应返回后几乎立即看到负缓存结果。在
一般来说,我们建议不要在insert请求中进行表创建,因为在发出数千QPS插入的系统中,表丢失可能会导致数千个表创建操作,这可能会给我们的系统带来负担。相反,如果您事先知道可能的一组表,我们建议使用一些周期性的进程,在将表用作流媒体目的地之前执行表创建。如果目标表本质上更具动态性,则可能需要在执行表创建之后实现延迟。在
为困难道歉。我们确实希望解决这个问题,但我们还没有任何时间框架。在
肖恩/尼尔斯,即使我也有同样的问题。我首先尝试流式插入,如果失败,我继续创建表。但在创建表之后,流式插入仍会失败一段时间(大约30秒到4分钟),并出现错误“table not found”。在这个时间间隔之后,相同的流式插入不会出现任何问题。在
相关问题 更多 >
编程相关推荐