提问人:Zahra Safdari 提问时间:7/14/2023 最后编辑:Zahra Safdari 更新时间:7/14/2023 访问量:36
如何在 BQ 中拥有具有多个结果值的多个 IF 语句?
How can i have Multiple IF Statements with multiple result value in BQ?
问:
我有一个BQ问题,感谢您的帮助。
我有以下字段:类别
其中包含不同的值。附照片
我需要解开它并捕捉其中的价值,这对我来说似乎是一项复杂的任务。
逻辑是,如果类别标签的长度为 0(我假设它类似于附加的第一行图片,然后将其称为 parent='archaeology';ARRAY_LENGTH(SPLIT(category_tags, '|')) = 0
如果长度为 ARRAY_LENGTH(SPLIT(category_tags, '|')) = 1(
与第二行一样),则第一个字符将是子字符,第二个字符将是父字符。( child='geology', parent='planet earth')
如果长度类似于第 3 行,则应为 .(grandchild='alligator' would be 0 offset , parent='Animals' which is the 1 offset, child='reptiles' which is 2 offset)
最后,如果长度类似于 7 行,有 4 个值,它应该类似于 .(greatgrandchild='orcas' which is 0 offset, parent='Animals' which is the 1 offset, child='marrine mammal' which is 2 offset, grandchild='dolphines' would be 3 offset)
**用最简单的解释:
1 word = parent
and 12 = child/parent
and 123 = grandchild/parent/child
and 1234 = greatgrandchild/parent/child/grandchild.**
因此,我需要将其记录为category_type(父母/孩子/孙子/曾孙)和可以包含值的Category_name。像这样的东西:附上图片。
谁能为此帮助 BQ 代码?提前致谢。
答:
请考虑以下方法(BigQuery 标准 SQL)
SELECT SPLIT(category_tag, '/')[OFFSET(0)] category_name,
['', 'Parent', 'Child', 'Grandchild', 'Greatgrandchild'][OFFSET(ARRAY_LENGTH(SPLIT(category_tag, '/')))] AS category_type,
'/' || REGEXP_REPLACE(category_tag, r'^([^/]+)(/)(.*)', r'\3\2\1') AS category
FROM your_table
如果应用于示例数据,如您的问题
WITH your_table AS (
SELECT 'archeology' category_tag UNION ALL
SELECT 'geology/planet earth' UNION ALL
SELECT 'the moon/space/astronomy' UNION ALL
SELECT 'orcas/animals/marine mammals/dolphins'
)
输出是
如果用作分隔符 - 请改用下面|
SELECT SPLIT(category_tag,'|')[OFFSET(0)] category_name,
['', 'Parent', 'Child', 'Grandchild', 'Greatgrandchild'][OFFSET(ARRAY_LENGTH(SPLIT(category_tag, '|')))] AS category_type,
'/' || REGEXP_REPLACE(REPLACE(category_tag, '|', '/'), r'^([^/]+)(/)(.*)', r'\3\2\1') AS category
FROM your_table
评论
/
|
|
|
评论