取消
搜索历史
热搜词
原创
活动
转型理念
ENI专访
当前位置:首页 >文章发布 > 正文
数据管理基础:从结构化到数据湖
来源:数据驱动智能  作者: 晓晓 2024-06-04 09:56:02
在数据上下文中,了解结构化数据和非结构化数据之间的区别至关重要。前者是指具有特定和定义格式的数据类型,例如数据库表,其中表中的每个字段都包含特定类型的数据(字符串、整数等)。

如今,正确有效的数据管理至关重要,因为数据中蕴含着宝贵的信息。在本文中,我们将讨论数据管理的一些基础知识,从结构化数据和非结构化数据之间的差异到 OLAP 和OLTP之间的差异。此外,我们还将讨论 ETL/ELT、数据湖和数据仓库等关键概念。

一 结构化数据与非结构化数据

在数据上下文中,了解结构化数据和非结构化数据之间的区别至关重要。前者是指具有特定和定义格式的数据类型,例如数据库表,其中表中的每个字段都包含特定类型的数据(字符串、整数等)。

另一方面,非结构化数据是一种不遵循先前定义的模式的数据类型,但它很灵活,因此难以在表或数据库内组织,例如电子邮件、音频或视频文件等。

图片

图 1. 结构化数据与非结构化数据的示例

如今,这两种类型的数据都发挥着非常重要的作用,并且各有优缺点。 其中一些是:

图片

表 1.结构化和非结构化数据的比较

此示例说明了结构化数据和非结构化数据之间的区别。结构化数据按定义的字段组织,而非结构化数据则是纯文本,可能需要进行额外分析才能提取相关信息。

导入csv

# 从 CSV 文件加载结构化数据

with open ( 'clients.csv' , mode= 'r' ) as csv_file:

csv_reader = csv.DictReader(csv_file)

for row in csv_reader:

first_name = row[ 'first_name' ]

last_name = row[ 'last_name' ]

age = row[ 'age' ]

email = row[ 'email' ]

print ( "First name:" , first_name)

print ( "Last name:" , last_name)

print ( "Age:" , age)

print ( "Email:" , email)

# 输出结构化数据:

# First name: John

# Last name: Doe

# Age: 35

# Email: john.doe@example.com

# …

# 从 txt 文件加载非结构化数据(客户评论)

with open ( 'customer_views.txt' , mode= 'r' ) as txt_file:

意见 = txt_file.read().split( '\n\n' )

for i, opinion in enumerate (opinions, 1 ):

print ( f"Opinion {i} :" )

# 非结构化数据输出:

# 意见 1:今天我在你的商店度过了一段美妙的时光。工作人员非常友好和乐于助人。

# …

二、 数据仓库

数据仓库是一种以结构化和集中化的方式存储大量数据的系统。它们允许将来自不同来源的数据转换并集成到一个单一、连贯的地方,以便进行后续分析,从而获得见解并支持决策。

数据始终保持最新且可访问非常重要,为了提高数据质量,数据仓库通常需要清理和验证流程来提高质量和完整性。但不利的一面是,数据仓库的维护成本往往较高,因为它们必须满足上述几点。

除了数据仓库之外,数据架构中还有其他重要组件:

数据集市:这些是数据仓库的子集,旨在满足组织特定职能领域(例如销售或财务(部门))的分析需求,或者可以根据地理区域或产品线(分布式)创建。

Data Vault:

它是一个数据仓库设计模型,由三个组件组成:

中心:代表关键概念,例如客户,通常在具有唯一标识符(主键)的单个表中建模。

链接:表示中心之间的链接或关系,通常作为单独的表和外键。

卫星:表示中心或链接的描述属性,通常作为单独的表和外键。

这种设计有助于数据审计、数据沿袭和新数据集成,提供更大的灵活性和可扩展性。

三 、数据湖

数据湖是一个集中式数据存储库,允许以原始格式(即未经事先处理的数据)存储、管理和共享大量数据。这就是为什么数据湖不需要预定义的模式,而是可以以不同的格式(结构化、半结构化和非结构化数据)存储数据,甚至不知道它们将来会如何使用,而数据仓库则需要事先转换数据,以使其符合定义的模式。

数据湖的灵活性使其成为希望执行高级分析并发现传统系统预处理中可能被消除的有价值信息的组织的理想系统。此外,由于不强加僵化的结构,数据探索和分析是敏捷的,没有限制。

最后,集成来自不同来源和格式的数据的选项使数据湖成为一个集中且高度可扩展的地方,用于存储来自整个组织的原始数据,即,它们充当组织内不同团队和领域之间协作的交汇点,提高部门之间的协同作用以及基于可靠和全面数据的决策。

实施数据湖的最佳实践

数据湖的实施对于企业环境中数据管理和分析的成功至关重要。以下是一些有效和高效实施数据湖的最佳实践。

将数据湖划分为多个层(或区域)

为了改善数据湖中数据的组织和可访问性,建议将其分为多个层,每个层包含特定类型的数据并用于不同的目的。最常见的层是:

原始/青铜/贴源层:顾名思义,此层包含原始形式的数据,即从不同数据源接收的数据。此层包含未执行任何转换的数据,因此它充当数据提取的入口点。此外,此层中的数据永久存储(不可变)并作为历史记录。

一致/标准化层:通常,原始数据以不同的格式(例如 CSV、JSON 等)输入。此层将所有这些格式转换为标准格式,通常是 Parquet,这是一种针对处理大量数据进行优化的存储类型,以便我们获得一致且优化的数据以供进一步分析。

清洁/银/处理层:此层充当过滤器,因为在这里对数据进行转换(清洁、集成和合并),以获得模式和格式统一的层。此外,可以规范化数据并添加元数据以方便可追溯性和高效搜索。

表示层/黄金层/应用层:使用来自上一层的已清理数据,将业务规则应用于数据,以便最终用户(例如数据科学家或分析应用程序)可以使用这些数据。还可以应用转换来增强和丰富数据,例如通过应用聚合或摘要。

沙盒/探索层:此层可以选择性开发,因为它通常是原始层的副本,可以在其中读取和修改数据。从数据科学家的角度来看,这是一个有用的层,因为他们可以在不丢失任何信息(无转换)的情况下探索数据,并且具有很大的灵活性。除了作为可选层之外,如果需要,还可以构建多个此类层。

图片

图 2.数据湖层

创建文件夹结构

另一个好的做法是在数据湖中创建文件夹结构,以便可以有效地访问数据。根据组织的兴趣,可以通过多种方式实现此文件夹结构:

数据隔离:根据数据的来源、数据类型或业务单元对数据进行分离。它方便数据科学家访问数据,以便他们能够检索与其用例相关的数据。

访问控制:如果数据必须具有不同级别的权限,则使用访问控制,以便组织中并非所有用户都可以访问所有数据。在这种情况下,必须定义访问策略。

合规性要求:将敏感数据存储在不同的文件夹中可能很有趣,这样它们就有更严格的隐私和安全策略。

备份和灾难恢复:根据备份频率,可以有不同类型的文件夹。例如,有一个经常备份的文件夹,其中包含永远不会丢失的数据,或者相反,有一个从不备份的文件夹,因为它包含不需要存储的数据,因为这些数据可以重新生成。

实施审计和诚信控制

对于任何数据湖来说,设计一系列机制来保证数据在从一层传递到另一层时不会遭受更改至关重要。这些机制是:

数据审计:存储对数据所做的所有修改,以保证可追溯性。

完整性检查:通过一系列自动检查来验证整个转换过程中数据的一致性。例如,如果执行了格式转换,则必须验证源中存在的文件数量与目标中存在的文件数量是否相同,如果不是,则必须重新启动转换过程。

四 、OLAP 和 OLTP

OLAP(联机分析处理)和 OLTP(联机事务处理)都是允许与数据进行有效交互的两种数据处理系统,尽管它们都是为了满足特定且互补的需求而设计的,我们将在下面看到。

一方面,OLAP 是一种专注于快速高效分析大量数据的数据处理系统。它是一种旨在对多维数据集执行复杂查询的技术,这些数据集可能已从不同来源合并和/或聚合,并使用优化的存储和处理技术来确保快速响应时间。

它还提供进行比较分析、预测、趋势和分段分析的能力,并提供交互式工具来快速、不同粒度地探索数据,从而能够根据需要执行非常深入的分析(数据钻取)或更多的摘要(汇总)形式的分析。

因此,OLAP 可用于提取有关存储在数据仓库中的数据的有价值的信息,这些信息可用于支持战略决策。

另一方面,OLTP 是用于实时事务处理的数据处理系统。它是一种主要用于操作数据库系统的技术,其中存储各种日常交易,例如销售、订单、付款等。

这些系统经过优化,几乎可以无延迟地实时支持大量交易,此外还保证这些交易的完整性和并发性,即保证所有交易都将被执行,数据库始终保持一致并且可以并行执行多个交易。

因此,OLTP 有助于为实时交易提供可靠的环境,确保快速、安全和一致地执行数据插入、修改和删除操作。

图片

图 3. OLAP 和 OLTP

在以下示例中,我们可以看到 OLAP 和 OLTP 查询之间的区别。OLAP 查询通常用于分析目的,例如获取每月销售总额,而 OLTP 查询则侧重于单个记录和实时更新,例如销售后的库存缩水。

# OLAP 查询:按月分析销售额

olap_query = """

SELECT month, SUM(total_sale)

FROM sales_table

GROUP BY month;

"""

# OLTP 查询:库存更新

oltp_query = """

UPDATE inventory_table

SET amount = amount - 1

WHERE product_id = 'product_to_sell';

"""

五 、ETL/ELT

为了从数据中获取价值,必须根据需要对数据进行处理和调整。这通常涉及实施强大的流程来集成和处理数据,以便组织能够将原始数据转换为可操作且有价值的信息,从而有助于支持决策。

ETL 和 ELT 都是允许我们对数据进行处理的方法,但是,这两种方法之间的关键区别在于操作数据的操作的执行顺序。 ETL 方法按顺序对数据执行以下操作:

1提取(E).:提取阶段包括从不同来源获取数据,这些来源可以是数据库、应用程序、文件系统等。在此阶段,数据是原始的,即它们没有经过任何类型的处理,它们只是被存储了。

2转换(T).:转换阶段是对先前提取的数据执行所有必要的操作,以获得高质量且连贯的数据层。操作可能包括清理错误或重复的数据、格式转换、聚合等。

3.加载 (L):加载阶段包括加载已转换为数据库表或其他类型数据存储(如数据仓库)的所有数据。在此阶段进行数据结构化,并针对分析和后续查询进行优化。

对于 ELT 来说,操作顺序有所不同:

1.提取(E):从各种来源提取数据,如 ETL。

2加载(L).:数据不经转换直接存储。

3.转换(T):对存储的数据执行转换,可能涉及使用数据分析工具、复杂的 SQL 查询或高级分析过程。

图片

图 4. ETL 和 ELT 工作流程

正如我们所见,ETL 和 ELT 是类似的方法,但它们在执行转换的时间和方式上有所不同。让我们看看它们的一些优点和缺点:

图片

表 2.ETL 与 ELT

根据这些方法的性质,我们可以说 ETL 用于数据仓库,因为数据在加载之前进行转换以保持一致性和完整性,而 ELT 用于数据湖是有意义的,因为数据以原始形式存储并根据需要进行转换。

现在我们了解了这两种方法,让我们看一个可以说明根本区别的 Python 示例。

将pandas导入为pd

## ETL

# 步骤 1:提取数据

raw_data = pd.read_csv( 'sales_data.csv' )

# 步骤 2:转换数据

raw_data[ 'Date' ] = pd.to_datetime(raw_data[ 'Date' ])

perceived_data = raw_data.groupby(raw_data[ 'Date' ].dt.month). sum ()

# 步骤 3:加载数据

perceived_data.to_csv( 'sales_per_month.csv' )

import pandas as pd

## ELT

# 步骤 1:提取数据

raw_data = pd.read_csv( 'sales_data.csv' )

# 步骤 2:加载数据

data_lake = raw_data.copy() # 模拟数据湖,存储原始数据

# 步骤 3:转换数据(在数据仓库中)

data_lake[ 'Date' ] = pd.to_datetime(data_lake[ 'Date' ])

perceived_data = data_lake.groupby(data_lake[ 'Date' ].dt.month). sum ()

结论

在本文中,我们回顾了数据管理的基础知识,从结构化数据和非结构化数据的区别到数据仓库和数据湖等技术及其最佳实践。此外,我们还强调了 OLAP 和 OLTP 之间的区别,以及 ETL/ELT 流程的相关性和代码示例或应用这些知识的用例。

免责声明:本文系网络转载,版权归原作者所有。本文所用图片、文字如涉及作品版权问题,请联系删除!本文内容为原作者观点,并不代表本网站观点。
编辑:刘婧
活动 直播间  | CIO智行社

分享到微信 ×

打开微信,点击底部的“发现”,
使用“扫一扫”即可将网页分享至朋友圈。

Baidu
map