这是用唯一值填充维度 table 的合适方法吗?

Is this an appropriate way of populating dimension table with unique values?

以下脚本是否适合填充 date_dim table?我正在使用 sqlalchemy 在 MySQL 中使用 PANDAS DataFrame 填充临时 table。下面的 SQL 脚本的目的是用 dates_dim_temp 的值填充 dates_dim(如果它们尚不存在)。我还打算为 date_dim 中的新条目创建新的主键,但想在继续之前检查我是否在正确的轨道上使用此脚本:

INSERT INTO date_dim  (id, created_at, week_day, month_day, month_num, `year`) 
SELECT DISTINCT *
FROM date_dim_temp 
WHERE NOT EXISTS (SELECT * FROM date_dim_temp ddt JOIN date_dim dd ON  dd.created_at = ddt.created_at);

如果只需要检查列created_at:

的列是否存在,则不需要在NOT EXISTS的子查询中加入
INSERT INTO date_dim (id, created_at, week_day, month_day, month_num, `year`) 
SELECT DISTINCT ddt.*
FROM date_dim_temp ddt
WHERE NOT EXISTS (SELECT * FROM date_dim dd WHERE dd.created_at = ddt.created_at);

此外,如果 date_dim 中的 created_atUNIQUE 约束,则您不需要 NOT EXISTS。使用 INSERT IGNORE:

INSERT IGNORE INTO date_dim (id, created_at, week_day, month_day, month_num, `year`) 
SELECT DISTINCT ddt.*
FROM date_dim_temp ddt

这也将拒绝违反任何现有约束的任何其他行。

您不需要加入 NOT EXISTS。 distinct 也是必要的吗?

INSERT INTO date_dim  (id, created_at, week_day, month_day, month_num, `year`) 
SELECT DISTINCT t.*
FROM date_dim_temp t
WHERE NOT EXISTS (SELECT 1 FROM date_dim d WHERE  d.created_at = t.created_at);