Tom*_*aly 6 flatten lateral snowflake-cloud-data-platform
我有一个变体数据类型,我正在对其执行横向展平,但随后我需要左连接其中一个 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
;
Run Code Online (Sandbox Code Playgroud)
我无法解释在 LATERAL 之后无法 LEFT JOIN 的限制,但这里有两个潜在的解决方法......
选项 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
;
Run Code Online (Sandbox Code Playgroud)
选项 2 - 使用内联(匿名)视图
create or replace view my_view
copy grants
as
select
c.row_id,
c.site_id,
es.site_name
from
(
select
rowid as row_id,
siteData.value:siteID::int as site_id
from
"RAW_DATA" raw,
lateral flatten(datamap:data, outer => true) siteData
) c
LEFT join ext_site es on es.siteid = c.site_id
;
Run Code Online (Sandbox Code Playgroud)
就我个人而言,我会使用 CTE 方法,因为我发现它更具可读性。
关于 的使用outer => true,仅当 VARIANT 结构在某种程度上不一致时才需要这样做,并且不能保证字典data中datamap存在一个键,该键的值(数组或字典)本身包含一个或多个元素或属性。如果不需要,那么我会将其删除。
| 归档时间: |
|
| 查看次数: |
7949 次 |
| 最近记录: |