【发布时间】:2021-04-07 19:41:31
【问题描述】:
所以我遇到了 Snowsql 查询的连接问题。我在下面的查询中有 3 个单独的样式,并且我无法让 AUDIT_LOGGIN_TABLE_NAME 显示这个特定的表名。我什至用“命名查询”和“CTE”样式对表名进行了硬编码。但没有运气。当我单独运行每段代码时,我得到了数据集。有两个领域可以加入。 Table_Name 和 ETL 数据。
对于第二轮,我认为这将是空间问题。因此还添加了 TRIM。但仍然没有运气。 任何人都可以在这方面指导我大致正确的方向。选择您的查询风格。
预期的结果集也在下面。可悲的是,这将进入一个视图。所以我认为我不能在视图定义中使用临时表。
select a.Full_Table_Name
,replace(UPPER(Full_Table_Name),'RAW_DB.JA.','' ) as Short_Table_Name
,log.TABLE_NAME as AUDIT_LOGGIN_TABLE_NAME
,a.ROWS_INSERTED
,log.RECORD_COUNT AS AUDIT_LOGGING_RECORD_COUNT
,a.ETL_DATE
, to_date(concat(substring(log.ETL_DATE,0,4),'-',substring(log.ETL_DATE,5,2),'-',substring(log.ETL_DATE,7,2) ) ) as AUDIT_LOGGING_ETL_DATE
,a.START_TIME
,a.END_TIME
,a.DURATION_IN_SECONDS
,a.EXECUTION_STATUS
,case when a.ROWS_INSERTED = log.RECORD_COUNT then 1 else 0 end VALIDATION_RECORD_COUNT_INSERT
from (
select UPPER(substring(QUERY_TEXT,11,charindex('from',QUERY_TEXT)-12)) as Full_Table_Name
,ROWS_INSERTED
,to_date(START_TIME) as ETL_DATE
,START_TIME
,END_TIME
,datediff(second,START_TIME,END_TIME) as Duration_in_seconds
,EXECUTION_STATUS
from VW_QUERY_HISTORY as vw
where substring(QUERY_TEXT,11,charindex('from',QUERY_TEXT)-12) like '%JA%'
and QUERY_TYPE = 'COPY'
and UPPER(substring(QUERY_TEXT,11,charindex('from',QUERY_TEXT)-12)) like '%RAW_DB.JA%'
and to_date(START_TIME) >= dateadd(day,-8,current_date() )
) as a
LEFT JOIN SOURCE_TABLE_COUNTS as log on UPPER(replace(UPPER(log.TABLE_NAME),'MGR.','')) = replace(UPPER(Full_Table_Name),'RAW_DB.JA.','' )
and
to_date(a.ETL_DATE) = to_date(concat(substring(log.ETL_DATE,0,4),'-',substring(log.ETL_DATE,5,2),'-',substring(log.ETL_DATE,7,2) ) )
order by ETL_DATE
///////NAMED QUERY STYLE /////////////////////////////////////////////
select Full_Table_Name
,Short_Table_Name
,AUDIT_LOGGIN_TABLE_NAME
,ROWS_INSERTED
,AUDIT_LOGGING_RECORD_COUNT
,ETL_DATE
,AUDIT_LOGGING_ETL_DATE
,START_TIME
,END_TIME
,DURATION_IN_SECONDS
,case when ROWS_INSERTED = AUDIT_LOGGING_RECORD_COUNT then 1 else 0 end as VALIDATION_RECORD_COUNT_INSERT
from (
select * from (
select TRIM(UPPER(substring(QUERY_TEXT,11,charindex('from',QUERY_TEXT)-12))) as Full_Table_Name
,TRIM(replace(UPPER(Full_Table_Name),'RAW_DB.JA.','' )) as Short_Table_Name
,ROWS_INSERTED
,to_date(START_TIME) as ETL_DATE
,START_TIME
,END_TIME
,datediff(second,START_TIME,END_TIME) as Duration_in_seconds
,EXECUTION_STATUS
from VW_QUERY_HISTORY as vw
where substring(QUERY_TEXT,11,charindex('from',QUERY_TEXT)-12) like '%JA%'
and QUERY_TYPE = 'COPY'
and UPPER(substring(QUERY_TEXT,11,charindex('from',QUERY_TEXT)-12)) like '%RAW_DB.JA%'
and to_date(START_TIME) >= dateadd(day,-8,current_date() )
) as sub_qury where trim(Short_Table_Name) like '%UDT_SKU%'
) as a
left join
( select trim(UPPER(replace(UPPER(log.TABLE_NAME),'MGR.',''))) as AUDIT_LOGGIN_TABLE_NAME
,log.RECORD_COUNT AS AUDIT_LOGGING_RECORD_COUNT
, to_date(concat(substring(log.ETL_DATE,0,4),'-',substring(log.ETL_DATE,5,2),'-',substring(log.ETL_DATE,7,2) ) ) as AUDIT_LOGGING_ETL_DATE
from SOURCE_TABLE_COUNTS as log
where UPPER(replace(UPPER(log.TABLE_NAME),'MGR.','')) = 'UDT_SKU'
) as audit_log_query
on trim(a.Short_Table_Name) = trim(audit_log_query.AUDIT_LOGGIN_TABLE_NAME) and
audit_log_query.AUDIT_LOGGING_ETL_DATE = ETL_DATE
//////////// CTE style
WITH audit_log_query as
( select trim(UPPER(replace(UPPER(log.TABLE_NAME),'MGR.',''))) as AUDIT_LOGGIN_TABLE_NAME
,log.RECORD_COUNT AS AUDIT_LOGGING_RECORD_COUNT
, to_date(concat(substring(log.ETL_DATE,0,4),'-',substring(log.ETL_DATE,5,2),'-',substring(log.ETL_DATE,7,2) ) ) as AUDIT_LOGGING_ETL_DATE
from SOURCE_TABLE_COUNTS as log
where UPPER(replace(UPPER(log.TABLE_NAME),'MGR.','')) = 'UDT_SKU'
)
select Full_Table_Name
,Short_Table_Name
,AUDIT_LOGGIN_TABLE_NAME
,ROWS_INSERTED
,AUDIT_LOGGING_RECORD_COUNT
,ETL_DATE
,AUDIT_LOGGING_ETL_DATE
,START_TIME
,END_TIME
,DURATION_IN_SECONDS
,case when ROWS_INSERTED = AUDIT_LOGGING_RECORD_COUNT then 1 else 0 end as VALIDATION_RECORD_COUNT_INSERT
from (
select * from (
select TRIM(UPPER(substring(QUERY_TEXT,11,charindex('from',QUERY_TEXT)-12))) as Full_Table_Name
,TRIM(replace(UPPER(Full_Table_Name),'RAW_DB.JA.','' )) as Short_Table_Name
,ROWS_INSERTED
,to_date(START_TIME) as ETL_DATE
,START_TIME
,END_TIME
,datediff(second,START_TIME,END_TIME) as Duration_in_seconds
,EXECUTION_STATUS
from VW_QUERY_HISTORY as vw
where substring(QUERY_TEXT,11,charindex('from',QUERY_TEXT)-12) like '%JA%'
and QUERY_TYPE = 'COPY'
and UPPER(substring(QUERY_TEXT,11,charindex('from',QUERY_TEXT)-12)) like '%RAW_DB.JA%'
and to_date(START_TIME) >= dateadd(day,-8,current_date() )
) as sub_qury where trim(Short_Table_Name) like '%UDT_SKU%'
) as a
left join audit_log_query on trim(a.Short_Table_Name) = trim(audit_log_query.AUDIT_LOGGIN_TABLE_NAME)
and audit_log_query.AUDIT_LOGGING_ETL_DATE = ETL_DATE
预期数据
FULL_TABLE_NAME|SHORT_TABLE_NAME|AUDIT_LOGGIN_TABLE_NAME|ROWS_INSERTED|AUDIT_LOGGING_RECORD_COUNT|ETL_DATE|AUDIT_LOGGING_ETL_DATE|START_TIME|END_TIME|DURATION_IN_SECONDS|VALIDATION_RECORD_COUNT_INSERT
RAW_DB.JDA.UDT_SKU|UDT_SKU||19697||2021-04-01||2021-04-01 07:59:39.101 -0700|2021-04-01 07:59:40.048 -0700|1|0
RAW_DB.JDA.UDT_SKU|UDT_SKU||27144||2021-04-05||2021-04-05 08:03:37.907 -0700|2021-04-05 08:03:39.377 -0700|2|0
RAW_DB.JDA.UDT_SKU|UDT_SKU||16536||2021-03-31||2021-03-31 08:03:05.626 -0700|2021-03-31 08:03:06.921 -0700|1|0
RAW_DB.JDA.UDT_SKU|UDT_SKU||19182||2021-04-02||2021-04-02 08:03:33.296 -0700|2021-04-02 08:03:34.803 -0700|1|0
RAW_DB.JDA.UDT_SKU|UDT_SKU||885||2021-04-03||2021-04-03 08:04:15.123 -0700|2021-04-03 08:04:16.071 -0700|1|0
RAW_DB.JDA.UDT_SKU|UDT_SKU||0||2021-04-04||2021-04-04 07:30:23.213 -0700|2021-04-04 07:30:23.862 -0700|0|0
RAW_DB.JDA.UDT_SKU|UDT_SKU||1262||2021-04-04||2021-04-04 17:35:01.110 -0700|2021-04-04 17:35:02.500 -0700|1|0
RAW_DB.JDA.UDT_SKU|UDT_SKU||197899||2021-04-06||2021-04-06 08:00:56.860 -0700|2021-04-06 08:00:59.798 -0700|3|0
RAW_DB.JDA.UDT_SKU|UDT_SKU||107433||2021-03-30||2021-03-30 08:02:34.231 -0700|2021-03-30 08:02:36.846 -0700|2|0
RAW_DB.JDA.UDT_SKU|UDT_SKU||17794||2021-04-07||2021-04-07 08:00:40.782 -0700|2021-04-07 08:00:41.590 -0700|1|0
【问题讨论】:
-
同事能够找出问题所在。解决方案:replace(TRIM(replace(UPPER(Full_Table_Name),'RAW_TABLE_DB.JDA.','' )), char(13), '') as Short_Table_Name 。
-
是的,刚刚发现您的输出是预期的 JDA,但您的替换是“RAW_DB.JA”。
标签: join casting snowflake-cloud-data-platform