加入联接时雪花无效的标识符

时间:2019-10-31 01:25:49

标签: left-join outer-join snowflake-data-warehouse

我一直试图在两个不同模式的两个不同表之间进行外部联接。我试图从表格变体中筛选出小于4且大于5个数字的字符。联接最后没有使用简单的where子句,因此决定了。

问题是,如果我不加上引号,Snowflake会说我输入了无效的标识符。但是,当我用引号将其运行时,它可以工作,但是我得到的raw.stitch_heroku.spree_variants.SKU列中的值仅被命名为列名,遍及整个表!

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'

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

提前

1 个答案:

答案 0 :(得分:1)

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

在表中添加别名使SQL更具可读性,并且可以使用来减少重复长度命令,因此应该更好地工作:

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的比较,因此您无需加入

无效的标识符对我来说是一个错误的名称,第一步是检查表是否存在,并且按您的期望对列进行命名,并且JOIN x ON y子句的列类型通过:

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