执行连接时雪花标识符无效

Snowflake invalid identifier when performin a join

我一直在尝试在两个不同的架构中跨两个不同的 table 进行外部联接。我试图从 table 变体中过滤掉小于 4 位和大于 5 位数字的字符。连接最终没有使用简单的 where 子句,因此做出了这个决定。

问题是如果我不放引号,Snowflake 会说我放了无效的标识符。但是,当我 运行 将其与引号一起使用时,它可以工作,但我在 raw.stitch_heroku.spree_variants.SKU 列的字段中得到的值仅命名为列名,整个 table!

SELECT
    analytics.dbt_lcasucci.product_category.product_description,
    'raw.stitch_heroku.spree_variants.SKU'
FROM analytics.dbt_lcasucci.product_category
LEFT JOIN (
    SELECT * FROM raw.stitch_heroku.spree_variants
    WHERE LENGTH('raw.stitch_heroku.spree_variants.SKU')<=5
      and LENGTH('raw.stitch_heroku.spree_variants.SKU')>=4
) ON 'analytics.dbt_lcasucci.product_category.product_id'
      = 'raw.stitch_heroku.spree_variants.SKU'

有办法解决这个问题吗?我很困惑,还没有在论坛上发现这个问题!

提前谢谢

首先单引号定义一个字符串文字 'this is text' 其中双引号是 table/column 名称 "this_is_a_table_name"

向表格添加别名使 SQL 更具可读性,重复长度命令可以用 between 减少,因此这应该会更好:

SELECT pc.product_description,
    sp.SKU
FROM analytics.dbt_lcasucci.product_category AS PC
LEFT JOIN (
    SELECT SKU
    FROM raw.stitch_heroku.spree_variants 
    WHERE LENGTH(SKU) BETWEEN 4 AND 5
) AS sp
    ON pc.product_id = sp.SKU;

所以我减少了子选择结果,因为您只使用了 sp 中的 sku,但鉴于您正在比较 product_idsku,因为您的示例存在,您不需要加入 sp.

无效的标识符对我来说意味着某些东西的命名不正确,第一步是检查表是否存在,列的命名是否符合您的预期,列的类型是否与 JOIN x ON y 相同子句通过:

describe table analytics.dbt_lcasucci.product_category;
describe table raw.stitch_heroku.spree_variants;