第七篇: BigQuery中的复杂SQL查询

ops/2024/11/8 21:22:37/

BigQuery中的复杂SQL查询

背景与目标
在数据分析中,我们通常需要从多个数据源中获取信息,以便进行深入的分析。这时,BigQuery提供的JOINUNION和子查询等复杂SQL语句非常实用。本文将以Google BigQuery的公共数据集为例,介绍如何使用这些高级SQL操作,并展示具体的使用场景,如从人口统计数据和城市服务请求中获取洞察。


1. JOIN操作:整合多表信息

在多表分析中,JOIN用于合并相关的表数据。例如,假设我们希望查看2000至2010年间美国常见的女性名字及旧金山的311服务请求类型。这个分析可以帮助我们在城市服务和人口统计之间发现潜在的联系。

sql">
SELECTnames.name AS popular_name,names.year AS year,requests.category AS service_request,requests.created_date AS request_date
FROM`bigquery-public-data.usa_names.usa_1910_current` AS names
JOIN`bigquery-public-data.san_francisco.311_service_requests` AS requests
ONnames.year = EXTRACT(YEAR FROM requests.created_date)
WHEREnames.gender = "F"AND names.year BETWEEN 2000 AND 2010
LIMIT 100;

查询结果示例:

popular_name	year	service_request
Emma			2008	311 External Request
Abigail			2008	311 External Request
Ava				2008	311 External Request
Sophia			2008	311 External Request
Isabella		2008	311 External Request
...

2. UNION操作:合并多个数据源

UNION操作适用于字段结构相似的多表合并,例如合并不同城市的311服务请求。

sql">SELECT "San Francisco" AS city,category as request_type,created_date as requested_date
FROM`bigquery-public-data.san_francisco.311_service_requests`
UNION ALL
SELECT "New York" AS city,complaint_type AS request_type,created_date AS requested_date
FROM`bigquery-public-data.new_york_311.311_service_requests`;`

此查询将旧金山和纽约的311服务请求整合在一个表中,使我们可以在一个表中查看两地的公共服务需求数据。


3. 子查询:嵌套查询实现高级筛选

子查询用于从一个查询的结果中进一步筛选或聚合数据。例如,我们希望在旧金山市2019年最常见的五个服务请求中找到每个请求类型的平均处理时间。

sql">SELECT main.category,AVG(main.request_duration) AS avg_duration
FROM (SELECT category,TIMESTAMP_DIFF(closed_date, created_date, MINUTE) AS request_durationFROM `bigquery-public-data.san_francisco.311_service_requests`WHERE EXTRACT(YEAR FROM created_date) = 2016
) AS main
GROUP BY main.category
ORDER BY avg_duration DESC
LIMIT 5

查询结果示例:

category								avg_duration
SFHA Requests							696681.24735376
General Request - HUMAN RESOURCES		562258.918918919
General Request - MEDICAL EXAMINER		561643.0
General Request - CONVENTION FACILITIES	546616.0
General Request - STATUS OF WOMEN		532976.0

解释:

  • 内部查询从旧金山的311服务请求数据中提取2016年的请求类型和每个请求的处理时间。
  • 外部查询通过聚合函数AVG计算每种服务类型的平均处理时间,并按时间排序。
    在这里插入图片描述

总结

BigQuery提供了强大的JOINUNION和子查询操作,帮助我们更灵活地整合和分析多来源数据。这些操作在业务分析和数据仓库管理中非常实用,通过合理应用这些SQL操作,可以有效提高数据分析的深度和效率。


http://www.ppmy.cn/ops/132035.html

相关文章

提示工程(Prompt Engineering):大模型微调Prompt/Instruct Mode;稀疏向量与稠密向量进行词语编码

目录 提示工程(Prompt Engineering):大模型微调Prompt/Instruct Mode 稀疏向量与稠密向量 稀疏向量 稠密向量 稀疏向量与稠密向量的区别 提示工程(Prompt Engineering):大模型微调Prompt/Instruct Mode 如今已不再是一个陌生的概念,它作为一种“有效地与人工智能沟…

Python 继承、多态、封装、抽象

面向对象编程(OOP)是 Python 中的一种重要编程范式,它通过类和对象来组织代码。OOP 的四个核心概念是继承(Inheritance)、多态(Polymorphism)、封装(Encapsulation)和数据…

Maven(25)如何使用Maven进行性能测试?

使用Maven进行性能测试通常涉及使用JMeter或JMH(Java Microbenchmark Harness)等工具。这里我将详细介绍如何使用JMH进行性能测试,因为它是专门为Java微基准测试设计的。以下是如何在Maven项目中集成JMH进行性能测试的步骤: 步骤…

智能电网能源优化管理系统(Smart Grid Energy Optimization Management System, SGEOMS)

1.产品介绍 产品介绍方案 产品名称 智能电网能源优化管理系统(Smart Grid Energy Optimization Management System, SGEOMS) 主要功能 能源生产优化能源输送优化能源分配优化能源使用优化功能介绍 能源生产优化 具体作用:通过对现有能源生产过程的优化和建立新的能源生产…

pytorch中model.cuda()的使用

文章目录 前言一、model.cuda()是什么?二、使用步骤1. 检查GPU是否可用2. 选择设备3. 移动模型到选定设备4. 确保数据和模型在同一设备上 三、注意事项总结 前言 本文旨在详细解释在PyTorch框架中model.cuda()方法的使用,以及与之相关的torch.cuda.devi…

【进度猫-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…

CSS画icon图标系列(一)

目录 前言: 一、向右箭头 1.原理: 2.代码实现 3.结果展示: 二、钟表 1.原理: 2.代码展示: 3.最终效果: 三、小手机 1.原理: 2.代码展示: 3.最后效果: 四、结…

CompletableFuture:supplyAsync与runAsync

CompletableFuture是Java 8中引入的一个类,用于简化异步编程和并发操作。它提供了一种方便的方式来处理异步任务的结果,以及将多个异步任务组合在一起执行。CompletableFuture支持链式操作,使得异步编程更加直观和灵活。 在引入CompletableF…