gpt4 book ai didi

google-bigquery - 在按时间划分的bigquery表中,何时将数据写入__UNPARTITIONED__?有什么影响?

转载 作者:行者123 更新时间:2023-12-04 22:43:31 27 4
gpt4 key购买 nike

我遇到了按时间划分的bigquery表的一些怪异的未记录行为:

我在BigQuery中创建了一个按时间划分的表,并插入了数据。
我能够正常插入-数据已写入当今的分区(我也能够显式指定分区并写入分区)

在对新数据进行了一些测试之后,我删除了今天的分区,以便获得干净的数据:(CLI)

bq --project_id=my-project rm v1.mytable$20160613

然后,我检查它是否为空:
select count(*) from [v1.mytable]

结果 270而不是0

我尝试再次删除并重新运行查询-同样的结果。
所以我问
select count(*) from [v1.mytable$20160613]

结果 0

因此之前的几个日期我可能已经插入了数据,但都为0。
终于我跑了
SELECT partition_id from [v1.mytable$__PARTITIONS_SUMMARY__];

并且 结果

{ UNPARTITIONED 20160609 20160613}

而所有数据实际上都在 UNPARTITIONED

我的问题:
  • 什么时候将数据写入此特殊分区而不是日常分区,如何避免这种情况?
  • 除了失去寻址特定日期的能力(在查询中或在删除数据等时)之外,还有其他影响吗?我应该照顾这种情况吗?
  • 最佳答案

  • 数据在流缓冲区中时,仍保留在UNPARTITIONED分区中。要在查询中解决此分区,可以对_PARTITIONTIME伪列使用值NULL。
    SELECT ... FROM mydataset.mypartitioned_table WHERE _PARTITIONTIME IS NULL
  • 要删除给定分区的数据,建议对返回空结果的查询执行写截断操作。例如:
    bq query --destination_table=mydataset.mypartitionedtable\$20160121 --replace 'SELECT 1 as field1, "one" as field2 FROM (SELECT 1 as field1, "one" as field2) WHERE FALSE'

  • 请注意,该分区仍将存在(如果您从table $ __ PARTITIONS__SUMMARY中执行SELECT *),但是它将有0行。
    $ bq query 'SELECT COUNT(*) from [mydataset.mypartitionedtable$20160121]'

    +-----+
    | f0_ |
    +-----+
    | 0 |
    +-----+

    关于google-bigquery - 在按时间划分的bigquery表中,何时将数据写入__UNPARTITIONED__?有什么影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37792723/

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