将 MongoDB 查询转换为雪花
Posted
技术标签:
【中文标题】将 MongoDB 查询转换为雪花【英文标题】:Convert MongoDB query to Snowflake 【发布时间】:2020-11-07 09:20:34 【问题描述】:我正在进行一个迁移项目(MongoDB 到 Snowflake)并尝试将其中一个 mongo 查询转换为 Snowflake,如果数组中的所有元素都根据给定参数匹配,我们有一个用例来获取记录。
Mongo DB 函数:$all $all 运算符选择其中的文档 字段的值是一个数组,包含所有指定的 元素。
Mongo 查询:
db.collection('collection_name').find(
'code': '$in': [ 'C0001' ] ,
'months': '$all': [ 6, 7, 8, 9 ] --> 6,7,8,9 given parameters
);
Table Structure in snowflake:
column name datatype
code varchar(50)
id int
months ARRAY
weeks ARRAY
您能否就如何在 Snowflake 中编写此查询提供一些建议? 任何建议都会有所帮助。
【问题讨论】:
【参考方案1】:您可以使用 ARRAY_SIZE 和 ARRAY_INTERSECTION 对其进行测试:
这是示例表:
create or replace table test ( code varchar, months array );
insert into test select 'C0002', array_construct( 1, 2, 5,8,6,3)
union all select 'C0001', array_construct( 1,2,3 )
union all select 'C0002', array_construct( 2, 12, 3,7,9)
union all select 'C0001', array_construct( 7,8,9,3, 2) ;
这是要测试的查询:
select * from test where code in ('C0001','C0002')
and ARRAY_SIZE( ARRAY_INTERSECTION( months, array_construct( 3, 2 ))) = 2;
所以我找到了两个数组的交集,并检查了项目的数量。如果要查找 3 个项目,则应设置 3(如下所示):
select * from test where code in ('C0001','C0002')
and ARRAY_SIZE( ARRAY_INTERSECTION( months, array_construct( 3, 2, 7 ))) = 3;
【讨论】:
以上是关于将 MongoDB 查询转换为雪花的主要内容,如果未能解决你的问题,请参考以下文章