【发布时间】:2020-12-09 01:47:43
【问题描述】:
我是在 Google BigQuery 中查询的新手,我正在尝试在我的查询中展平一个 ARRAY 字段,以便将数组值作为逗号分隔列表中的单个结果列出。在我的查询中,“associations.associatedvids”是交易表中的一个数组字段。我的问题实际上是一个两步问题,因为我还需要将关联的视频与另一个名为联系人的表中的相应名字和姓氏字段进行匹配。 首先,对于联系人 ID,当我执行以下操作时
Select
CAST(property_hs_object_id.value AS String) AS deal_ID,
associations.associatedvids AS associated_contacts_ID
From hubspot_data.deals
我得到这样的结果:
Row deal_ID associated_contacts_ID.value
1 1814103617 3240001
3239951
...
但我想要的是:
Row deal_ID associated_contacts_ID.value
1 1814103617 3240001,3239951
...
我尝试了不同的方法来解除数组的嵌套,但似乎无法做到正确。例如,以下尝试返回错误“标量子查询产生了多个元素”。
Select
CAST(property_hs_object_id.value AS String) AS deal_ID,
(select associations.associatedvids from unnest(associations.associatedvids)) AS associated_contacts_ID
From hubspot_data.deals
其次,我最终想要的是:
Row deal_ID associated_contact_names
1 1814103617 John Doe,Jane Doe
...
名称字段为property_firstname.value 和property_lastname.value,以及associations.associatedvids(数据类型ARRAY
Select
CAST(property_hs_object_id.value AS String) AS deal_ID,
(select concat(property_firstname.value, " ", property_lastname.value)
from hubspot_data.contacts
where contacts.vid=associations.associatedvids) AS contact_name
From hubspot_data.deals
任何指导将不胜感激!
编辑:这是我对最小工作示例代码的尝试。我相信我要查询的字段是 STURCT 的数组,我想要的 Struct 元素的数据类型是 INT64。
WITH deals AS (
Select "012345" as deal_ID,
[STRUCT(["abc"] as company_ID, [123,678,810] as contact_ID)]
AS associations)
SELECT
deal_ID,
contacts
FROM deals d
CROSS JOIN UNNEST(d.associations) as contacts
这个给我:
Row deal_ID contacts.company_ID contacts.contact_ID
1 012345 abc 123
678
810
但我想要的是
Row deal_ID contacts.contact_ID
1 012345 123, 678, 810
最终,我需要用不同表中的联系人名字和姓氏替换contact_IDs(但幸运的是不在数组中)。
【问题讨论】:
-
简单易行。但为了真正将答案作为答案 - 您需要提供有关您的数据的更多信息 - 请参阅How to create a Minimal, Reproducible Example
-
嗨,米哈伊尔,下面我尝试创建一个最小的可重现示例,但我不确定它是否完全解决了我的问题,因为我不完全了解我所在字段的数据结构查询时遇到问题。我相信我试图进入的领域是数据类型为 INT64 的 STRUCT 数组(这可能是 String_AGG 不起作用的原因?)但我不完全确定这意味着什么。编辑:看起来我需要编辑我的原始帖子以获取示例...请参见上文
-
显示表格架构的最简单方法是在 BQ 控制台中实际定位您的表格 > 单击 Schema 并复制它 - 要捕获的重要部分:字段名称、类型、模式