Skip to main content

创建ODS层--动态分区表

note

在把 IMDB 官网的数据集抽取到缓存表后,接下来要将数据写入到 ods 层。ods 层开始采用分区表,计划保留近 1 个月的数据。建表过程使用到 doris 的动态分区功能。

创建 ODS 层动态分区表

CREATE TABLE
IF NOT EXISTS movie.ods_imdb_title_ratings (
`tconst` VARCHAR(200) NOT NULL COMMENT 'The alphanumeric identifier of the title.',
`averageRating` FLOAT COMMENT 'The average rating of the title.',
`numVotes` INT COMMENT 'The number of votes the title has received.',
`dt` DATE COMMENT 'data update date'
) ENGINE = OLAP
DUPLICATE KEY(`tconst`)
COMMENT '电影评分表'
PARTITION BY RANGE (`dt`) ()
DISTRIBUTED BY HASH (`tconst`) BUCKETS 3
PROPERTIES (
"replication_num" = "1",
"dynamic_partition.time_unit" = "DAY", # 分区时间单位
"dynamic_partition.start" = "-30", # 保留之前30天的分区
"dynamic_partition.end" = "1", # 创建未来1天的分区
"dynamic_partition.prefix" = "p", # 分区前缀
"dynamic_partition.buckets" = "3"
);
tip

动态分区的执行频率默认为 10 分钟。为了确保次日凌晨写入数据时,分区已经创建出来,可以配置 "dynamic_partition.end" = "1",表示提前创建未来一天的分区。

info

若分区时间单位选择 WEEKMONTH,则额外需要配置 dynamic_partition.start_day_of_weekdynamic_partition.start_day_of_month,分别表示每周的第几天和每月的第几天。

  • dynamic_partition.start_day_of_week 取值范围为 1-7,其中 1 表示周一,7 表示周日。
  • dynamic_partition.start_day_of_month 取值范围为 1-28,其中 1 表示每月 1 号,28 表示每月 28 号。

插入数据

INSERT INTO
movie.ods_imdb_title_ratings
SELECT
*,
CURRENT_DATE() AS `dt`
FROM
movie.stg_imdb_title_ratings;

查看分区

SHOW PARTITIONS FROM movie.ods_imdb_title_ratings;

可以看到,分区 p20230726 中的 DataSize 已经不再为 0,说明数据已写入到该分区中。且可以观察到未来一天的分区 p20230727 也已经创建出来,但 DataSize 为 0,还没有数据。

添加到定时调度

在 DolphinScheduler 中 IMDB数据导入 工作流中,添加一个 stg to ods sql 任务,执行上述插入数据的 sql 语句。