我是重复字段的新手并且很难与它们一起使用,特别是因为它们使用点(。)保存在数据库中,这不允许我将表连接到自身。列Online.TypeA,Online.TypeB& Online.TypeC是重复的字段。
这是我应该得到的:
这就是我得到的:
这是我写的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公式时我做错了什么
答案 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
这里假设所有三个重复的字段具有相同数量的项目,并且它们基于数组中的位置彼此匹配