雪花-横向不能在连接的左侧

问题描述

我有一个变量数据类型,正在执行横向展平,但是然后我需要左联接一个json元素,以从Snowflake中的另一个关系表中查找对应ID的值。当我这样做时,它给我错误“横向视图不能在联接的左侧”,这是没有意义的,因为如果我不包括外部联接,则创建一个视图,然后在该视图的顶部创建另一个视图此视图使我可以执行左联接。

示例:

create or replace view  my_view
copy grants
as
select 
    rowid as row_id,siteData.value:siteID::int as site_id,es.site_name AS site_name
from 
    "RAW_DATA" raw,lateral flatten(datamap:data,outer => true) siteData
    LEFT join ext_site es on es.siteid = siteData.value:siteID
;

解决方法

我无法解释在LATERAL之后无法左联接的限制,但是有两个可能的解决方法...

选项1-使用CTE(公用表表达式)

create or replace view my_view
copy grants
as
with my_cte as (
  select 
      rowid as row_id,siteData.value:siteID::int as site_id
  from 
      "RAW_DATA" raw,lateral flatten(datamap:data,outer => true) siteData
)
select 
    c.row_id,c.site_id,es.site_name
from 
    my_cte c
    LEFT join ext_site es on es.siteid = c.site_id
;

选项2-使用内联(匿名)视图

create or replace view my_view
copy grants
as
select 
    c.row_id,es.site_name
from 
    (
  select 
      rowid as row_id,outer => true) siteData
    ) c
    LEFT join ext_site es on es.siteid = c.site_id
;

我个人会使用CTE方法,因为我发现它更具可读性。

关于outer => true的使用,只有在VARIANT结构以某种方式不一致并且不能保证data字典中存在具有值(数组或字典)本身包含一个或多个元素或属性。如果不需要,那么我将其删除。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...