执行连接时雪花标识符无效
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_id
和 sku
,因为您的示例存在,您不需要加入 sp.
无效的标识符对我来说意味着某些东西的命名不正确,第一步是检查表是否存在,列的命名是否符合您的预期,列的类型是否与 JOIN x ON y
相同子句通过:
describe table analytics.dbt_lcasucci.product_category;
describe table raw.stitch_heroku.spree_variants;
我一直在尝试在两个不同的架构中跨两个不同的 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_id
和 sku
,因为您的示例存在,您不需要加入 sp.
无效的标识符对我来说意味着某些东西的命名不正确,第一步是检查表是否存在,列的命名是否符合您的预期,列的类型是否与 JOIN x ON y
相同子句通过:
describe table analytics.dbt_lcasucci.product_category;
describe table raw.stitch_heroku.spree_variants;