在BigQuery中使用包含任何可能内容的字符串进行过滤



我是使用BigQuery的新手。

我正在构建一个查询,我将与其他几个人分享。每个人负责不同的业务单位,我希望他们能够轻松地在此查询中插入其业务单位的名称。

我构建了类似这样的东西,从我测试的结果来看,它运行良好:

DECLARE business_units array<string>;
SET business_units = ["unit_A", "unit_C", "unit_D"];

SELECT *
FROM dataset
WHERE bu_name IN UNNEST(business_units)

我还希望能够轻松地更改查询,以便搜索所有可能的业务单位。

理想情况下,我只想改变"SET"线。我尝试了不同的方法,但似乎都不起作用。我相信我需要使用元字符或正则表达式,但我无法找到正确的组合。我已经查看了BigQuery文档,但是我不能够理解如何做到这一点。

我试过这样做:

SET business_units = ["."];
SET business_units = ["*"];
SET business_units = ["."];
SET business_units = ["%%"];

当我使用其中任何一个时,我的结果返回为空。

谁能给我指个正确的方向?

这里有很多选择。我将向您展示对原始解决方案进行最小更改的那些

选项# 1

DECLARE business_units array<string>;
SET business_units = ["unit_A", "unit_C", "unit_D", "ALL_UNITS"]; 
SELECT *
FROM dataset
WHERE bu_name IN UNNEST(business_units)
OR "ALL_UNITS" IN UNNEST(business_units);   

正如你在这里看到的-当你想要所有的单位-添加"ALL_UNITS"在你的SET行

选项# 2

DECLARE business_units array<string>;
DECLARE all_units boolean;
SET business_units = ["unit_A", "unit_C", "unit_D"]; 
SET all_units = TRUE;
SELECT *
FROM dataset
WHERE bu_name IN UNNEST(business_units)
OR all_units;     
这里

-你还有一个参数all_units。当你想看到所有的单位-只需设置为TRUE,否则为FALSE

IN不能使用LIKE或正则表达式处理列表,LIKE或正则表达式不能将数组作为参数。

直接的方法是在你的非嵌套列表上使用JOIN

DECLARE business_units array<string>;
SET business_units = ["unit_A", "unit_C", "unit_D"];

SELECT
*
FROM
dataset
INNER JOIN
UNNEST(business_units)  AS param_pattern
ON dataset.buname LIKE param_pattern

如果一行匹配数组中的多个元素,您将获得重复(每个数据集行与它匹配的每个模式连接)。

你怎么处理那件事取决于你自己。你可能只有SELECT DISTINCT dataset.*,但你的问题没有涵盖这一点。(如果你不确定如何继续,当你完成这部分工作后,打开另一个问题。)

最新更新