gpt4 book ai didi

google-bigquery - 重新创建 BigQuery 表流式插入后不起作用?

转载 作者:行者123 更新时间:2023-12-03 18:35:54 25 4
gpt4 key购买 nike

我刚刚遇到了 BigQuery 的一个有趣问题。

本质上,有一个批处理作业在 BigQuery 中重新创建一个表 - 以删除数据 - 然后立即开始通过流接口(interface)输入一个新集合。

曾经这样工作了很长一段时间 - 成功。

最近它开始丢失数据。

一个小型测试用例证实了这种情况——如果数据馈送在重新创建(成功!)表后立即开始,部分数据集将丢失。
IE。在输入的 4000 条记录中,只有 2100 - 3500 条可以通过。

我怀疑在表操作(删除和创建)在整个环境中成功传播之前,表创建可能会返回成功,因此数据集的第一部分正在被馈送到表的旧副本(在这里推测)。

为了确认这一点,我在表创建和启动数据馈送之间设置了一个超时。事实上,如果超时时间小于 120 秒,部分数据集就会丢失。

如果超过 120 秒 - 似乎工作正常。

过去没有此超时的要求。我们正在使用美国 BigQuery。
我在这里遗漏了一些明显的东西吗?

编辑:从下面 Sean Chen 提供的评论和其他一些来源 - 由于表的缓存方式和内部表 id 在整个系统中传播的方式,这种行为是预期的。 BigQuery 专为仅附加类型的操作而构建。重写不是一个可以轻易融入设计的东西,应该避免。

最佳答案

由于 BigQuery 流式传输服务器缓存表生成 ID(表的内部名称)的方式,这或多或少是意料之中的。

您能否提供有关用例的更多信息?删除表然后再次写入同一个表似乎很奇怪。

一种解决方法可能是截断表,而不是删除它。您可以通过运行 SELECT * FROM <table> LIMIT 0 来执行此操作,并将表作为目标表(您可能希望使用 allow_large_results = true 并禁用展平,如果您有嵌套数据,这将有所帮助),然后使用 write_disposition=WRITE_TRUNCATE。这将清空表但保留模式。然后,之后流式传输的任何行都将应用于同一个表。

关于google-bigquery - 重新创建 BigQuery 表流式插入后不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36415265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com