我想了解如何将查询语言分解为最高级别的分组,以及为什么一个分组可能与另一个分组根本不同。例如,我现在提出的分组(用于通用用途)是:
- 关系
示例:SQL - 文档
示例:XQuery、JSONPath、MQL (mongoDB) - 图表
示例:Cypher (Neo4j) - 其他可能性(?)
数据框/熊猫?多维(MDX)?
描述各种查询语言的最佳高级分组可能是什么?
我想了解如何将查询语言分解为最高级别的分组,以及为什么一个分组可能与另一个分组根本不同。例如,我现在提出的分组(用于通用用途)是:
描述各种查询语言的最佳高级分组可能是什么?
一种变体是根据数据库类别对查询语言进行分组。
到目前为止,一切都很好,但实际上类别之间的界限越来越细。
例如,我们在 Microsoft SQL Server 和 T-SQL 中有图形支持,我们有如下语法:
-- 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 中,我们也有使用图形查找的图形:
{
$graphLookup: {
from: <collection>,
startWith: <expression>,
connectFromField: <string>,
connectToField: <string>,
as: <string>,
maxDepth: <number>,
depthField: <string>,
restrictSearchWithMatch: <document>
}
}
因此,最高级别的分组可能只是一组遵循美国国家标准协会 (ANSI) 标准(关系和对象关系)等的数据库管理系统。
我将尝试从分析的角度回答这个问题。
SQL是最常用的函数式编程语言之一,用于处理表之间的关系。
GROUP BY
子句来总结我们的数据;分析员汇总销售、利润、成本、工资等数据的重要组成部分。数据汇总对于分析师创建可视化、总结发现和撰写报告非常有帮助。在 SQL 中,GROUP BY 子句是汇总或聚合数据系列的工具之一。例如,将每日销售额汇总并合并到一个季度中,并显示给高级管理人员。同样,如果要统计公司每个部门有多少员工。它根据一列或多列对数据库进行分组并聚合结果。Avinash Navlani 在 SQL 中的 GROUP BY 和 HAVING子句
更多细节:
SQL中的分组用于在某些功能的帮助下将相同的数据分组。即,如果特定列在不同行中具有相同的值,则它将这些行排列在一个组中。(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 中的Grouping时,我们不得不提到处理多个文档时的聚合过程。
GROUPing
in table和Document和有什么不一样?这个问题必须有3个答案是: (3)
1-您使用什么样的数据?
2- 你想做什么类型的过程?
3-您的数据可扩展性是什么?
grouping
示例:密码 (4)
Cypher 就像SQL一样,是一种声明性的文本查询语言,但用于图形。
它由子句、关键字和表达式(如谓词和函数)组成,其中许多是熟悉的(如
WHERE
、ORDER BY
、SKIP LIMIT
、AND
、p.unitPrice > 10
)。
与SQL不同,Cypher是关于表达图形模式的。
Cypher中的分组专注于数据的虚拟化方面,为您提供全局。但是,它在处理方面没有用。在大数据方面,它不会像关系表那样非常有效,但另一方面,数据将被虚拟化。
Grouping-with-high-level,不推荐使用密码。
示例:数据框/熊猫
Python是一种用于进行数据分析的出色语言,主要是因为以数据为中心的 Python 包的奇妙生态系统。Pandas 就是其中之一,它使导入和分析数据变得更加容易。
Pandas
dataframe.groupby()
函数用于根据某些标准将数据分组。pandas 对象可以在它们的任何轴上分割。分组的抽象定义是提供标签到组名的映射。(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
方面与我们上面提到的其他方法进行比较,Python pandas肯定会是绿卡。
的可扩展性pandas
是巨大的!
与任何函数式编程相比,轻量级。
它完全适合大量数据。
最后,这些方法中的每一种都取决于我之前提到的三件事:
你使用什么样的数据。
你想做什么类型的过程。
您的数据可扩展性如何。
参考资料已附加到每个部分以供查阅。
在最高级别,您可以问,数据库到底是什么。是每一种形式的累积数据吗?大多数人都同意数据库是以某种方式组织或结构化的数据分类。
您可以区分数据湖、数据保险库和数据仓库。数据湖是存储在一个或多个数据库中的一组不均匀的数据。目的是快速存储大量信息。但是,数据不是预先结构化的。因此,搜索或分析可能需要更长的时间。数据保险库由多个数据库或数据库模式组成,每个数据库或数据库模式都包含特定值、用途或类型的数据。这在设置保管库时需要大量的初始工作,但在分析数据时非常有效。它还可以并行处理大量信息,通常与云计算一起使用。如果您想根据某些标签、过滤器或主题快速访问数据,那么这就是您要走的路。最后,
数据库本身主要可以分为关系/非关系或顺序/非顺序。关系数据库遵循每个表或实体应该/可以以某种方式链接或连接到任何其他表或实体的目标。这使得查看各个条目之间的关系或依赖关系变得容易。此外,搜索、过滤或调试数据变得更加容易。然而,跟踪所有关系需要付出很多努力,而且数据库管理员或开发人员通常在编辑代码或文档时很难考虑所有组合和链接。此外,关系数据库使用复杂的数据库管理系统 (DBMS),其中包含一些繁重的代数。关系数据库例如是 Oracle、PostgreSQL、MySQL。它们都依赖于结构化查询语言 (SQL)。稍有不同,它们都使用相同的基本命令来更改、编辑、搜索或写入数据。还有更多的子类别,如类型关系、对象关系等,但差异相当微不足道。
非关系数据库不太复杂,更易于维护,并且它们对逻辑或数学错误的敏感性不如关系数据库。但它们对于大量数据或用于数据挖掘、快速搜索或个人信息存储等目的可能不太有用。数据大多以不同数据类型的形式存储。它们可以包含用户、预订、各种形状和形式的文档,而不是严格遵守表格行的概念。这些数据库的最大弱点是它们缺乏“智能连接”。由于文档之间不存在链接,特定查询或搜索工作可能需要很长时间。此外,软件系统不太可能立即检测到重复输入、丢失输入或错误。非关系数据库可以细分为键值对类型,广泛的行表、文档存储、搜索引擎库或图形/图像数据库。示例包括 Neo4J、Datastax Enterprise Graph、一些 NoSQL 基础,如 Couchbase 和 MongoDB 或 Scyalla 和 Cassandra。正如您可能猜到的那样,他们不使用 SQL,而是使用 NoSQL。您可以轻松快速地获取数据,但缓慢地获取数据,有时还会出现复杂情况。
因此,为了具体回答您的问题,关系和非关系是两种(唯一)大的和官方的类型(我所说的大是指数据处理中的严重数学差异)。因此,SQL 和 NoSQL 是差异巨大的最大查询语言。文档、图形等只是通常与 NoSQL 数据库相关联的数据结构形式,但它们不是单独的语言或基础类型!同样,数据库的形式(如对称、雪花、树、星等)只是描述其基本层次结构或结构的一种方式。它们也不形成自己的类别……数据框、数据湖和数据保险库(最终是数据仓库)由许多数据库组成,可以是关系型、非关系型或两者兼而有之!
我想澄清一下,它归结为关系和非关系。尤其是在数据库方面,我听到很多废话,而且人们在细节之间存在差异,他们混淆了表格、形状、语言、数据库名称等等。Document、MongoDB 或雪花既不是语言也不是数学模型。
PS:如果您想了解更多信息,我会添加一些链接。
https://www.oracle.com/database/what-is-a-relational-database/
https://www.pluralsight.com/blog/software-development/relational-vs-non-relational-databases
你可能已经有了答案……
我的意思是这个分组也是我能想到的。
我没有使用过图形数据库,但是在另外两个中,Relational 和 NoSql,SQL 或关系语言,顾名思义,用于查询多种类型的关系,这是它的显着特点,它们也有固定的模式。
在基于 Document 或 NoSQL 的情况下,显着的特点是 schema 非常灵活,通常相关数据也存储在同一个 doc 中。
图表,我对它们知之甚少。但据我所知,它们只是具有查询关系能力的 NoSQL。结合了 RBDMS 和非 RBDMS (NoSQL) 的显着特征。
数据帧通常用于数据处理中需要的快速操作。它们是内存数据存储。他们没有能力自己获取关系。我们必须从头开始对它们执行操作。