Getting-started-with-sql-and-bigquery

教程

结构化查询语言(SQL)是数据库使用的编程语言,它是任何数据科学家的一项重要技能。 在本课程中,您将使用BigQuery来提高SQL技能,BigQuery是一种Web服务,可用于将SQL应用于庞大的数据集。
在本课程中,您将学习访问和检查BigQuery数据集的基础知识。 在您掌握了这些基础知识之后,我们将再次建立您的SQL技能。

Your first BigQuery commands

要使用BigQuery,我们将在下面导入Python包

from google.cloud import bigquery

工作流程的第一步是创建一个Client对象。 您将很快看到,此Client对象将在从BigQuery数据集中检索信息中发挥核心作用。

# Create a "Client" object
client = bigquery.Client()

我们将使用Hacker News(一个专注于计算机科学和网络安全新闻的网站)上的帖子数据集。
在BigQuery中,每个数据集都包含在相应的项目中。 在这种情况下,我们的hacker_news数据集包含在bigquery-public-data项目中。 要访问数据集,
我们首先使用dataset()方法构造对数据集的引用。接下来,我们使用get_dataset()方法以及刚刚构造的引用来获取数据集。

# Construct a reference to the "hacker_news" dataset
dataset_ref = client.dataset("hacker_news", project="bigquery-public-data") # API request - fetch the dataset
dataset = client.get_dataset(dataset_ref)

每个数据集都只是表的集合。 您可以将数据集视为包含多个表(均由行和列组成)的电子表格文件。我们使用list_tables()方法列出数据集中的表。

# List all the tables in the "hacker_news" dataset
tables = list(client.list_tables(dataset)) # Print names of all tables in the dataset (there are four!)
for table in tables:
print(table.table_id)

output

comments
full
full_201510
stories

与获取数据集相似,我们可以获取表。 在下面的代码单元中,我们在hacker_news数据集中获取完整表。

# Construct a reference to the "full" table
table_ref = dataset_ref.table("full") # API request - fetch the table
table = client.get_table(table_ref)

Table schema

表的结构称为其架构。 我们需要了解表的架构以有效地提取所需的数据。
在此示例中,我们将调查上面获取的完整表。

# Print information on all the columns in the "full" table in the "hacker_news" dataset
table.schema

output

[SchemaField('title', 'STRING', 'NULLABLE', 'Story title', ()),
SchemaField('url', 'STRING', 'NULLABLE', 'Story url', ()),
SchemaField('text', 'STRING', 'NULLABLE', 'Story or comment text', ()),
SchemaField('dead', 'BOOLEAN', 'NULLABLE', 'Is dead?', ()),
SchemaField('by', 'STRING', 'NULLABLE', "The username of the item's author.", ()),
SchemaField('score', 'INTEGER', 'NULLABLE', 'Story score', ()),
SchemaField('time', 'INTEGER', 'NULLABLE', 'Unix time', ()),
SchemaField('timestamp', 'TIMESTAMP', 'NULLABLE', 'Timestamp for the unix time', ()),
SchemaField('type', 'STRING', 'NULLABLE', 'Type of details (comment, comment_ranking, poll, story, job, pollopt)', ()),
SchemaField('id', 'INTEGER', 'NULLABLE', "The item's unique id.", ()),
SchemaField('parent', 'INTEGER', 'NULLABLE', 'Parent comment ID', ()),
SchemaField('descendants', 'INTEGER', 'NULLABLE', 'Number of story or poll descendants', ()),
SchemaField('ranking', 'INTEGER', 'NULLABLE', 'Comment ranking', ()),
SchemaField('deleted', 'BOOLEAN', 'NULLABLE', 'Is deleted?', ())]

每个SchemaField都会告诉我们一个特定的列(也称为字段)。 按顺序,信息为:

列名
列中的字段类型(或数据类型)
列的模式(“ NULLABLE”表示列允许NULL值,并且是默认值)
该列中数据的描述

比如  SchemaField('by', 'STRING', 'NULLABLE', "The username of the item's author.", ())  告诉我们:这个列名字为"by",数据为字符串型,允许为空,这个列存储了作者的名字

我们可以使用list_rows()方法来检查整个表的前五行,以确保这是正确的。 (有时数据库的描述已经过时,因此最好检查一下。)这将返回一个BigQuery RowIterator对象,该对象可以使用to_dataframe()方法快速转换为pandas DataFrame。

# Preview the first five lines of the "full" table
client.list_rows(table, max_results=5).to_dataframe()

list_rows()方法还将使我们仅查看特定列中的信息。 例如,如果我们要查看by列中的前五个条目,则可以这样做:

# Preview the first five entries in the "by" column of the "full" table
client.list_rows(table, selected_fields=table.schema[:1], max_results=5).to_dataframe()

Disclaimer

在进行编码练习之前,对已经知道一些SQL的人快速声明一下:

每个Kaggle用户可以每30天免费扫描5TB。 达到该限制后,您将不得不等待重置。

到目前为止,您所看到的命令将不需要该限制的有意义的一部分。 但是某些BiqQuery数据集非常庞大。 因此,如果您已经了解SQL,请等待运行SELECT查询,直到您了解如何有效使用分配。 如果您像大多数阅读此书的人一样,则还不知道如何编写这些查询,因此您无需担心此免责声明。

Kaggle-SQL(1)的更多相关文章

  1. 最全数据分析资料汇总(含python、爬虫、数据库、大数据、tableau、统计学等)

    一.Python基础 Python简明教程(Python3) Python3.7.4官方中文文档 Python标准库中文版 廖雪峰 Python 3 中文教程 Python 3.3 官方教程中文版 P ...

  2. SQL kaggle learn : WHERE AND

    WHERE trip_start_timestamp Between '2017-01-01' And '2017-07-01' and trip_seconds > 0 and trip_mi ...

  3. SQL kaggle learn with as excercise

    rides_per_year_query = """ SELECT EXTRACT(YEAR FROM trip_start_timestamp) AS year ,CO ...

  4. kaggle之数据分析从业者用户画像分析

    数据为kaggle社区发布的数据分析从业者问卷调查分析报告,其中涵盖了关于该行业不同维度的问题及调查结果.本文的目的为提取有用的数据,进行描述性展示.帮助新从业的人员更全方位地了解这个行业. 参考学习 ...

  5. 最近帮客户实施的基于SQL Server AlwaysOn跨机房切换项目

    最近帮客户实施的基于SQL Server AlwaysOn跨机房切换项目 最近一个来自重庆的客户找到走起君,客户的业务是做移动互联网支付,是微信支付收单渠道合作伙伴,数据库里存储的是支付流水和交易流水 ...

  6. SQL Server 大数据搬迁之文件组备份还原实战

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 解决方案(Solution) 搬迁步骤(Procedure) 搬迁脚本(SQL Codes) ...

  7. Sql Server系列:分区表操作

    1. 分区表简介 分区表在逻辑上是一个表,而物理上是多个表.从用户角度来看,分区表和普通表是一样的.使用分区表的主要目的是为改善大型表以及具有多个访问模式的表的可伸缩性和可管理性. 分区表是把数据按设 ...

  8. SQL Server中的高可用性(2)----文件与文件组

        在谈到SQL Server的高可用性之前,我们首先要谈一谈单实例的高可用性.在单实例的高可用性中,不可忽略的就是文件和文件组的高可用性.SQL Server允许在某些文件损坏或离线的情况下,允 ...

  9. EntityFramework Core Raw SQL

    前言 本节我们来讲讲EF Core中的原始查询,目前在项目中对于简单的查询直接通过EF就可以解决,但是涉及到多表查询时为了一步到位就采用了原始查询的方式进行.下面我们一起来看看. EntityFram ...

  10. 从0开始搭建SQL Server AlwaysOn 第一篇(配置域控)

    从0开始搭建SQL Server AlwaysOn 第一篇(配置域控) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www.cnb ...

随机推荐

  1. 小书MybatisPlus第3篇-自定义SQL

    本文档为一个系列,前面章节: 小书MybatisPlus第1篇-整合SpringBoot快速开始增删改查 小书MybatisPlus第2篇-条件构造器的应用及总结 书接上回,虽然Mybatis Plu ...

  2. 阿里云centos7服务器nginx配置及常见问题解答

    前言: 本文参考了jackyzm的博客:https://www.cnblogs.com/jackyzm/p/9600738.html,进行了内容的更新,并请注意这里适用的版本是centos7的版本.并 ...

  3. 【RCTF-2015】bug

    信息: 题目来源: RCTF-2015 标签:PHP.SQL注入 解题过程 访问网址,提示需要登陆: 使用admin用户名进行注册,提示: 对登陆页面与注册页面进行Fuzz,没有发现注入点. 登陆后页 ...

  4. JVM 学习笔记(四)

    回顾: 在之前的文章中,我们主要体现了当堆内存设置的比较小的情况下,比如:-Xmx20M -Xms20M,在项目运行的过程中,不断往内存中去添加对象, 这时候就会出现OOM,也就是内存溢出,本文章将展 ...

  5. 数据可视化之PowerQuery篇(五)PowerQuery文本处理技巧:移除和提取

    https://zhuanlan.zhihu.com/p/64419762 每当拿到原始数据,不如意十有八九,快速准确的清洗数据也是必备技能,数据清洗正好是 PowerQuery 的强项,本文就来介绍 ...

  6. Python函数05/内置函数/闭包

    Python函数05/内置函数/闭包 目录 Python函数05/内置函数/闭包 内容大纲 1.内置函数(二) 2.匿名函数及内置函数(重要) 3.闭包 4.今日总结 5.今日练习 内容大纲 1.内置 ...

  7. three.js 几何体(三)

    上一篇介绍了几何体的构造体参数,这篇郭先生就接着上一篇说. 1. ExtrudeGeometry挤压几何体 挤压几何体允许我们从一条形状路径中,挤压出一个Geometry.ExtrudeGeometr ...

  8. C# 字段初始值无法引用非静态字段、方法或属性( 类内部变量初始化)

    问题:字段初始值设定项无法引用非静态字段.方法或属性的问题 在类中  变量赋值其他变量报错? public class TestClass{  public TestClass()  {  }  pu ...

  9. 初识Java对象

    初始Java对象 本文的概述顺序 1什么是面向对象编程(面向对象编程与 面向过程编程的区别) 2类和对象的的关系 3类的定义 4对象的创建 5对象使用的一些细节 5.1对象在内存中的产生及分布 5.2 ...

  10. Host是什么?如何设置host文件?

    前言 前几天我在使用一些软件和网站时,出了一些小问题,然后我在网上搜解决问题的方法,搜着搜着就看到频繁出现的Host这个词.以前还没有注意到这个东西,因为总觉得它是系统文件,没必要去乱动:但是经过这次 ...