在聚类时使用基于摄取时间的伪字段 (_PARTITIONTIME) 作为分区

Posted

技术标签:

【中文标题】在聚类时使用基于摄取时间的伪字段 (_PARTITIONTIME) 作为分区【英文标题】:Using ingestion-time based pseudo-field (_PARTITIONTIME) as partition while clustering 【发布时间】:2019-11-15 13:23:56 【问题描述】:

我想对我们的摄取时间分区表进行集群,而不必更改我们用来更新它们的 ETL 脚本。我们所有的表都在伪字段 _PARTITIONTIME 上分区,现在当我尝试使用 DML 对表进行集群时,我收到以下错误:

字段名称“_PARTITIONTIME”无效。字段名称不允许以(不区分大小写)前缀 _PARTITION、TABLEFILE 和 _ROW_TIMESTAMP

开头

DML 脚本如下所示:

CREATE TABLE `table_target`
PARTITION BY DATE(_PARTITIONTIME)
CLUSTER BY a, b, c
AS
SELECT
  *, _PARTITIONTIME
FROM
  `table_source`

我应该怎么做?有没有办法保持与分区字段相同的伪字段,我应该重新处理分区字段,还是我在这里遗漏了什么?

【问题讨论】:

【参考方案1】:

那是Known limitation:

无法根据查询结果创建摄取时间分区表。而是使用 CREATE TABLE DDL 语句创建表,然后使用 INSERT DML 语句将数据插入其中。

在您的情况下,您需要先使用CREATE TABLECLUSTER BY 创建target_table,然后再迁移数据。

【讨论】:

以上是关于在聚类时使用基于摄取时间的伪字段 (_PARTITIONTIME) 作为分区的主要内容,如果未能解决你的问题,请参考以下文章

对不同长度的时间序列数据进行聚类

为啥在聚类之前跨行而不是列来标准化(预处理)数据

如何在聚类分析中处理空值?

如何在 Mahout K-means 聚类中维护数据条目 ID

机器学习-聚类Clustering

jieba 分词简单应用