Google bigquery 如何根据数组条件连接2个表

Google bigquery 如何根据数组条件连接2个表,google-bigquery,Google Bigquery,我有两张桌子: 产品表包含productTitle[字符串]列 关键字映射表包含2列,类别[字符串]和关键字[重复记录-字符串] 注意:关键字是互斥的:regexp_contains(关键字)唯一地将您分配给1个特定的cat_id 我的目标:合并2个表,以便为每个ProdTitle设置cat_id 连接逻辑:如果关键字(不区分大小写)包含prodTitle,则将类别\u id分配给prodTitle 您将如何高效地执行此操作?为了使每个产品都有一行,我按productId和productTi

我有两张桌子:

产品表包含productTitle[字符串]列

关键字映射表包含2列,类别[字符串]和关键字[重复记录-字符串]

注意:关键字是互斥的:regexp_contains(关键字)唯一地将您分配给1个特定的cat_id

我的目标:合并2个表,以便为每个ProdTitle设置cat_id

连接逻辑:如果关键字(不区分大小写)包含prodTitle,则将类别\u id分配给prodTitle


您将如何高效地执行此操作?

为了使每个产品都有一行,我按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

你认为这种合并的逻辑是什么?请详细说明更新的问题,以及您心目中的合并逻辑是什么?请详细说明最新情况