插入大查询表的行数少于预期

Posted

技术标签:

【中文标题】插入大查询表的行数少于预期【英文标题】:Less count of rows inserted to big query table than expected 【发布时间】:2018-02-15 13:29:14 【问题描述】:

我已将 71 行插入日分区表。在流式缓冲工作者处理之后,我的表中只有 48 行。我知道有重复数据删除过程,但行不同。我试图检查行在流缓冲区中的外观,并且我已经设置了条件以获取 _PARTITIONTIME 设置为 NULL 的结果。我什么都没有。

我不知道它是如何工作的。

//编辑: 我使用 cloud-bigquery 库中的 insertRows 方法插入了数据。 我正在使用此查询选择行:

SELECT * FROM [table$20180216]

【问题讨论】:

您是如何插入数据以及如何查询的?您可以通过编辑将此信息添加到您的帖子中 我已编辑帖子并将此信息添加到我的帖子中 附带说明,建议使用标准 SQL: SELECT * FROM table WHERE _PARTITIONDATE = "2018-02-16" 您可以在 UI 中单击“显示选项”启用标准 SQL。更多信息:cloud.google.com/bigquery/docs/reference/standard-sql/… 【参考方案1】:

如果将 _PARTITIONTIME 设置为 NULL,它将选择 0 个分区,因此选择 0 行。尝试通过设置 _PARTITIONDATE = "2018-02-15"(或更改为您需要的日期)来查询您插入行的分区。

【讨论】:

我已将 _PARTITIONDATE 设置为“2018-02-15”,但它返回零行。我不得不将字符串日期更改为时间戳,因为 _PARTITIONDATE 是 int32 类型(可能这会影响查询结果)。当我将分区日期添加到表的名称中时,我从该日期获得了行,但行数也少于预期(我已将 71 行插入流式缓冲区,并且我有 23 行预览现在)。 从表中获取所有行(包括流缓冲区)的最可靠方法是使用查询。我不确定表预览是否包含流缓冲区。但是,如果您昨天插入它们,它们现在应该在那里。能否包括用于流式插入的代码以及如何检查操作状态? 另外,如果你只运行 select * from table ,你会看到所有的行吗? 我解决了,这是我的错误。我的查询工作者中有批处理,在截断批处理行后,自动增量复制了插入 ID。

以上是关于插入大查询表的行数少于预期的主要内容,如果未能解决你的问题,请参考以下文章

查询在 JDBC 中使用时返回的行数少于 SQL 开发人员

为啥选择单个属性返回的行数少于选择 Oracle SQL 中的所有列

插入并返回插入的行数(非重复)和记录 ID(新的或重复的)

受 BigQuery 查询影响的行数

DataTable.Load 显示的行数少于源 DataReader

如果记录数小于详细信息部分中定义的行,如何插入空行