Google bigquery 如何根据数组条件连接2个表
我有两张桌子: 产品表包含productTitle[字符串]列 关键字映射表包含2列,类别[字符串]和关键字[重复记录-字符串] 注意:关键字是互斥的:regexp_contains(关键字)唯一地将您分配给1个特定的cat_id 我的目标:合并2个表,以便为每个ProdTitle设置cat_id 连接逻辑:如果关键字(不区分大小写)包含prodTitle,则将类别\u id分配给prodTitleGoogle bigquery 如何根据数组条件连接2个表,google-bigquery,Google Bigquery,我有两张桌子: 产品表包含productTitle[字符串]列 关键字映射表包含2列,类别[字符串]和关键字[重复记录-字符串] 注意:关键字是互斥的:regexp_contains(关键字)唯一地将您分配给1个特定的cat_id 我的目标:合并2个表,以便为每个ProdTitle设置cat_id 连接逻辑:如果关键字(不区分大小写)包含prodTitle,则将类别\u id分配给prodTitle 您将如何高效地执行此操作?为了使每个产品都有一行,我按productId和productTi
您将如何高效地执行此操作?为了使每个产品都有一行,我按productId和productTitle将其分组。 如果您不想使用group by,只需将其删除,然后将
ARRAY\u AGG(cat\u id)
更改为普通cat\u id
。
所以,我想你可以用这个
WITH
products AS (
SELECT 1 productId, 'lorem ipsum cat1 lorem ipsum' as productTitle union all
SELECT 2 productId, 'lorem ipsum cat2 lorem ipsum' as productTitle union all
SELECT 3 productId, 'lorem ipsum cat3 lorem ipsum' as productTitle union all
SELECT 4 productId, 'lorem ipsum cat4 lorem ipsum' as productTitle
),
categories AS (
SELECT 1 as cat_id, ['cat1', 'something', 'else'] as keywords union all
SELECT 2 as cat_id, ['cat2', 'another', 'keyword'] as keywords
)
select productId, productTitle, ARRAY_AGG(cat_id) categories
from products p
cross join categories c
WHERE EXISTS (SELECT 1 FROM UNNEST(c.keywords) as k WHERE p.productTitle LIKE CONCAT('%', k, '%'))
GROUP BY 1,2
为了使每个产品都有一行,我按productId和productTitle将其分组。 如果您不想使用group by,只需将其删除,然后将
ARRAY\u AGG(cat\u id)
更改为普通cat\u id
。
所以,我想你可以用这个
WITH
products AS (
SELECT 1 productId, 'lorem ipsum cat1 lorem ipsum' as productTitle union all
SELECT 2 productId, 'lorem ipsum cat2 lorem ipsum' as productTitle union all
SELECT 3 productId, 'lorem ipsum cat3 lorem ipsum' as productTitle union all
SELECT 4 productId, 'lorem ipsum cat4 lorem ipsum' as productTitle
),
categories AS (
SELECT 1 as cat_id, ['cat1', 'something', 'else'] as keywords union all
SELECT 2 as cat_id, ['cat2', 'another', 'keyword'] as keywords
)
select productId, productTitle, ARRAY_AGG(cat_id) categories
from products p
cross join categories c
WHERE EXISTS (SELECT 1 FROM UNNEST(c.keywords) as k WHERE p.productTitle LIKE CONCAT('%', k, '%'))
GROUP BY 1,2
你认为这种合并的逻辑是什么?请详细说明更新的问题,以及您心目中的合并逻辑是什么?请详细说明最新情况