BigQuery 存储过程中的记录类型
Record Type in BigQuery Stored procedure
我想知道 BigQuery 中是否存在 RECORD 数据类型?我正在尝试遍历 table 中存在的许多记录。想法是将记录提取到 RECORD/cursor 中,然后一条一条地处理它们。
在这里,我需要从 ga_sessions_* table 中删除 GDPR 记录。我们将要删除的用户存储在 table gdpr_remove_records
所以我喜欢调用一个存储过程,它会为这个 table 中的每条记录调用。这是我的 sudo 代码
DECLARE project_name STRING DEFAULT 'my_project';
DECLARE data_set_name STRING DEFAULT 'my_data_set';
DECLARE table_name STRING DEFAULT 'ga_sessions_';
DECLARE v_sql STRING;
DECLARE v_error STRING;
DECLARE v_hashedEmail,v_date STRING;
--This one I like to declare as record
set (v_hashedEmail, v_date) = ARRAY(select AS STRUCT hashedEmail,format_date('%Y%m%d',date) from `eurostar-analytics.LOGGING.gdpr_remove_records`));
WHILE RECORD%ROWEXIST DO
call `my_project.my_data_set.gdpr_delete_user_data_prc`(project_name,data_set_name,table_name,v_date,v_hashedEmail,v_sql,v_error);
END WHILE
注意:此处存储过程 gdpr_delete_user_data_prc 删除给定行 fo hashedEmail 和 ga_session_(v_date)
我不确定的是如何定义记录类型并在其中存储源 table 输出并在 WHILE 循环中使用该记录类型。
在此先感谢您的指导。
在 BigQuery 中 RECORD
与 STRUCT
相同
您可以使用 DEFAULT
来避免像这样指定整个类型:
DECLARE my_var DEFAULT ARRAY(select AS STRUCT hashedEmail,format_date('%Y%m%d',date) from `eurostar-analytics.LOGGING.gdpr_remove_records`));
DECLARE index DEFAULT 0;
WHILE index < ARRAY_LENGTH(my_var) DO
BEGIN
DECLARE element DEFAULT my_var[OFFSET(index)];
SET index = index + 1;
...
END;
END WHILE;
而从查询中的what来看,类型大概是:
ARRAY<STRUCT<hashedEmail STRING, date STRING>>
我想知道 BigQuery 中是否存在 RECORD 数据类型?我正在尝试遍历 table 中存在的许多记录。想法是将记录提取到 RECORD/cursor 中,然后一条一条地处理它们。
在这里,我需要从 ga_sessions_* table 中删除 GDPR 记录。我们将要删除的用户存储在 table gdpr_remove_records
所以我喜欢调用一个存储过程,它会为这个 table 中的每条记录调用。这是我的 sudo 代码
DECLARE project_name STRING DEFAULT 'my_project';
DECLARE data_set_name STRING DEFAULT 'my_data_set';
DECLARE table_name STRING DEFAULT 'ga_sessions_';
DECLARE v_sql STRING;
DECLARE v_error STRING;
DECLARE v_hashedEmail,v_date STRING;
--This one I like to declare as record
set (v_hashedEmail, v_date) = ARRAY(select AS STRUCT hashedEmail,format_date('%Y%m%d',date) from `eurostar-analytics.LOGGING.gdpr_remove_records`));
WHILE RECORD%ROWEXIST DO
call `my_project.my_data_set.gdpr_delete_user_data_prc`(project_name,data_set_name,table_name,v_date,v_hashedEmail,v_sql,v_error);
END WHILE
注意:此处存储过程 gdpr_delete_user_data_prc 删除给定行 fo hashedEmail 和 ga_session_(v_date)
我不确定的是如何定义记录类型并在其中存储源 table 输出并在 WHILE 循环中使用该记录类型。
在此先感谢您的指导。
在 BigQuery 中 RECORD
与 STRUCT
您可以使用 DEFAULT
来避免像这样指定整个类型:
DECLARE my_var DEFAULT ARRAY(select AS STRUCT hashedEmail,format_date('%Y%m%d',date) from `eurostar-analytics.LOGGING.gdpr_remove_records`));
DECLARE index DEFAULT 0;
WHILE index < ARRAY_LENGTH(my_var) DO
BEGIN
DECLARE element DEFAULT my_var[OFFSET(index)];
SET index = index + 1;
...
END;
END WHILE;
而从查询中的what来看,类型大概是:
ARRAY<STRUCT<hashedEmail STRING, date STRING>>