首页 > 解决方案 > 计划查询和集群

问题描述

似乎无法在 BigQuery 中安排写入时间分区和集群目标表的查询(使用 WRITE_TRUNCATE 和分区装饰器):我们收到错误消息:

Invalid value: Incompatible table partitioning specification. Expects partitioning specification interval(type:day) clustering(siteId,channelId), but input partitioning specification is interval(type:day)

我不明白为什么会这样,集群规范不只是表定义的一部分吗?当执行 dml 在已经聚集的表中插入数据时,我们也不需要指定任何额外的内容。或者这与我们在预定查询中没有使用 DML有关吗?

编辑:预定的查询结构如下所示:

SELECT
  reportDate,
  channelId,
  siteId,
  pageType,
  [MORE_COLUMNS_SELECT),
  SUM(timeOnPage) AS timeOnPage_agg,
  ARRAY_AGG(STRUCT( sessionId,
      [MORE_COLUMNS_NESTED)
 ) AS Details
  ----
FROM `project.dataset.viewname` 
WHERE    reportDate >= TIMESTAMP_TRUNC(TIMESTAMP_ADD(@run_time, INTERVAL -1 DAY), DAY)
     AND reportDate < TIMESTAMP_TRUNC(@run_time, DAY)
GROUP BY
    reportDate,
  channelId,
  siteId,
  pageType,
  [MORE_COLUMNS_SELECT)

我正在将此查询的结果写入目标表,如下所示: TARGET_TABLE_NAME${run_time-24h|"%Y%m%d"}

该表在 _PARTITIONTIME (= Reportdate) 上进行时间分区,并在 siteId、channelId 上聚集

标签: google-bigquerydml

解决方案


截至 2018 年 10 月 23 日,BigQuery 计划查询功能似乎支持 WRITE_TRUNCATE 加载模式与 clustering 结合使用

然而,真正起作用的是使用 DML 语句写入聚集的目标表。


推荐阅读