查询分组

Groupings of queries

我想了解最高级别的查询语言分组可能是什么,以及为什么一个分组可能与另一个分组根本不同。例如,我现在想出的分组(用于一般用途)是:

  1. 关系
    示例:SQL
  2. 文档
    示例:XQuery、JSONPath、MQL (mongoDB)
  3. 图表
    示例:Cypher (Neo4j)
  4. 其他可能性 (?)
    Dataframe/pandas?多维 (MDX)?

描述各种查询语言的最佳高级分组是什么?

你可能已经有了答案...

我是说这个分组也是我能想到的

我没有用过图数据库,但是另外两个,Relational和NoSql,SQL或者关系语言,顾名思义就是用来查询多种类型的关系,这是它的特色功能,它们也有固定的模式。

在Document-based或NoSQL的情况下,其显着特点是架构非常灵活,而且通常相关数据存储在同一个文档中。

图,我对他们知之甚少。但据我所知,他们只是没有SQL 具有查询关系的能力。结合RBDMS和non-RBDMS(NoSQL).

的鲜明特点

数据帧通常用于数据处理中需要的快速操作。它们是 in-memory 个数据存储。他们没有能力自己获取关系。我们必须从头开始对它们进行操作。

I will try to answer this question from analytics perspective.

关系数据库 (DBMS):

SQL is one of the most common Functional Programming Languages that has been used to deal with the relationship between tables.

  • 根据 数据分析,我们使用 GROUP BY 子句来总结我们的数据;

An important component for Analyst to summarize the data such as sales, profit, cost, and salary. Data Summarization is very helpful for the Analyst to create a visualization, conclude findings, and report writing. In SQL, GROUP BY Clause is one of the tools to summarize or aggregate the data series. For example, sum up the daily sales and combine in a single quarter and show it to senior management. Similarly, if you want to count how many employees in each department of the company. It groups the databases based on one or more column and aggregates the results., GROUP BY and HAVING Clause in SQL by Avinash Navlani

更多详情:

Grouping in SQL is used to arrange identical data into groups with the help of some functions. i.e if a particular column has the same values in different rows then it will arrange these rows in a group.(1)

简单语法

SELECT column1, function_name(column2)
FROM table_name
WHERE condition
GROUP BY column1, column2
ORDER BY column1, column2;
function_name: Name of the function used for example, SUM() , AVG().
table_name: Name of the table.
condition: Condition used.

文件

  • 我们这里的例子是关于MongoDB.

When we're talking about Grouping in MongoDB, we've to mention the aggregation process when we're dealing with multiple documents.

  • 聚合操作处理数据记录和return计算结果。聚合操作将来自多个文档的值分组在一起,并且可以对分组数据执行各种操作以 return 一个结果。在 SQL 中,count(*) 和 group by 等同于 MongoDB 聚合。 (2)

table文档中的GROUPing有什么区别?

  • 这道题必须有3个关键点来回答是: (3)

    1- 您使用的是哪种数据?

    • 如果您使用的是连接的数据,您可以使用的最佳方法是 SQL.

    2- 你想做什么类型的过程?

    • SQL 数据库 更适合 multi-row 事务,NoSQL 更适合非结构化数据,如文档或 JSON.

    3- 您的数据可扩展性如何?

    • SQL 数据库 是垂直可扩展的,否SQL 数据库 是水平可扩展的。也就是说High-level-GroupingSQL是重卡,in-depth grouping 除了在 规范化 .
    • 中更灵活

图表

示例Cypher (4)

Cypher is like SQL a declarative, textual query language, but for graphs.

It consists of clauses, keywords and expressions like predicates and functions, many of which will be familiar (like WHERE, ORDER BY, SKIP LIMIT, AND, p.unitPrice > 10).

  • SQL不同,Cypher完全是关于表达图形模式。

  • Grouping in Cypher 专注于 Virtualization 方面数据给你big-picture。但是,它在 processing 方面没有用。在大数据方面,它不会像Relational Tables那样非常高效,但另一方面,数据将被虚拟化。

  • Grouping-with-high-level,不推荐使用cypher


其他可能性

示例Dataframe/pandas

Python is a great language for doing data analysis, primarily because of the fantastic ecosystem of data-centric python packages. Pandas is one of those packages and makes importing and analyzing data much easier.

Pandas dataframe.groupby() function is used to split the data into groups based on some criteria. pandas objects can be split on any of their axes. The abstract definition of grouping is to provide a mapping of labels to group names.(5)

语法

Syntax: DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, **kwargs)
Parameters :

by: mapping, function, str, or iterable

axis: int, default 0

level: If the axis is a MultiIndex (hierarchical), group by a particular level or levels

as_index: For aggregated output, return an object with group labels as the index. Only relevant for DataFrame input. as_index=False is effective “SQL-style” grouped output

sort: Sort group keys. Get better performance by turning this off. Note this does not influence the order of observations within each group. groupby preserves the order of rows within each group.

group_keys: When calling apply, add group keys to an index to identify pieces

squeeze: Reduce the dimensionality of the return type if possible, otherwise return a consistent type

Returns: GroupBy object
  • 如果我们将 pandas 和我们上面提到的其他方法在 数据分析Pythonpandas一定会绿卡的

    • pandas 的可扩展性是巨大的!

    • Light-weight 与任何函数式编程相比。

    • 非常适合大量数据。


结论

At the end, each one of these methods works depending on three things that I mentioned before:

  1. 你用的是什么数据。

  2. 你想做什么类型的过程。

  3. 您的数据可扩展性如何。


参考

References has been attached into each section to be reachable.

一种变体是根据数据库类别对查询语言进行分组。

  • 关系型(Microsoft SQL 服务器、Oracle、MySQL、MariaDB)
  • object-relational (PostgreSQL)
  • 没有SQL
    • Key-value(Riak、Redis、Couchbase 服务器、MemcacheDB)
    • 列式 (HBase)
    • 文档(MongoDV、CouchDB)
    • 图表 (Neo4j)

到目前为止一切顺利,但实际上类别之间的界限越来越细。

例如,我们在 Microsoft SQL Server 中支持图形,T-SQL 我们的语法类似于 following:

-- Find Restaurants that John's friends like
SELECT Restaurant.name 
FROM Person person1, Person person2, likes, friendOf, Restaurant
WHERE MATCH(person1-(friendOf)->person2-(likes)->Restaurant)
AND person1.name='John';

在 MongoDB 中,我们有 graph,也使用图形查找:

{
   $graphLookup: {
      from: <collection>,
      startWith: <expression>,
      connectFromField: <string>,
      connectToField: <string>,
      as: <string>,
      maxDepth: <number>,
      depthField: <string>,
      restrictSearchWithMatch: <document>
   }
}

因此,highest-level 分组可能只是一组遵循美国国家标准协会 (ANSI) 标准(关系和 object-relational)和其他标准的数据库管理系统。

在您可以问到的最高层次上,数据库到底是什么。是所有形式的累积数据吗?大多数人都认为数据库是以某种方式组织或结构化的数据分类。

您可以区分数据湖、数据仓库和数据仓库。数据湖是存储在一个或多个数据库中的一组非均匀数据。目的是快速存储大量信息。但是,数据不是pre-structured。因此,搜索或分析可能需要更长的时间。数据保险库由多个数据库或数据库模式组成,每个数据库或数据库模式都包含特定值、用途或类型的数据。这在设置 Vault 时需要大量的初始工作,但一旦涉及到分析数据,它就会非常有效。它还可以并行处理大量信息,经常与云计算一起使用。如果您想根据某些标签、过滤器或主题快速访问数据,那么这就是您要走的路。最后,数据仓库是由很多数据库组成的,可以说是一个超级数据库,这也是为什么它经常被看作是数据库管理的王道。

数据库本身主要可以分为relational/non-relational或sequential/non-sequential。 关系数据库遵循这样的目标,即每个 table 或实体 should/can 都以某种方式链接或连接到任何其他 table 或实体。这使得查看各个条目之间的关系或依赖性变得容易。此外,搜索、过滤或调试数据也变得更加容易。然而,跟踪所有关系需要付出很多努力,而且数据库管理员或开发人员在编辑代码或文档时通常很难考虑所有组合和链接。此外,关系数据库使用复杂的数据库管理系统 (DBMS),其中包含一些繁重的代数。关系数据库例如Oracle、PostgreSQL、MySQL。它们都依赖于结构化查询语言 (SQL)。除了细微差别,它们都使用相同的基本命令来更改、编辑、搜索或写入数据。还有sub-categories如type-relational、object-relational等,但差别不大。

Non-relational 数据库不那么复杂,更容易维护,而且它们不像关系数据库那样对逻辑或数学错误敏感。但它们对于大量数据或数据挖掘、快速搜索或个人信息存储等用途的用处不大。数据主要以不同数据类型的形式存储。与严格遵守 table-row 概念不同,它们可以包含用户、预订、各种形状和形式的文档。这些数据库的最大弱点是缺乏“智能连接”。由于 non-existant 文档之间的链接,特定查询或搜索工作可能需要很长时间。此外,软件系统不太可能立即检测到重复条目、遗漏条目或错误。 Non-relational 数据库可以 sub-categorized 分为 key-value-pair 类型、宽行 table、文档存储、搜索引擎库或 graph/image 数据库。示例包括 Neo4J、Datastax Enterprise Graph、一些 NoSQL 基础,如 Couchbase 和 MongoDB 或 Scyalla 和 Cassandra。您可能会猜到,他们不使用 SQL,而是使用 NoSQL。您可以轻松快速地输入数据,但输出速度缓慢,有时还很复杂。

因此,为了具体回答您的问题,关系型和 non-relational 是两种(唯一的)大型和官方类型(大型是指数据处理中的严重数学差异)。因此,SQL 和 NoSQL 是最大的查询语言,差异很大。文档、图形等只是通常与 NoSQL 数据库相关联的数据结构形式,但它们不是一种单独的语言或基础类型!同样,数据库的形式(例如对称、雪花、树、星等)只是描述其基本层次或结构的一种方式。他们也没有形成自己的类别...... 数据框、数据湖和数据仓库(最终是数据仓库)由许多数据库组成,可以是关系型的,non-relational 或两者的混合!

我想说清楚,归根结底是关系 non-relational。尤其是在数据库方面,我听到很多废话,人们在细节上有所不同,他们混淆了形式、形状、语言、数据库名称等等。 Document、MongoDB或snowflake既不是语言也不是数学模型。

PS:如果您想了解更多信息,我会添加一些链接。

https://www.oracle.com/database/what-is-a-relational-database/

https://www.pluralsight.com/blog/software-development/relational-vs-non-relational-databases

https://www.oracle.com/database/what-is-database.html

https://www.guru99.com/data-warehousing.html