如何在连接的雪花数据上展平数组

问题描述 投票:0回答:2

我目前有这个查询,它通过它的

updated_at
列过滤最新记录,并查找具有特定类型的行。我正在尝试展平数组,以便我可以提取特定对象数据,但我认为我没有正确使用
lateral flatten()

该行的数据如下所示:

[{ "token": "1234", type: "STORE" }, { "token": "4567", type: "MERCHANT" }]

雪花查询:

with unique_merchants as (
  select 
    updated_at, 
    aliases, 
    merchant_token, 
    identity_token, 
    row_number() over (
      partition by merchant_token 
      order by 
        updated_at desc
    ) as row_number 
  from 
    table.PUBLIC.business_info
) 
select 
  identity_token, 
  merchant_token,
  aliases
from
  unique_merchants 
  inner join table.PUBLIC.stores on table.PUBLIC.stores.parent_token = merchant_token, 
  lateral flatten(aliases) as obj
where 
  value:type = 'STORE' 
  and row_number = 1;

现在这个查询给了我half我需要的东西。输出返回在其

STORE
列中具有
ALIAS
类型对象的所有行。我还希望能够从
STORE
类型的对象中提取令牌,但这就是我遇到麻烦的地方。我已经尝试在我创建的 CTE 和第二个
FROM
子句中分解行,但仍然没有运气。

sql snowflake-cloud-data-platform data-warehouse
2个回答
0
投票

我能够通过在 CTE 之外的选择中添加

value:token::string
来获得我需要的东西。


0
投票

为了进一步简化查询,可以在 CTE 中基于窗口函数过滤行:

with unique_merchants as (
  select updated_at, 
         aliases, 
         merchant_token, 
         identity_token
  from table.PUBLIC.business_info
  qualify row_number() over (partition by merchant_token order by updated_at desc)=1
)
select 
  identity_token, 
  merchant_token,
  aliases,
  obj.value:token:TEXT
from unique_merchants 
join table.PUBLIC.stores 
  on table.PUBLIC.stores.parent_token = merchant_token 
,lateral flatten(unique_merchants.aliases) as obj
where obj.value:type::TEXT = 'STORE';
© www.soinside.com 2019 - 2024. All rights reserved.