如果标准 SQL 不提供 _PARTITIONTIME 字段,我如何在 BigQuery 中查询流缓冲区

Posted

技术标签:

【中文标题】如果标准 SQL 不提供 _PARTITIONTIME 字段,我如何在 BigQuery 中查询流缓冲区【英文标题】:How do I query the streaming buffer in BigQuery if the _PARTITIONTIME field isn't available with Standard SQL 【发布时间】:2018-10-29 17:17:42 【问题描述】:

我们有一个分区 BigQuery 表,该表在自定义字段 (event_timestamp) 上进行分区。这是因为需要导入历史数据,同时仍然保持分区和控制查询成本。

这意味着该表没有_PARTITIONTIME 字段,我们无法通过查询WHERE _PARTITIONTIME IS NULL 来查看位于流缓冲区中的最近发送的记录。

那么,即使您使用自定义字段进行分区,是否也能够查询流缓冲区?

编辑我们使用的是标准 SQL,而不是旧版 SQL,抱歉之前没有明确说明。

【问题讨论】:

仅查询缓冲区中存在的数据时,您能否详细说明您的目标? @FelipeHoffa 主要是测试/验证函数是否按预期工作并写入/捕获预期数据。冲洗的延迟使这种缺乏可见性成为常规的绊脚石。通常,当您没有得到您期望的结果时,您会认为这是您的代码 - 在这种情况下,它实际上是在工作,但事情隐藏在缓冲区中。 【参考方案1】:

尽管查询具有时间分区字段的表仅支持通过标准 SQL,但我相信仍然支持 Legacy SQL 来查询流插入到表中

#legacySQL
select * from [<project-name>:<data-set>.<table>$__UNPARTITIONED__] 

参考:

https://cloud.google.com/bigquery/docs/partitioned-tables

Query Streaming Data Using --time_partitioning_field

【讨论】:

嘿@Logan 感谢您的链接 - 我正在更新我的问题以指定标准 SQL,否则您的答案将是准确的。我很抱歉没有更具体(实际上可能没有可用的标准 SQL 方法) 将此标记为答案,因为我认为标准 SQL 下没有解决方案 我们现在已经快两年了;我不敢相信在标准 SQL 中仍然没有解决方案!但是,到目前为止,这是我发现的唯一允许我查询在字段上分区的表的流缓冲区的方法。谢谢!

以上是关于如果标准 SQL 不提供 _PARTITIONTIME 字段,我如何在 BigQuery 中查询流缓冲区的主要内容,如果未能解决你的问题,请参考以下文章

标准 SQL 中的 BigQuery 连接数组

大查询是不是为标准 SQL 执行 __TABLES_SUMMARY__

C语言几种特殊标准定义和用法

C语言几种特殊标准定义和用法

MySQL 基础教程-05 模式匹配

在大查询数据集中选择最新表 - 标准 SQL 语法