* аргументы в хранимой процедуре BigQuery

Есть ли концепция *args в параметрах BigQuery (аналогично pytho *args)

Я пишу общую хранимую процедуру, которая проверяет, есть ли в таблице повторяющиеся строки. Очевидно, что количество столбцов будет изменяться и указываться во время выполнения.

Итак, я хочу использовать *args чтобы получить аргументы, распакуйте их и используйте в динамическом SQL.

CREATE OR REPLACE PROCEDURE `my_project.LOGGING.check_dup_prc`(project_name STRING, data_set_name STRING, table_name STRING, date_id DATE, *args)
BEGIN
  DECLARE sql STRING;
  set sql ='Select date,*args,count(1) from `'||project_name||'.'||data_set_name||'.'||table_name|| '` where date=\''||date_id || '\' GROUP BY date,*args HAVING COUNT(*)>1';
  EXECUTE IMMEDIATE (sql);
END;

Заранее благодарим за ответ.

1 ответ

Решение

Похоже, вы хотите иметь возможность передать в proc список столбцов, которые будут использоваться в SELECT, а также в GROUP BY. В этом случае вместо передачи списка отдельных столбцов вы можете просто передать один параметр, который будет содержать список этих столбцов в виде одной строки, как в примере ниже.

Итак, это будет так, как показано ниже (остальной синтаксис оставлен как в вопросе)

CREATE OR REPLACE PROCEDURE my_project.LOGGING.check_dup_prc(project_name STRING, data_set_name STRING, table_name STRING, date_id DATE, cols STRING) 
BEGIN DECLARE sql STRING; 
set sql ='Select date,'||cols||','||'count(1) from '||project_name||'.'||data_set_name||'.'||table_name|| ' where date=\''||date_id || '\' GROUP BY date,'||cols||'HAVING COUNT(*)>1'; 
EXECUTE IMMEDIATE (sql); END;

и звонок будет выглядеть ниже

CALL my_project.LOGGING.check_dup_prc(my_project, my_project,my_table,CURRENT_DATE(),'col1,col2,col3,col4');
Другие вопросы по тегам