当前位置: 首页 > 知识库问答 >
问题:

新bigquery表的“未找到:表”

杨阳飇
2023-03-14

我使用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-因此,我假设表创建正确。

之后,当我调用<code>bigquery_service.tables().list(…)时,我甚至得到了表。

问题是:当在那之后插入时,我仍然(经常)得到一个错误:未找到:MY_TABLE_NAME

我的插入函数调用如下所示:

response = bigquery_service.tabledata().insertAll(
                        projectId=projectId,
                        datasetId=datasetId,
                        tableId=targetTableId,
                        body=body).execute()

我甚至多次重试插入,两次重试之间睡眠时间为3秒。有什么想法吗?

我的项目Id是< code>stylight-bi-testing

在10:00和12:00(UTC给出的时间)之间发生了很多故障

共有2个答案

田阳泽
2023-03-14

Sean/Nils,甚至我也有同样的问题。我先尝试流式插入,如果失败,我会继续创建表。但是在创建表后,流式插入仍然会失败一段时间(约30秒到4分钟),错误为“未找到表”。在此间隔之后,相同的流式插入会顺利通过。

秦凯旋
2023-03-14

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

流式插入路径缓存有关表的信息(以及用户插入到表中的授权)。这是因为 API 具有预期的高 QPS 特性。我们还会缓存某些负面响应,以便再次保护错误或滥用的客户端。其中一个缓存的否定响应是目标表不存在。我们始终在每台计算机的基础上执行此操作,但最近添加了一个额外的集中式缓存,以便所有计算机在返回第一个NOT_FOUND响应后几乎立即看到负缓存结果。

一般来说,我们建议表创建不要与insert请求一起发生,因为在一个发出数千个QPS的insert的系统中,一个表未命中可能会导致数千个表创建操作,这会加重我们系统的负担。相反,如果您事先知道可能的表集,我们建议在将表用作流目的地之前,执行一些定期的表创建过程。如果您的目标表本质上更具动态性,那么您可能需要在表创建完成后实现一个延迟。

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

 类似资料:
  • 问题内容: 我需要查询以在Bigquery中查找表(表元数据)的列名,例如SQL中的以下查询: 问题答案: 更新 :现在可以!请参阅下面的文档和答案。 回答,大约在2012年: 尽管这不是第一次请求,但当前无法通过查询检索表元数据(即列名和类型)。 您有理由将其作为查询吗?表格元数据可通过表格API获得。

  • 我正在尝试使用嵌入式h2 db运行我的应用程序。 我得到以下错误: 我已经试过了: 从. m2本地文件夹中删除h2存储库并重新导入并重新安装-未成功。 我还尝试使用以下内容配置属性文件: spring.datasource.driver类 Spring数据源。url=jdbc:h2:mem:testdb Springjpa。冬眠ddl auto=create spring.jpa.show-sql

  • 问题内容: 在Grails中,我可以在 BootStrap的 内存dataSource中创建到H2的域对象,并使结果恢复正常,但是一旦应用启动(例如,从GSP或控制器查询),然后尝试运行查询,我得到以下信息: 我已经清理了构建 运行Grails 2.0.0 我有多个SQL Server DB的数据源,这些数据源仅对StoredProcedures进行了调用,现在发现了一个用例,它使用良好的旧Dom

  • 我的构建路径中有jersey-client-2.25.1,我知道它有默认的提供者来转换javax。ws。rs.core。表单到应用程序/x-www-Form-urlencoded。 但对于此代码: 我不断得到: 我不应该按照这个注册一个MultiPart类。

  • Im my routes.php我有以下内容: 当我的数据库还没有表,我想进行php artisan迁移时,结果是:SQLSTATE[42S02]:找不到基表或视图:1146表“ae_dev.categories”不存在 我的迁移文件: 我认为Laravel托盘从routes.php调用类别,想做选择或某种想法,所以我想运行创建类别表的迁移,但上述错误是在... 我怎样才能解决这个问题?

  • 只是试图在signup.blade.php中找不到的Laravel类“form”中创建一个简单表单 这是web.php 这是signup.blade.php 我是否遗漏了任何或语句或此处有何错误谢谢!