Snowflake CTE 中的访问表属性

Posted

技术标签:

【中文标题】Snowflake CTE 中的访问表属性【英文标题】:Accees table attribute in Snowflake CTE 【发布时间】:2021-05-27 12:22:47 【问题描述】:
use database DQ_MART;

use schema WORKING;

WITH ASCENDER_EMPLOYEE AS (
    **SELECT DISTINCT EMPLOYEE_ID FROM RECONCILLIATION_ASCENDER_WORKER_TIMESHEET**
),
     WORKDAY_EMPLOYEE AS (
         **SELECT DISTINCT EMPLOYEE_ID FROM RECONCILLIATION_WORKDAY_WORKER_TIMESHEET**
     )
     
SELECT 'Missing employee in Ascender'              DQ_RULE_NAME,
       RECONCILLIATION_WORKDAY_WORKER_TIMESHEET.EMPLOYEE_ID                         KEY
      
FROM WORKDAY_EMPLOYEE WORKDAY
         LEFT OUTER JOIN ASCENDER_EMPLOYEE ASCENDER
                         ON ASCENDER.EMPLOYEE_ID = WORKDAY.EMPLOYEE_ID
;

大家好,我对 Snowflake SQL CTE 有点陌生。在上面的查询中,我收到一个错误,Error: invalid identifier 'RECONCILLIATION_WORKDAY_WORKER_TIMESHEET.EMPLOYEE_ID' (line 16) in this line

RECONCILLIATION_WORKDAY_WORKER_TIMESHEET.EMPLOYEE_ID

访问同一张表的select语句运行正常。 表所在的数据库和架构设置正确,并且我确实对表有 SELECT 授权。

Snowflake 中是否存在导致错误发生的范围可见性。欢迎提出任何建议。

【问题讨论】:

【参考方案1】:

“RECONCILLIATION_WORKDAY_WORKER_TIMESHEET.EMPLOYEE_ID”表示“RECONCILLIATION_WORKDAY_WORKER_TIMESHEET”表中的“EMPLOYEE_ID”列。

您使用此列的选择语句是:

SELECT <column list>
FROM WORKDAY_EMPLOYEE WORKDAY
LEFT OUTER JOIN ASCENDER_EMPLOYEE ASCENDER
ON ASCENDER.EMPLOYEE_ID = WORKDAY.EMPLOYEE_ID

其中不包含名为 RECONCILLIATION_WORKDAY_WORKER_TIMESHEET 的表 - 这就是您收到错误的原因

【讨论】:

以上是关于Snowflake CTE 中的访问表属性的主要内容,如果未能解决你的问题,请参考以下文章

在 Snowflake 中使用 CTE 进行 MATCH_RECOGNIZE

从 Salesforce 查询 Snowflake 表

将 Snowflake ODBC 驱动程序与 MS Access 一起使用

访问 Snowflake 中的结果缓存会消耗计算积分吗?

在 Snowflake DWH 中撤销从架构创建表

防止递归 CTE 多次访问节点