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 中 RECORDSTRUCT

相同

您可以使用 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>>