在日桌上的威尔卡与时间分区

jer*_*eca 4 google-bigquery

我试着理解大查询(例如成本或请求的可能性)之间是否存在差异:

  • 每天创建一个表(如my_table_2018_02_06)
  • 创建一个时间分区表(my-table,按日划分时间分区).

谢谢 !

dse*_*sto 8

简短说明:使用通配符表查询多个表是BigQuery没有可用分区机制的建议替代方法.自然进化是包括分区表的特征,目前有一个alpha版本包括在基于列的时间划分,即让用户限定哪些列(具有DATETIMESTAMP数据类型)将用于所述分区.

因此,目前BigQuery工程师正致力于为表分区添加更多新功能,而不是传统的Wildcard Tables方法,那么我建议您使用它们.


很长的解释:您正在比较两种实际上用于相同目的但具有不同含义的方法:

  • 通配符表:前段时间,当表分区不是Big Query支持的功能时,通配符表是使用简明SQL查询查询多个表的方法.通配符表表示与SQL语句中指定的通配符表达式匹配的所有表的并集.但是,通配符表有一些限制,例如:
    • 不支持观点.
    • 不支持缓存结果(包含通配符表的查询在每次运行时都会计费,即使选中了"缓存结果"选项).
    • 仅适用于本机BigQuery存储(不能与外部表[Bigtable,存储或驱动器]一起使用).
    • 仅在标准SQL中可用.
  • 分区表:这些是唯一的表,按日期划分为多个段.有很多关于如何使用分区表的文档,关于定价,分区表中的每个分区都被视为一个独立的实体,因此如果分区在过去90天内未更新,则此数据将被视为长-term因此将以适当的折扣计费(正常表格会发生).最后,分区表仍然存在,因此有更多的传入功能,例如基于列的分区,当前处于alpha状态,您可以在此公共问题跟踪器帖子中跟踪其状态.另一方面,还有一些当前的限制需要考虑:
    • 每个分区表最多2500个分区.
    • 每个表每天最多20​​00个分区更新.
    • 每10秒最多50次分区更新.

因此,通常,建议使用通配符表在多个表上使用分区表.但是,您应该始终考虑您的用例,并更好地了解哪种可能性符合您的要求.