繁体   English   中英

在 Google Bigquery 中访问 ARRAY STRUCT 中的值

[英]accessing values in an ARRAY STRUCT in Google Bigquery

我不熟悉在 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<STRUCT>)=contacts.vids(数据类型 INT64)。 我厌倦了以下内容,但由于数据类型不同,我收到了一个错误。

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_ID(幸运的是不在数组中)。

以下是 BigQuery 标准 SQL

根据您问题中的有限信息 - 我猜您在问题中提出的第二个查询中缺少 STRING_AGG

它应该是

SELECT
  CAST(property_hs_object_id.value AS String) AS deal_ID,
  (SELECT STRING_AGG(associations.associatedvids) FROM UNNEST(associations.associatedvids)) AS associated_contacts_ID
FROM hubspot_data.deals   

更新:回答更新的问题

#standardSQL
SELECT 
  deal_ID,
  ARRAY(
    SELECT AS STRUCT 
      company_ID, 
      ( SELECT STRING_AGG(CAST(id AS STRING), ', ') 
        FROM t.contact_ID id
      ) AS contact_ID 
    FROM d.associations t
  ) AS contacts
FROM deals d

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM