【问题标题】:Querying _PARTITIONTIME only yields a date查询 _PARTITIONTIME 只产生一个日期
【发布时间】:2021-07-18 03:42:50
【问题描述】:

我尝试在提取时间分区表中查询 _PARTITIONTIME。这样做后,我意识到每一行都产生了一个相同的错误时间戳:2019-02-25 00:00:00 UTC。我试图提取 _PARTITIONTIME 的特定“部分”,但除日期之外的所有部分都为 0。

虽然数据是流入表中的,但实际上是每 10 分钟左右分批插入一次(据我了解)。作为后续问题,何时计算 _PARTITIONTIME?我看到了这个post,但我只了解流程,而不是实际计算的时候。

【问题讨论】:

    标签: google-bigquery partitioning


    【解决方案1】:

    _PARTITIONTIME 更像是_PARTITIONDATE - 您不应期望它包含记录流式传输的确切时间,而是该分区所属的日期。

    提取时间分区表包含一个名为 _PARTITIONTIME 的伪列,其中包含加载到表中的数据的基于日期的时间戳。 https://cloud.google.com/bigquery/docs/partitioned-tables

    【讨论】:

    • 嗯。所以澄清一下,没有办法提高超越日期的准确性?我希望用它来计算数据通过我的管道传输到 BQ 需要多长时间。我的计划是手动发布一个示例消息,然后在 BQ 中找到它,并获取它的摄取时间。
    • 我有一个时间戳列。事实上,我通常对它进行分区。话虽如此,那个时间戳怎么会给我 BQ 插入时间?
    • 我会把这个责任交给实际将数据插入 BQ 的任何函数。
    • 我的解析器将数据插入 BQ。我可以把它放在那里,但是我的计算不会考虑数据从解析器到实际插入所需的时间。话虽如此,总比没有好,应该接近。
    【解决方案2】:

    截至September 21, 2020,每小时时间分区功能为GA。对于按小时分区的表,BQ 插入默认写入分区小时 00,除非在插入/摄取时明确指定要写入的分区。可以使用$YYYYMMDDHH 或沿着 SQL 语句的行指定分区:

    INSERT INTO
      project_id.dataset.mytable (
        _PARTITIONTIME,
        field1,
        field2)
    SELECT
      TIMESTAMP_TRUNC(TIMESTAMP "2008-12-25 15:30:00+00", HOUR, "UTC"),
      1,
      "one"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-05
      • 2017-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多