loops - 如何在 BigQuery 中引用另一个表作为案例中多个喜欢的来源?
问题描述
所以我有一张表格,列出了所有类型的 url 类型(例如:Facebook、Instagram、Twitter 等)我想获得类似于以下结果的结果:
select
url
,(case
when url like '%facebook%' then 'Facebook'
when url like '%instagram%' then 'Instagram'
....
end) as type
但是问题是列表继续包含大约 30-40 个项目,我不想手动列出它们。有什么办法可以做到这一点?我正在考虑使用循环,但无法正确使用。
谢谢你。
解决方案
不完全是您问题的答案,但也许您可以使用REGEXP_EXTRACT作为替代方案:
WITH test_table AS (
SELECT "https://www.facebook.com/qwe" AS url UNION ALL
SELECT "http://abc.instagram.com/zxc"
)
SELECT
url,
REGEXP_EXTRACT(url, r"^https?:\/\/([^\/?]+)") AS type
FROM test_table
编辑:
与 Michel 的绝妙建议类似,您可以创建包含域列表及其搜索字符串的附加表。但请确保单个 url 不会在多个条件下出现,否则这样的 url 将在输出中重复。
WITH test_table AS (
SELECT "https://www.facebook.com/qwe" AS url UNION ALL
SELECT "http://abc.instagram.com/zxc"
),
social_networks AS (
SELECT '%facebook%' as search_string, 'Facebook' AS type UNION ALL
SELECT '%instagram%', 'Instagram'
)
SELECT
url, social_networks.type
FROM test_table JOIN social_networks
ON test_table.url LIKE social_networks.search_string
推荐阅读
- c++ - 如果使用 map::insert() 中的“new”运算符创建变量,我应该删除它们吗?
- python - 考虑假期选择营业日期
- dynamics-crm - 在 Microsoft Dynamics CRM 中,如何获取属性掩码值的含义?
- ruby-on-rails - 使用功能标志重新运行 Ruby 测试套件
- android - Flutter:通过android中的文件浏览器看不到在app文档目录中创建的目录
- graphql - GraphQL:查询无法验证
- python - 数组的输出是列表而不是python中的一维数组
- javascript - 我的不和谐机器人代码正在运行,但没有响应我的命令
- java - 我的通知仅在应用程序打开时有效
- javascript - vue 应用在媒体查询时不会增长到 100% 的高度