BigQuery:是否可以迭代数组?

jle*_*dru 5 sql google-bigquery google-cloud-platform

是否可以在标准 sql 中的 bigquery 中迭代数组?

基本上声明一个表示表字段的字符串数组。前任 :

DECLARE FIELDS_TO_CHECK ARRAY<STRING>;
SET FIELDS_TO_CHECK =  ['field1', 'field2', 'field3' ];
Run Code Online (Sandbox Code Playgroud)

然后在此数组上迭代以创建获取此字段上非空值百分比的请求:

select count(FIELD) / count(*) from 
'table_name'`
Run Code Online (Sandbox Code Playgroud)

Mik*_*ant 10

下面是 BigQuery 标准 SQL 的示例,
我在此处使用 TEMP TABLE `table_name` 以使用一些简单的虚拟数据来模拟您的数据,但是您可以删除该 CREATE 语句并使用您自己的表

#standardSQL
DECLARE FIELDS_TO_CHECK ARRAY<STRING>;
DECLARE i INT64 DEFAULT 0;

CREATE TEMP TABLE `table_name` AS 
  SELECT 1 field1, NULL field2, 3 field3, 4 field4, 5 field5 UNION ALL
  SELECT NULL, NULL, 3, NULL, 5 UNION ALL
  SELECT 1, NULL, 3, 4, 6;

CREATE TEMP TABLE result(field STRING, percentage FLOAT64);  
  
SET FIELDS_TO_CHECK =  ['field1', 'field2', 'field3' ];

LOOP
  SET i = i + 1;
  IF i > ARRAY_LENGTH(FIELDS_TO_CHECK) THEN 
    LEAVE; 
  END IF;
  EXECUTE IMMEDIATE '''
    INSERT result
    SELECT "''' || FIELDS_TO_CHECK[ORDINAL(i)] || '''", COUNT(''' || FIELDS_TO_CHECK[ORDINAL(i)] || ''') / COUNT(*) FROM `table_name`
  ''';

END LOOP; 

SELECT * FROM result;   
Run Code Online (Sandbox Code Playgroud)

上面的例子返回下面的输出

Row field   percentage   
1   field2  0.0  
2   field1  0.66666666666666663  
3   field3  1.0  
Run Code Online (Sandbox Code Playgroud)