通过RowVersion更新记录,使用 "SQL WHERE "来过滤MAX值

0 人关注

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

1)查询我的数据仓库中的现有表格,找到最新的RowVersion(即最大)。

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

3)更新我的表以包括新的行。

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

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-services
amazon-s3
etl
snowflake-cloud-data-platform
0004
0004
发布于 2019-12-24
1 个回答
Gokhan Atil
Gokhan Atil
发布于 2019-12-24
0 人赞同

我不清楚你是如何存储这些数据的。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