新bigquery选项卡的“找不到:表”

2024-05-23 20:47:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用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时间)


Tags: tablesschemaservice时间sdkbodyresultbigquery
2条回答

根据您对我关于使用NOT_FOUND作为指示符创建表的问题的回答,这是有意的(尽管承认有些令人沮丧)行为。在

流式插入路径缓存有关表的信息(以及用户插入表的授权)。这是因为API的预期高QPS特性。我们还缓存某些负面响应,以再次保护缺陷或虐待客户。缓存的否定响应之一是目标表不存在。我们一直是以每台机器为基础来完成这项工作的,但是最近增加了一个额外的集中式缓存,这样所有的机器在第一个NOT_FOUND响应返回后几乎立即看到负缓存结果。在

一般来说,我们建议不要在insert请求中进行表创建,因为在发出数千QPS插入的系统中,表丢失可能会导致数千个表创建操作,这可能会给我们的系统带来负担。相反,如果您事先知道可能的一组表,我们建议使用一些周期性的进程,在将表用作流媒体目的地之前执行表创建。如果目标表本质上更具动态性,则可能需要在执行表创建之后实现延迟。在

为困难道歉。我们确实希望解决这个问题,但我们还没有任何时间框架。在

肖恩/尼尔斯,即使我也有同样的问题。我首先尝试流式插入,如果失败,我继续创建表。但在创建表之后,流式插入仍会失败一段时间(大约30秒到4分钟),并出现错误“table not found”。在这个时间间隔之后,相同的流式插入不会出现任何问题。在

相关问题 更多 >