【问题标题】:Snowflake not recognizing a CAST or to TO_VARCHAR function over a join keySnowflake 无法通过连接键识别 CAST 或 TO_VARCHAR 函数
【发布时间】:2020-02-27 03:28:34
【问题描述】:

我正在尝试跨三个表执行联接。 这是初始代码,它有效,但对产品描述返回所有 NULL。我认为这是因为在我加入的前 2 个表中,加入键是 varchar 类型,而在另一个表中是 INT。 int 键是 analytics.dbt_lcasucci.product_category.product ID(上次加入)。

SELECT raw.stitch_heroku.spree_line_items.variant_id
       , raw.stitch_heroku.spree_variants.SKU
       , raw.stitch_heroku.spree_line_items.price
       , raw.stitch_heroku.spree_line_items.cost_price
       , pc.product_description
FROM raw.stitch_heroku.spree_line_items 
LEFT OUTER JOIN raw.stitch_heroku.spree_variants 
ON raw.stitch_heroku.spree_line_items.variant_id = raw.stitch_heroku.spree_variants.id
LEFT JOIN analytics.dbt_lcasucci.product_category as pc ON pc.product_ID = raw.stitch_heroku.spree_variants.id
GROUP BY raw.stitch_heroku.spree_line_items.variant_id
      , raw.stitch_heroku.spree_variants.SKU
      , raw.stitch_heroku.spree_line_items.price
      , raw.stitch_heroku.spree_line_items.cost_price
      , pc.product_description

接下来,我尝试使用一些雪花函数将 analytics.dbt_lcasucci.product_category.product ID 转换为 varchar。

这是我尝试过的:

LEFT JOIN (
   SELECT analytics.dbt_lcasucci.product_category.product_description
          , T0_VARCHAR(analytics.dbt_lcasucci.product_category.product_ID) 
   FROM analytics.dbt_lcasucci.product_category) as pc
   ON pc.product_ID= sv.id

LEFT JOIN (
   SELECT analytics.dbt_lcasucci.product_category.product_description
   , TRY_CAST(analytics.dbt_lcasucci.product_category.product_ID as VARCHAR(10) 
   FROM analytics.dbt_lcasucci.product_category) as pc
   ON pc.product_ID= sv.id

我得到的错误是:无效的标识符 T0_VARCHAR 或函数 TRY_CAST 不能与 NUMBER(38,0) 和 VARCHAR(10) 类型的参数一起使用

我不确定是否有办法通过这样做来修复它,或者我是否应该重新上传该文件以更改其来源的类型。

提前谢谢你!!!!

【问题讨论】:

  • 当我查看您的代码时,我必须注意到这一点:T0_VARCHAR(analytics.dbt_lcasucci.product_category.product_ID) FROM 在这部分代码中,您似乎使用过TO_VARCHAR 数字为零 0 而不是字母 O ? TO_VARCHAR T0_VARCHAR 请检查。
  • 第二次尝试我在这里看到:docs.snowflake.net/manuals/sql-reference/functions/… 你必须发送一个字符串作为 TRY_CAST 函数的参数。
  • 实际上你是对的 - 输入 0 而不是 O 的愚蠢错误。这解决了这个问题!谢谢你。现在我需要弄清楚如何修复单行子查询返回多行。
  • 太棒了。你介意我把这个作为答案,你可以把它标记为正确吗?对于您的新问题,如果您自己不管理,我建议发布一个新问题...
  • 我想我接受了 :)

标签: sql join types left-join snowflake-cloud-data-platform


【解决方案1】:

当我查看您的代码时,我必须注意到这一点:

T0_VARCHAR(analytics.dbt_lcasucci.product_category.product_ID) FROM

在这部分代码中,您似乎使用了带有数字 0 的 TO_VARCHAR 而不是字母 O ?请检查。

对于您的第二次尝试,我在这里看到:https://docs.snowflake.net/manuals/sql-reference/functions/try_cast.html 您必须发送一个字符串作为您的 TRY_CAST 函数的参数。

【讨论】:

    猜你喜欢
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-29
    • 2021-04-18
    • 1970-01-01
    相关资源
    最近更新 更多