-1

我是使用 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 = ["%%"];

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

有人可以指出我正确的方向吗?

4

2 回答 2

2

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

选项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);   

正如您在此处看到的 - 当您想要所有单位时 - 在您的 SET 行中添加“ALL_UNITS”

选项 #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

于 2021-10-03T17:08:55.097 回答
1

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

直接的方法是只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.*,但您的问题并未涵盖这一点。 (如果您不确定如何继续,请在这部分工作后打开另一个问题。)

于 2021-10-03T13:55:44.767 回答