展平在列名称中包含点(。)的重复字段

时间:2018-04-04 14:56:57

标签: google-bigquery

我是重复字段的新手并且很难与它们一起使用,特别是因为它们使用点(。)保存在数据库中,这不允许我将表连接到自身。列Online.TypeA,Online.TypeB& Online.TypeC是重复的字段。

这是我应该得到的:

enter image description here

这就是我得到的:

enter image description here

这是我写的SQL公式,以获得结果:

SELECT Id, Online.TypeA, Online.TypeB, Online.TypeC 
FROM FLATTEN(FLATTEN(FLATTEN([database.kind_table1],Online.TypeA),Online.TypeB),Online.TypeC)
GROUP BY Id, Online.TypeA, Online.TypeB, Online.TypeC  
ORDER BY Id, Online.TypeA, Online.TypeB, Online.TypeC 

我做错了什么?

我尝试将一个列展平,然后通过将同一个表重命名为A和B来展平下一列,然后将表连接到自身,但是当将列名写为“a.Online.TypeA”时,我收到错误。当在列名中包含一个点时,这种情况从未发生过,但由于数据库中的列的命名和保存方式,我不得不使用两个点。

由于加入自己的表似乎是不可能的,可能不是最有效的解决方案,我想知道在编写SQL公式时我做错了什么

1 个答案:

答案 0 :(得分:2)

问题有点模糊,所以下面是基于我如何解释它并适用于BigQuery Standard SQL

   
#standardSQL
SELECT 
  id, 
  STRUCT<TypeA STRING, TypeB STRING, TypeC STRING>(TypeA, TypeB, TypeC) Online
FROM `project.dataset.table`,
UNNEST(Online.TypeA) TypeA WITH OFFSET posA, 
UNNEST(Online.TypeB) TypeB WITH OFFSET posB,
UNNEST(Online.TypeC) TypeC WITH OFFSET posC
WHERE posA = posB AND posA = posC

这应该给你一个想法

您可以使用以下虚拟数据进行测试/播放,这些数据有望与您的表格相匹配

project.dataset.table

中的数据
Row id  Online.TypeA    Online.TypeB    Online.TypeC     
1   365 Single          Url             Link1        
        Single          Pdf             Link2    
        Single          Pdf             Link3    
        Single          Pdf             Link4     

查询

#standardSQL
WITH `project.dataset.table` AS (
SELECT 365 id, 
  STRUCT<TypeA ARRAY<STRING>, TypeB ARRAY<STRING>, TypeC ARRAY<STRING>>(
     ['Single','Single','Single','Single'], ['Url','Pdf','Pdf','Pdf'], ['Link1','Link2','Link3','Link4']
  ) Online
)
SELECT 
  id, 
  STRUCT<TypeA STRING, TypeB STRING, TypeC STRING>(TypeA, TypeB, TypeC) Online
FROM `project.dataset.table`,
UNNEST(Online.TypeA) TypeA WITH OFFSET posA, 
UNNEST(Online.TypeB) TypeB WITH OFFSET posB,
UNNEST(Online.TypeC) TypeC WITH OFFSET posC
WHERE posA = posB AND posA = posC 

结果如下

Row id  Online.TypeA    Online.TypeB    Online.TypeC     
1   365 Single          Url             Link1    
2   365 Single          Pdf             Link2    
3   365 Single          Pdf             Link3    
4   365 Single          Pdf             Link4    

这里假设所有三个重复的字段具有相同数量的项目,并且它们基于数组中的位置彼此匹配