如果标准 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 中查询流缓冲区的主要内容,如果未能解决你的问题,请参考以下文章