我正在执行数据 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)
我的问题是这个。我如何反转它,以便我可以实现我正在寻找的输出。
谢谢
我如何反转它,以便我可以实现我正在寻找的输出。
假设你有表`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)),- 这可以手动完成,或者您可以编写简单的脚本来生成这些行(或整个查询)  
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           5433 次  |  
        
|   最近记录:  |