我遇到了这个问题:我在BigQuery有列"day, person_id, daily_margin, running_margin_30d和total_accumulated_margin"表。我的问题是现在表已经变得太大,每天运行(我删除和重新创建它),但现在它消耗了太多的内存。我一直在尝试使用MERGE语句使其增量更新,但我不知道如何计算累积列(历史和过去30天)。
例如,如果我有一天运行它,我得到(最后两列是空的,因为我只得到每天的数据):
day | person_id | daily_margin | running_margin_30d | total_accumul_margin | 1月2日 | 17 | 5 | 空 | 空 |
---|
创建一个临时表,用于保存需要合并到主表中的日常数据。
CREATE OR REPLACE TABLE `temp_table_name`
OPTIONS(
expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 1 DAY)
) AS
SELECT columns
FROM `main_table`
使用MERGE语句用临时表中的数据更新主表。
MERGE INTO `main_table` t
USING `temp_table` s
ON t.key = s.key
WHEN MATCHED THEN
UPDATE SET t.column = s.column
WHEN NOT MATCHED THEN
INSERT (column_names)
VALUES (values);