天天看点

SmartNotebook:革新SQL的组织方式,加速数据科学进程

作者:新语数据故事汇

SQL(Structured Query Language)是一种关系型数据库管理系统的标准语言,用于访问和操作关系型数据库。尽管出现了一些新的数据管理和分析技术,但SQL仍然是企业和组织的核心数据管理和分析工具之一。在数据科学领域,SQL的重要性不言而喻,它易学易用且与脚本语言集成,广泛应用于数据科学流程。SmartNotebook是一种创新的Notebook工具,它在SQL的组织方式上引入了新的概念。SmartNotebook内置主流数据库/数据仓库/大数据平台的支持,并提供动态化SQL、dfSQL和链式SQL等功能,帮助数据科学家更轻松地实现和简化复杂的分析逻辑和步骤,并提高效率和性能。SmartNotebook的创新方式为数据科学家带来了更好的工作体验和更高效的数据分析能力。

SmartNotebook在SQL的优化与创新:

特点1:免安装,支持主流数据库和数据仓库、大数据平台,独立数据源配置与管理。

特点2:SQL 与Python无缝融合、动态SQL。

特点3:SQL方式操作DataFrame 数据集(dfSQL)。

特点4:全新SQL组织方式、CTE支持:链式SQL。

SQL是玩转数据的主要语言

如果你想玩转数据,那你一定要会SQL。

SQL是20世纪70年代初期由IBM的研究人员Donald D. Chamberlin和Raymond F. Boyce开发的一种关系型数据库管理系统(RDBMS)的标准语言,用于访问和操作关系型数据库。随着互联网和大数据的快速发展,SQL在数据管理和分析领域的重要性越来越突出,现已成为大部分企业和组织的核心数据管理和分析工具之一。SQL的标准和版本不断发展,如ANSI SQL、ISO SQL等,为SQL的发展提供了更多的规范和参考。各个数据库管理系统也都提供了对SQL的实现和扩展,以满足各种不同的需求和应用场景。当前,SQL被广泛应用于金融、电商、医疗等各个领域,是数据管理和分析的关键技术之一。

Bill Gates曾经说过,“SQL是世界上最重要的数据管理语言之一”。这句话表明了SQL在数据管理和分析领域的重要性。SQL的标准化和普及程度高,使用方便,能够处理大量的数据,支持复杂的查询和数据分析操作,因此被广泛应用于企业和组织的数据管理和分析工作中。同时,SQL的重要性也在不断增加,因为随着数据规模和复杂度的不断增加,需要更加高效和灵活的数据管理和分析工具来处理这些数据,而SQL正是满足这一需求的重要工具之一。

在大数据时代还需要SQL 吗?

虽然NoSQL、BigQuery、MapReduce和Spark等技术的出现给数据管理和分析带来了许多创新和改进,但SQL仍然是大多数企业和组织的首选数据管理和分析工具。以下是SQL相对这些技术的一些优势:

  1. 通用性和标准化:SQL是一个通用的标准化语言,被大多数关系型数据库管理系统所支持。这意味着,无论使用哪种数据库系统,用户都可以使用相同的SQL语言进行数据管理和分析,这使得SQL成为一个通用的数据管理和分析工具。
  2. 简单易学:相对于其他数据管理和分析技术,SQL语言非常简单易学,需要的学习时间和成本相对较少。这使得SQL成为了大多数企业和组织的首选数据管理和分析工具之一。
  3. 高效性:SQL的高效性是由其查询优化器和索引技术所支持的。这些技术可以大幅提高SQL查询的性能和效率,使得SQL成为一个高效的数据管理和分析工具。
  4. 数据一致性和可靠性:SQL被设计为一种严格的事务性语言,保证了数据的一致性和可靠性。这使得SQL在大型企业和组织中被广泛应用于数据管理和分析。

总之,尽管NoSQL、BigQuery、MapReduce和Spark等技术的出现为数据管理和分析带来了许多创新和改进,但SQL作为一种通用的标准化语言,仍然是大多数企业和组织的首选数据管理和分析工具。

同样,SQL在数据科学上也是十分重要。
SmartNotebook:革新SQL的组织方式,加速数据科学进程

为什么SQL在数据科学中如此重要?

  1. 易学易用SQL因其易用的语法和使用英语单词而备受赞誉。与一些复杂的编程语言不同,SQL帮助您轻松理解概念。
  2. 理解数据SQL帮助您探索和可视化数据集,有效地生成准确结果。SQL还有助于您更好地理解数据集并根据需要进行组织。
  3. SQL无处不在SQL已成为几乎所有领先组织的首选。许多商业巨头如Facebook,Google,Amazon,Netflix,Uber等都在使用SQL执行各种数据科学流程。
  4. SQL与脚本语言集成SQL与最常用的脚本语言(如R和Python)很容易集成。
  5. SQL是声明式的SQL是非过程性语言。SQL比其他传统的编程语言(如R和Python)更快,代码更短。
  6. 管理大量数据SQL为处理大量数据提供了适当的资源,并可获得有关其的见解。
  7. 不断的发展空间尽管已经很老,但SQL仍然受到许多数据科学家的青睐。根据近期StackOverflow的开发者调查,SQL在数据科学中的应用比常用的编程语言R和Python更受欢迎。
SQL 不断发展中
SmartNotebook:革新SQL的组织方式,加速数据科学进程

SQL作为一种重要的数据管理语言,不断地发展和演变,以适应不同场景下的需求。无论是传统的OLTP系统还是现在的分布式、云化、NewSQL系统,SQL都扮演着重要的角色。SQL发展大致分为以下几个阶段:

  1. OLTP(Online Transaction Processing)时代:SQL最初是用于支持事务处理的,比如银行系统、库存管理等场景,主要应用于OLTP系统。在这个时期,SQL的重点是快速、高效地执行基本的增删改查操作。
  2. OLAP(Online Analytical Processing)时代:随着数据量的不断增长,OLAP系统应运而生。OLAP系统需要更复杂的数据分析能力,以支持数据挖掘、分析和报告等操作。因此,SQL也得以不断发展,支持更多的数据分析和聚合操作,比如GROUP BY、HAVING、SUM、AVG等。
  3. 分布式时代:随着数据量和访问量的不断增加,传统的单机数据库已经无法满足业务需求,分布式数据库应运而生。SQL也不再是单机应用,而是具备分布式计算能力,支持多节点集群部署和水平扩展,比如Google的Spanner、Facebook的Cassandra、阿里云的AnalyticDB等。
  4. 云化服务时代:随着云计算的兴起,越来越多的企业将数据库部署到云上,SQL也随之发展出了云化服务。云化服务提供了更加方便的部署和管理方式,同时也支持更加灵活的弹性伸缩能力,比如亚马逊的RDS、Microsoft的Azure SQL Database、阿里云的RDS等。
  5. NewSQL时代:传统的关系型数据库虽然具备良好的数据一致性和事务支持能力,但在高并发、大数据量等场景下,性能表现有限。为此,NewSQL应运而生,它既具备关系型数据库的数据一致性和事务支持能力,又支持分布式计算、大规模数据存储和处理等能力。一些代表性的NewSQL数据库包括VoltDB、CockroachDB、TiDB等。

NoteBook数据科学首选工具

Notebook是一个基于Web的交互式计算环境,可以支持多种编程语言,包括Python、R、Julia等,它可以帮助数据科学家在单个界面中组织代码、文档和图形化输出,以便更好地管理和共享工作。

Notebook有以下特点适合数据科学:

  1. 交互性:Notebook具有交互性,可以让数据科学家在处理数据时实时看到结果,并快速迭代和调整代码。
  2. 可视化:Notebook允许在一个单一的界面中集成可视化,数据科学家可以使用多种可视化工具和库,如Matplotlib、Seaborn和Plotly等,更好地展示和理解数据。
  3. 文档化:Notebook使得数据科学家可以将代码、可视化和文档组合在一个单一的文档中,从而更容易地共享和协作。
  4. 代码共享:Notebook可以作为一个容器,让数据科学家共享和重复使用他们的代码和分析,这可以提高工作效率和可重复性。

总之,Notebook为数据科学家提供了一个灵活的、互动的、可视化的、文档化的、可共享的环境,可以帮助他们更好地组织和管理他们的数据分析工作,从而加快分析过程并提高分析结果的可靠性。

SmartNotebook:革新SQL的组织方式,加速数据科学进程

Notebook 的用途

  • 数据清洗
  • 统计建模
  • 训练机器学习模型
  • 数据可视化

SQL与Notebook

SQL非常适合进行数据检索和计算基本的统计数据,但如果需要进行更深入、灵活的探索性数据分析或数据科学工作,Python则更为适用。因此,若能够在同一工具中同时使用这两种编程语言,将会更加方便和高效。

一种非常流行的这样的工具是Jupyter Notebook,它支持多种编程语言(包括Python和SQL),并且可以在一个交互式环境中进行数据处理、可视化和分析。通过将SQL和Python集成在Jupyter Notebook中,数据科学家可以通过SQL查询数据,然后使用Python进行进一步的探索性数据分析、建模和可视化。这使得数据分析和数据科学更加高效、方便、迭代和复现。同时,使用Jupyter Notebook还可以将文档、代码、图表和解释性文本整合在一起,形成一个易于理解和共享的分析报告。

SmartNotebook:革新SQL的组织方式,加速数据科学进程

Notebook使用python 和SQL 主要有两种方式,一种使用python操作数据库连接执行SQL;另外一种方式使用SmartNotebook的SQL单元格直接执行原生SQL而不需要复杂连接与配置,内置主流数据库/数据仓库驱动,支持动态SQL(jinja2 模板)、执行的结果直接保存DataFrame中,优雅与python融合,支持链式SQL:将复杂的嵌套查询转化为简单的链式CTE(Common Table Expression)查询SQL。

方式一:使用 Python 读取 SQL 查询

  1. 安装python 相关数据库连接驱动包,比如 mysql:
pip install mysql-connector-python
           
  1. 创建数据库连接(Connect)
conn= pymysql.connect(
  host='host', 
  port=3307, user='root', 
  passwd='pwd',
  charset='utf8',
  db='cte_test')
           
  1. 使用Pandas执行SQL
df = pd.read_sql_query('select * from grade_score_all', conn)
df
           
SmartNotebook:革新SQL的组织方式,加速数据科学进程

方式2:在SmartNoteBook 上使用SQL

SmartNoteBook是协作的、集成的、一站式数据科学/分析环境。SmartNoteBook是参考Jupyter notebook思想实现数据科学与分析的强大环境,深度融合Python(编程能力、AI能力)与SQL(数据处理)、可视化于一体,更高效编辑、执行和共享数据应用模型,进行数据采集、探索、机器学习、深度学习和交互可视化。开箱即用的数据科学、机器学习工具包;高效编辑器辅助和团队协作跟踪功能;通过Notebook结构化逻辑关系配合自然语言可以很好表现数据分析过程、阐述数据故事,形成数据报告,深层次的挖掘数据、释放数据价值。

SmartNotebook 在SQL应用进行深入的优化和支持,主要有以下特点:

特点1:免安装,支持主流数据库和数据仓库、大数据平台,独立数据源配置与管理。

内置支持主流数据库、数据仓库和大数据平台,包括Mysql、Spark、Hive、PostgreSQL、Oracle、SQL Server、Presto、ClickHouse、Greenplum等。数据源独立配置与管理,连接信息(用户名与密码)不会暴露于代码中。

SmartNotebook:革新SQL的组织方式,加速数据科学进程
SmartNotebook:革新SQL的组织方式,加速数据科学进程

特点2:SQL 与Python无缝融合、动态SQL

  1. 插入SQL单元格,选择数据源,直接编写SQL执行,结果保存到python pandas 的DataFrame数据集,后续可以用python 进行数据分析或数据建模。

    a) 添加"更多类型"选择SQL 单元格。

    b) 选择数据源,这里包括数据库的数据源和dfSQL 两类,例如:选择SQLChain 这个数据源;并对结果集进行命名,例如:total_score 。注:这个命名包括两个意义:一是查询的结果集保持此命名的DataFrame中;二是在链式SQL 作为CTE 表达式的名称。

    c) 编写SQL,执行(按钮或命令键)并调试SQL。

SmartNotebook:革新SQL的组织方式,加速数据科学进程
SmartNotebook:革新SQL的组织方式,加速数据科学进程
SmartNotebook:革新SQL的组织方式,加速数据科学进程
  1. 动态SQL:支持jinjia2 表达式模板,可以引用python 中变量进行变量替换,支持if 表达式进行逻辑判断、for 循环表达式等。
SmartNotebook:革新SQL的组织方式,加速数据科学进程
SmartNotebook:革新SQL的组织方式,加速数据科学进程
SmartNotebook:革新SQL的组织方式,加速数据科学进程

特点3:SQL方式操作DataFrame 数据集(dfSQL)

任何DataFrame数据集都可以dfSQL以SQL语法进行查询、变换、统计和过滤等操作,包括notebook内前面SQL单元格的数据集结果。目前dfSQL 仅限于支持select 操作,暂不支持update、delete等操作。

  1. dfSQL支持对DataFrame数据集的select相关操作,支持sqlite3 语法和统计函数。

a) 插入SQL单元格,数据源选择dfSQL。注:dfSQL的数据源是内置的,不需要单独配置。

b) 定义输出结果数据集变量的名称

c) 编写SQL并执行

SmartNotebook:革新SQL的组织方式,加速数据科学进程
  1. dfSQL 也同样支持动态dfSQL:支持jinjia2 表达式模板,可以引用python 中变量进行变量替换,支持if 表达式进行逻辑判断、for 循环表达式等。
SmartNotebook:革新SQL的组织方式,加速数据科学进程
  1. dfSQL 直接操作csv文件,可以直接基于csv数据文件进行统计汇总等分析。
SmartNotebook:革新SQL的组织方式,加速数据科学进程

特点4:全新SQL组织方式、CTE支持:链式SQL

链式SQL是SNB中的一种优雅、高效且易于调试的工作流。它允许在SQL查询的from子句中引用notebook内同一数据源中的其他SQL查询,从而将复杂的SQL查询分解为短小、高效的SQL单元格。通过链式SQL,我们可以将复杂的嵌套查询转化为简单的链式CTE(Common Table Expression)查询SQL,使代码更加简洁、易于调试、复用及高效。快来尝试链式SQL,让你的SQL查询变得更加优雅!

写过SQL小伙伴,可能对SQL嵌套比较熟悉,复杂的可能要嵌套3-5层,又要联合join等,SQL变得比较复杂,一个SQL语句有些达到几十行或上百行。这些嵌套的复杂SQL造成编写实现困难、维护困难。目前主流的数据库或数据仓库都支持CTE(common table expressions/通用表表达式),将嵌套查询的子查询使用with 定义派生表,可以更好组织代码,同时复用这些派生表提高计算效率。

我们看下面这个简单的嵌套查询的逻辑及使用CTE 的方式:

  1. 嵌套方式:
SmartNotebook:革新SQL的组织方式,加速数据科学进程
  1. CTE 方式:将嵌套查询拆解为两个with 派生表方式,进行重新组织,可读性大大提高;如下:
SmartNotebook:革新SQL的组织方式,加速数据科学进程
  1. 链式SQL 方式:为了更好地处理可能不断增长的嵌套查询,也为更好组织CTE,smartnotebook支持多个SQL单元格链式引用:每个SQL单元格都有输出变量名或称为SQL表达式名称,其他SQL单元格可以通过表达式名称进行引用查询,就像表一样。通过链式SQL单元格可以更好进行组织分析过程,让SQL变得更优雅、易于调试、复用及高效。下面示例参考如下(为了更好理解链式sql过程,我们将调试打开:__SNB_DEBUG__=True):
SmartNotebook:革新SQL的组织方式,加速数据科学进程
SmartNotebook:革新SQL的组织方式,加速数据科学进程
SmartNotebook:革新SQL的组织方式,加速数据科学进程
补充:筛选每个学校的前三名的SQL 是引用total_rank ,而total_rank引用 total_score,引用过程是链式的,所有命名为链式SQL。通过SQL单元格引用关系,后台逻辑自动转化为with CTE 语句。每个SQL单元格独立进行编写、调试。通过链式SQL 将复杂的嵌套查询或CTE 语句拆解为独立单元格或SQL。下面是一个完整的链式SQL流程图:
SmartNotebook:革新SQL的组织方式,加速数据科学进程

继续阅读