![](/img/trans.png)
[英]create date sharded table in Big Query UI with suffix of the form _YYYYMMDD using a loop
[英]Create table with date shards of the form _YYYYMMDD
假设我创建了这个表,例如:
-- create a temporary table to use in this minimum example
CREATE OR REPLACE TABLE `project_id.dataset_id.example_table` AS
(SELECT 'Adams' as LastName, 51 as OpponentID, 3 as PointsScored UNION ALL
SELECT 'Buchanan', 77, 0 UNION ALL
SELECT 'Coolidge', 77, 1 UNION ALL
SELECT 'Adams', 52, 4 UNION ALL
SELECT 'Buchanan', 50, 13)
我想循环它,以便在带有WHERE
子句的 for 循环中保存一个由日期共享的表。 例如,将OpponentID
等于70
按日期分片的所有行保存为
tablename_20200801
tablename_20200901
tablename_20201001
我该怎么做? 我在下面有一个示例,但这不起作用,您能解释一下缺少什么吗?
DECLARE end_of_month date;
DECLARE final_snapshot_date DEFAULT DATE '2020-10-01';
DECLARE initial_snapshot_date date DEFAULT DATE '2020-08-01';
DECLARE formatted_date STRING;
-- FOR LOOP, is working
FOR date_suffix in (
select * from UNNEST(GENERATE_DATE_ARRAY(initial_snapshot_date, final_snapshot_date, INTERVAL 1 MONTH)) date
)
DO
SET formatted_date = FORMAT_DATE("%Y%m%d", date_suffix.date);
SET end_of_month = LAST_DAY(date_suffix.date);
IF
date_suffix.date > final_snapshot_date THEN
LEAVE; -- kill
END IF;
-- create some variables, through a table called tablename. this is the table we want to shard with formatted_date and save
EXECUTE IMMEDIATE
FORMAT("CREATE OR REPLACE TABLE project_id.dataset_id.tablename_%s", formatted_date);
FROM `project_id.dataset_id. example_table `
WHERE OpponentID = 77
END FOR;
如果我理解正确,您想创建表并用OpponentID = 77
的行填充它们。 如果没有,请告诉我,以便我删除我的答案。
有关实施,请参阅下面的查询:
DECLARE end_of_month date;
DECLARE final_snapshot_date DEFAULT DATE '2020-10-01';
DECLARE initial_snapshot_date date DEFAULT DATE '2020-08-01';
DECLARE formatted_date STRING;
FOR date_suffix IN (select * from unnest(GENERATE_DATE_ARRAY(initial_snapshot_date, final_snapshot_date, INTERVAL 1 MONTH)) date)
DO
SET formatted_date = FORMAT_DATE("%Y%m%d", date_suffix.date);
SET end_of_month = LAST_DAY(date_suffix.date);
IF
date_suffix.date > final_snapshot_date THEN
LEAVE; -- kill
END IF;
EXECUTE IMMEDIATE FORMAT (
"""
CREATE OR REPLACE TABLE `project_id.dataset_id.tablename_%s` AS (
SELECT * FROM `project_id.dataset_id.example_table` where OpponentID = 77
)
""",formatted_date);
END FOR;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.