这是用唯一值填充维度 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_at
有 UNIQUE
约束,则您不需要 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);
以下脚本是否适合填充 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_at
有 UNIQUE
约束,则您不需要 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);