[英]Filter using string with any possible content in 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);
正如您在此處看到的那樣 - 當您需要所有單位時 - 在您的 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
IN
不能使用LIKE
或正則表達式處理列表, LIKE
或正則表達式不能將 arrays 作為參數。
直接的方法是在未嵌套的列表上使用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.*
,但您的問題不包括這一點。 (如果您不確定如何繼續,請在這部分工作后打開另一個問題。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.