如何使列符合 Google Big Query 中的行

arc*_*123 1 google-bigquery

我正在执行数据 QA 测试。

我有这个查询来建立源表和目标表之间的任何错误。

select 
count(case when coalesce(x.col1,1) = coalesce(y.col1,1) then null else 1 end) as cnt_col1,
count(case when coalesce(x.col2,"1") = coalesce(y.col2,"1") then null else 1 end) as cnt_col2
from
`DatasetA.Table` x
OUTER JOIN
`DatasetB.Table` y
on x.col1 = y.col1
Run Code Online (Sandbox Code Playgroud)

这个查询的输出是这样的:

col1, col2
null, null
null, null
1, null
null, 1
Run Code Online (Sandbox Code Playgroud)

我需要在 200 个表上执行此测试,并且数量cols是动态的。上表只有两列,有些有 50 列。

我已经有了对表的查询,但我需要将所有测试的输出整合到一个输出中。我的计划是将每个查询整合到一个统一的输出中,并使用UNION ALL.

输出集应该说:

COLUMN, COUNT_OF_ERRORS
cnt_col1, 1
cnt_col2, 1
...
cnt_col15, 0
Run Code Online (Sandbox Code Playgroud)

我的问题是这个。我如何反转它,以便我可以实现我正在寻找的输出。

谢谢

Mik*_*ant 8

我如何反转它,以便我可以实现我正在寻找的输出。

假设你有表`data`

col1    col2    col3
----    ----    ----     
null    null    null     
null    null    1    
null    1       1    
1       null    1    
1       null    1    
1       null    1   
Run Code Online (Sandbox Code Playgroud)

你需要反向旋转它

column      count_of_errors  
--------    ---------------
cnt_col1    3    
cnt_col2    1    
cnt_col3    5    
Run Code Online (Sandbox Code Playgroud)

下面是 BigQuery 标准 SQL 并且正是这样做的

col1    col2    col3
----    ----    ----     
null    null    null     
null    null    1    
null    1       1    
1       null    1    
1       null    1    
1       null    1   
Run Code Online (Sandbox Code Playgroud)

它足够简单和友好,可以调整到您可能在初始“数据”表中拥有的任意数量的列 - 您只需要添加相应的数量('cnt_colN', SUM(colN)),- 这可以手动完成,或者您可以编写简单的脚本来生成这些行(或整个查询)

  • 我很高兴它有帮助!喜欢 BigQuery,也喜欢 SO,因为它提供了传递/分享知识和帮助人们的机会 :o) (2认同)