python - "Not found: Table"用于新的 bigquery 表

标签 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()

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()

我什至多次重试插入,两次重试之间有 3 秒的 sleep 时间。有什么想法吗?

我的 projectId 是 stylight-bi-testing

在 10:00 到 12:00(以 UTC 给出的时间)之间有很多失败

最佳答案

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

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

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

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

关于python - "Not found: Table"用于新的 bigquery 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30348384/

相关文章:

google-cloud-platform - Google Cloud BigQuery 异常处理

python - 如何将新的键值对添加到字典中,其中值是数组的数组

python - 从另一个文件导入方法的问题

google-bigquery - Google Dataflow - 由 GoogleSheets 支持的 BigQuery 作业

sql - 如何计算第 20 个百分位数和第 80 个百分位数之间的平均值?

google-bigquery - 在BigQuery中使用GROUP EACH BY了解 "Resources exceeded during query execution"

python - 从 python 调试器将变量保存到交互式命名空间

python - 当字符串可能不包含模式或所有 n 元素时,如何在 Python 中可靠地拆分字符串?

python - 如何将 2D numpy 数组映射到 1D 数组,并将另一个 2D 数组作为映射?

java - TupleTag Tag <taginfo> 对应一个非单例结果