bigquery:可以迭代数组吗?

gdx19jrr  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(365)

是否可以在标准sql中对bigquery中的数组进行迭代?
基本上是声明一个表示表字段的字符串数组。前任:

DECLARE FIELDS_TO_CHECK ARRAY<STRING>;
SET FIELDS_TO_CHECK =  ['field1', 'field2', 'field3' ];

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

select count(FIELD) / count(*) from 
'table_name'`
weylhg0b

weylhg0b1#

下面是bigquery标准sql的示例
我在这里使用temp tabletable\u 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;

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

Row field   percentage   
1   field2  0.0  
2   field1  0.66666666666666663  
3   field3  1.0

相关问题