【问题标题】:Can one have hourly partitions in a BigQuery table?BigQuery 表中可以有每小时分区吗?
【发布时间】:2017-05-27 19:27:40
【问题描述】:

谷歌文档只讨论每日分区。但是模型中是否有任何东西阻碍了将分区填充到具有其他时间段(例如,小时或周)的表中?

在“小”表中使用分区是否有任何限制或缺点?

【问题讨论】:

  • 您的费率很低。对 SO 很重要,您必须使用已发布答案左侧、投票下方的勾号来标记已接受的答案。这将提高您的费率。通过访问此链接了解其工作原理:meta.stackoverflow.com/questions/5234/…

标签: google-bigquery


【解决方案1】:

是的。
Big Query 现在通过使用 TIMESTAMP_TRUNC 支持基于任何 TIMESTAMP 字段(而不仅仅是摄取时间)的每小时分区:

 CREATE TABLE
   mydataset.newtable (transaction_id INT64,
     transaction_ts TIMESTAMP)
 PARTITION BY
   TIMESTAMP_TRUNC(transaction_ts, HOUR)
 OPTIONS
   ( partition_expiration_days=3,
     description="a table partitioned by transaction_ts" )

【讨论】:

    【解决方案2】:

    是的,现在 Big Query 支持按摄取时间进行每小时分区。

    这里是documentation

    【讨论】:

      【解决方案3】:

      目前仅支持 DAY 分区表。不支持每小时或每月。有几个新功能的功能请求,但没有实施时间表。您也可以在票证上发表评论并添加您的用例以进行宣传。

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

      相关功能请求:

      更新 * 2018 年 8 月

      Introduction to Clustered Tables - 您现在可以按天进行分区,然后按任何其他列(例如小时/分钟)进一步对表进行聚类。

      聚类可以提高某些类型查询的性能 例如使用过滤子句的查询和聚合的查询 数据。当数据通过查询作业或 加载作业,BigQuery 使用集群中的值对数据进行排序 列。这些值用于将数据组织成多个 BigQuery 存储中的块。当您提交包含 根据聚类列过滤数据的子句 BigQuery 使用已排序的块来消除对不必要数据的扫描。

      【讨论】:

      • 在某些情况下,集群并不是真正的解决方案。示例:您基于不包含任何小时列甚至时间戳的 CSV 文件创建表。此外,如果此表创建使用“加载”API,则甚至不可能在事后添加时间戳列。因此,即使使用集群,这也无助于在时间上“进一步分区”,而只是按其他一些不相关类型的列“分组”......
      猜你喜欢
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      • 2017-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多