amazon-web-services - 通过 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);
解决方案
我不清楚您如何存储数据。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 );
我需要将主查询放在括号中才能使用别名。希望能帮助到你。
推荐阅读
- c# - C# Unity:直接调用另一个类的函数与通过订阅事件调用函数有什么区别?
- python - 在python中使用zeep从wsdl文件中检索数据
- javascript - 我怎样才能要求单击反应表单中的切换按钮之一?
- mysql - 如何从表中删除不需要的信息?
- android-studio - 为什么 Android Studio 在启动调试器时一直在做 Gradle 同步?
- apache - 部署自定义灵活运行时 apache 驱动的 yii2 应用程序后,Google App 引擎未使用自动生成的 https url
- mysql - 基于 ID 组的 2 个不同表的 SUM 通过来自第三个表的返回值比预期值双倍
- c# - 为组件和页面创建新的 Blazor 项目
- javascript - 我想在 vuejs 中减去一个月的日期
- python - 如何将 Perl 的 $1 特殊变量转换为 Python?