我有一个包含 500 亿行(约 10 TB)和约 40 列的 Snowflake 表。该表有一个始终填充的时间戳列。我需要创建一个新的日期列并为其回填所有值。
这个查询有效,但是确实效率低下(扫描1%需要1小时,2XL仓库)。有没有更有效的方法来做到这一点?
UPDATE DAILY_TABLE b
SET b.ts_date = to_date(a.ts_tstamp)
FROM
(SELECT a.ts_date, a.ts_tstamp
FROM DAILY_TABLE a) a;
当前表格:
ts_tstamp | ts_date |
---|---|
2021-04-28 05:01:32.883 | null |
2021-01-28 05:01:32.883 | null |
2020-01-25 05:01:32.883 | null |
所需表:
ts_tstamp | ts_date |
---|---|
2021-04-28 05:01:32.883 | 2021-04-28 |
2021-01-28 05:01:32.883 | 2021-01-28 |
2020-01-25 05:01:32.883 | 2020-01-25 |
答案 0 :(得分:0)
如果该列不需要具体化并且始终依赖于 ts_tstamp,那么另一个选项可能是虚拟列:
ALTER TABLE DAILY_TABLE
ADD COLUMN ts_date_virtual DATE AS TO_DATE(ts_tstamp);