首页 > 解决方案 > 通过 RowVersion 更新记录,使用“SQL WHERE”过滤最大值

问题描述

尝试根据现有表中的 RowVersion 值更新表。我的数据湖每周更新一次,新数据存储为 .json 文件,其中包含任何新的 RowVersions。

我需要:

1)查询我的数据仓库中已有的表,找到最新的RowVersion(即max)

2)使用该值仅过滤/选择我的数据仓库中大于我刚刚确定的 RowVersion 的记录

3)更新我的表以包含新的行

我的问题是 - 下面的 SQL,我不确定如何在当前表中选择 Max RowNumber,然后在查询我的 S3 存储桶时使用它来过滤/指定我想要返回的内容:

create or replace temporary table UPDATE_CAR_SALES AS
SELECT 
VALUE:CAR::string AS CARS,
VALUE:RowVersion::INT AS ROW_VERSION
having row_version > max(row_version)
from '@s3_bucket',
 lateral flatten( input => $1:value);

标签: amazon-web-servicesamazon-s3etlsnowflake-cloud-data-platform

解决方案


我不清楚您如何存储数据。CARS 列是唯一的吗?您是否需要为每辆汽车或所有汽车/行找到最大行版本?无论如何,您可以使用子查询来过滤行版本高于最大值的行:

create or replace temporary table UPDATE_CAR_SALES AS 
SELECT 
VALUE:CAR::string AS CARS,
VALUE:RowVersion::INT AS ROW_VERSION
FROM @s3_bucket, lateral flatten( input => $1 )
where ROW_VERSION > (SELECT MAX(RowVersion) 
from MAIN_TABLE);

如果您需要根据每辆车的行版本(现有表的)过滤行:

create or replace temporary table UPDATE_CAR_SALES AS 
SELECT * FROM (SELECT
VALUE:CAR::string AS CARS,
VALUE:RowVersion::INT AS ROW_VERSION
FROM @s3_bucket, lateral flatten( input => $1 )) temp_table
where temp_table.ROW_VERSION > (SELECT MAX(RowVersion) 
from MAIN_TABLE where cars = temp_table.CARS );

我需要将主查询放在括号中才能使用别名。希望能帮助到你。


推荐阅读