计划查询和群集



似乎无法在 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 (= 报告日期( 上进行时间分区,并在站点 Id、通道 ID 上聚集

> 截至 2018 年 10 月 23 日,BigQuery 计划查询功能似乎不支持将WRITE_TRUNCATE加载模式与聚类相结合

但是,起作用的是使用 DML 语句写入聚集目标表。

现在的 SS(27 年 2023 月 27 日(,它似乎确实如人们所期望的那样工作:

首先,使用聚类创建表,然后只需插入到同一表中即可。

INSERT INTO `table.name.here`
WITH base_data AS ( .....

最新更新