Python库:管理和操作Azure Data Factory服务

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:此Python库名为 azure_mgmt_datafactory ,版本0.9.0,它为Python开发人员提供管理和操作Azure Data Factory服务的能力。该库兼容Python 2和Python 3,适用于所有平台。该库包含预编译的Python扩展和C库,安装过程简单快捷。通过这个库,开发者可以创建数据工厂,定义数据集,创建链接服务,创建并监控管道,以及进行资源管理。该库遵循Azure SDK设计原则,提供一致的API接口,并采用异步编程模型来提高性能和响应性。 Python库 | azure_mgmt_datafactory-0.9.0-py2.py3-none-any.whl

1. azure_mgmt_datafactory库介绍

azure_mgmt_datafactory 是一个用于与 Azure Data Factory 服务交互的 Python 库。通过这个库,开发者可以实现对 Azure 数据工厂的管理,包括创建、更新、删除数据工厂服务以及管理数据管道。本章节将对 azure_mgmt_datafactory 库的基本概念、主要功能以及如何安装和配置该库进行详细介绍,为读者打下坚实的基础,以更好地掌握后续章节的内容。

首先,我们来看看如何安装 azure_mgmt_datafactory 库:

pip install azure-mgmt-datafactory

安装完成后,您可以通过以下方式导入库,并设置Azure的认证信息:

from azure.identity import DefaultAzureCredential
from azure.mgmt.datafactory import DataFactoryManagementClient

subscription_id = '<Your_Azure_Subscription_Id>'
resource_group = '<Your_Resource_Group>'
credential = DefaultAzureCredential()

client = DataFactoryManagementClient(credential, subscription_id)

通过这段代码,我们便建立了与Azure Data Factory的连接,接下来的内容中,我们将深入探讨如何利用这个库,进行更加复杂的操作。让我们进入下一章,了解Python版本兼容性的细节。

2. Python 2和Python 3兼容性

2.1 Python版本的兼容问题

2.1.1 Python 2和Python 3的主要差异

Python 2和Python 3是同一编程语言的两个主要版本,尽管它们共享许多相似之处,但在语法和标准库方面存在显著差异。以下是一些关键的区别点:

  1. 打印语句与打印函数 Python 2中, print 是一个语句,可以不使用括号直接调用。而在Python 3中, print 被改为了一个函数,必须使用括号。
  2. Unicode支持 Python 2默认使用ASCII作为字符串编码,而Python 3默认使用Unicode。这意味着在Python 3中,字符串默认是可变字符序列,而在Python 2中需要使用 u 前缀来创建Unicode字符串。
  3. 异常处理 在Python 2中,可以使用旧式的异常处理语法,例如 except Exception, e: 。而Python 3要求使用 except Exception as e: 的方式。
  4. 整数除法 Python 2中整数除法会向下取整,而在Python 3中,两个整数进行除法会得到浮点数结果,除非显式地进行整数除法操作(使用 // )。
  5. 迭代器与列表 Python 2的 range 函数返回一个列表,而Python 3中的 range 返回一个迭代器,从而优化了内存使用。
  6. 输入函数 Python 2有 raw_input() input() 两个函数,分别用于获取字符串和执行代码;Python 3中, input() 函数统一处理了输入,用户输入的任何内容都会被当作字符串处理。

2.1.2 如何在代码中实现兼容

当需要在Python 2和Python 3环境中运行相同的代码时,可以采用以下方法来实现兼容性:

  1. 使用六段位兼容性库 比如 __future__ 库,通过这个库可以使得Python 2代码兼容Python 3。例如,在Python 2代码中导入 __future__ 模块中的特性,可以使得 print 函数和整数除法的行为与Python 3一致。
  2. 使用第三方库如six或future 第三方库 six 提供了在两个版本之间平滑过渡的工具和函数。另一个库 future 则提供了直接从Python 2迁移到Python 3的工具。
  3. 代码审查和重构 使用工具如 2to3 自动将Python 2代码转换为Python 3代码,但需要注意检查和测试转换后的代码。
  4. 支持双版本的代码结构 可以通过条件判断来分别处理Python 2和Python 3的特定语法。例如,判断 sys.version_info 的值来决定使用哪种语法。

  5. 遵循PEP8和PEP263编码规范 PEP8是Python的编码风格指南,而PEP263定义了源代码文件的编码声明,确保文件正确处理不同版本的Python。

2.2 Pre-compiled Python packages(.whl)文件格式

2.2.1 .whl文件的结构和内容解析

.whl 文件是Python的预编译包格式,它们是PEP 427标准下的wheel包。这种文件格式的设计目的是提供一种快速和可靠的方式来安装预先构建的Python分发包。一个 .whl 文件主要包含以下结构:

  • Wheel文件头 包含wheel文件的基本信息,如分发包名称、版本、Python版本等。
  • 元数据文件 存储在 METADATA 文件中,包含分发包的详细信息,如作者、邮件、项目URL、分类、描述等。
  • 代码和资源文件 这些文件被压缩存储在 data 目录下,通常包含模块文件、脚本、资源文件等。
  • 依赖关系列表 RECORD 文件中,记录了分发包的所有文件列表以及文件的校验和,用于安装后验证文件的完整性。

2.2.2 如何使用和管理.whl文件

.whl 文件的使用和管理涉及到安装、验证和分发等步骤:

  1. 安装whl文件 使用 pip 命令行工具,指定文件名进行安装,例如: pip install package.whl
  2. 验证whl文件 查看wheel文件的内容,可以使用 unzip -l package.whl 命令列出文件内容,或者用 pip show package 查看分发包的信息。
  3. 管理依赖关系 当需要发布自己的Python包时,可以使用 wheel 库中的 bdist_wheel 命令来构建wheel包。需要在 setup.py 文件中配置 setup() 函数的相关参数。

  4. 依赖管理 管理wheel文件的依赖关系,可以通过 pip freeze 来导出当前环境中所有包的版本信息到 requirements.txt 文件中。

  5. 分发whl文件 将构建好的wheel包上传到PyPI或其他Python包索引中,让其他人能够通过 pip 安装你的包。上传前需要配置好 ~/.pypirc 文件,包含PyPI的认证信息。然后使用 twine 命令上传。

  6. 卸载whl文件 使用 pip uninstall package 命令来卸载已经安装的分发包。

2.2.3 示例:使用whl文件

安装whl文件 的步骤如下:

# 使用pip安装whl文件
pip install example-package-0.0.1-py3-none-any.whl

验证whl文件 内容的步骤如下:

# 列出wheel文件内容
unzip -l example-package-0.0.1-py3-none-any.whl

管理依赖关系 的步骤如下:

# 导出依赖到requirements.txt
pip freeze > requirements.txt

分发whl文件 的步骤如下:

# 使用twine上传到PyPI
twine upload dist/*

卸载whl文件 的步骤如下:

# 卸载已安装的包
pip uninstall example-package

通过这些示例,开发者可以有效地使用和管理 .whl 文件,简化Python包的分发和安装过程。

3. 与Azure Data Factory服务交互

3.1 创建数据工厂实例与配置

3.1.1 数据工厂实例的创建过程

在开始使用Azure Data Factory之前,首先需要创建一个数据工厂实例,这个过程涉及几个关键步骤。首先,在Azure门户中选择创建一个新的资源,搜索并选择“数据工厂”服务。点击“创建”按钮后,进入数据工厂的配置页面,这里需要输入数据工厂的基本信息,包括名称、订阅、资源组等。

在填写过程中,需要注意名称的全局唯一性,以及资源组的选择,因为资源组是管理Azure资源的逻辑容器。在创建过程中,可以设置数据工厂的区域位置,以保证数据处理的低延迟和高效性。此外,还可以设置数据工厂的版本,通常选择最新版本以获得最佳的特性和安全性。

创建实例的最后一步是配置数据工厂的链接服务、数据集和管道。在本章节稍后的内容中,我们将详细讨论这些组件的配置方法。创建完成后,数据工厂实例即被创建并部署在Azure中,接下来可以开始定义输入输出数据集以及创建数据管道。

3.1.2 数据工厂实例的配置方法

配置数据工厂实例涉及设置选项,以满足业务需求和优化数据处理流程。在Azure门户中,数据工厂的基本配置已经通过创建过程完成,但更细粒度的设置和优化需要通过Azure Data Factory的用户界面(UI)或编程方式进行。

在UI中,可以直接在数据工厂仪表板中选择“编辑”来进入配置模式。在这里,可以进行如下配置:

  • 监控与诊断设置 :配置如何监控数据工厂的活动和性能,包括日志收集和警报设置。
  • 安全设置 :配置数据工厂的安全性,包括身份验证方式、密钥管理等。
  • 集成运行时配置 :配置集成运行时,这是数据集成的关键组件,用于连接不同的数据源和数据存储。
  • 活动属性设置 :配置数据工厂中的各种活动属性,如数据转换、数据移动等。

对于高级配置,可以通过编写配置脚本或在Azure Data Factory的JSON模板编辑器中进行。例如,可以通过编辑链接服务JSON模板来配置数据库连接信息,或通过编辑数据集JSON模板来定义数据结构和存储位置。

// 示例JSON配置片段 - 数据集定义
{
    "name": "MyDataset",
    "properties": {
        "type": "AzureBlob",
        "linkedServiceName": {
            "referenceName": "StorageLinkedService",
            "type": "LinkedServiceReference"
        },
        "typeProperties": {
            "fileName": "@{dataset().path}",
            "folderPath": "@{dataset().folder}",
            "format": {
                "type": "TextFormat"
            }
        }
    }
}

如上JSON代码片段展示了如何定义一个Azure Blob存储的数据集,指定了数据类型、连接的服务以及数据格式。在配置数据工厂实例时,通常需要结合UI和编程方式进行,以便充分自定义和优化数据处理流程。

3.2 定义输入输出数据集

3.2.1 数据集类型和使用场景

Azure Data Factory支持多种类型的数据集,每种类型对应不同的数据源和服务。在选择数据集类型时,需要根据数据的存储位置、数据格式和数据处理需求来决定。下面是一些常用的数据集类型及其使用场景:

  • Azure Blob Storage :适合存储大规模的非结构化数据,如文本文件、图片等。通常用于数据备份、数据归档等场景。
  • Azure Data Lake Storage :适合处理大规模的数据分析工作负载。适用于机器学习、大数据处理等场景。
  • Azure SQL Database :适合需要结构化查询和事务处理的场景,如在线事务处理(OLTP)系统。
  • Azure Synapse Analytics :适用于数据仓库的场景,能够支持复杂的查询和大数据量的处理。

每种数据集类型都允许与不同数据存储和服务交互,使得数据工厂能够灵活地处理各种数据源。在实际操作中,数据工程师需要根据数据的性质和业务需求来选择合适的数据集类型。

3.2.2 数据集的定义和配置方法

定义数据集意味着告诉Azure Data Factory数据从哪里来、到哪里去以及数据的格式是什么。定义数据集涉及指定数据集的“type”属性,该属性决定了数据集代表的数据源类型,以及“linkedServiceName”属性,该属性指向已配置的链接服务。

此外,还需要定义“typeProperties”属性,该属性包含了数据的具体配置细节,比如文件路径、文件格式等。在Azure门户中,可以通过图形化界面选择数据集类型、配置数据路径和格式。也可以通过编写JSON模板来完成这些配置。

下面是一个JSON配置示例,展示了如何定义一个连接到Azure Blob Storage的文本文件数据集:

{
    "name": "MyTextDataset",
    "properties": {
        "type": "AzureBlob",
        "linkedServiceName": {
            "referenceName": "BlobStorageLinkedService",
            "type": "LinkedServiceReference"
        },
        "typeProperties": {
            "fileName": "input.txt",
            "folderPath": "raw/files/",
            "format": {
                "type": "TextFormat",
                "columnDelimiter": ",",
                "rowDelimiter": "\n",
                "encoding": "UTF8"
            }
        }
    }
}

在这个示例中,定义了一个名为“MyTextDataset”的数据集,它连接到了一个名为“BlobStorageLinkedService”的链接服务,并指定了文件路径、分隔符以及编码方式。通过这种方式,数据工程师可以定义各种不同的数据集,并将它们配置到数据处理流程中。

3.3 创建链接服务到数据存储和服务

3.3.1 链接服务的概念和作用

链接服务是Azure Data Factory中用于连接外部数据存储或服务的配置实体。它保存了连接到数据源或服务所需的信息,包括认证信息、服务器地址、数据库名等。链接服务是数据集成和数据迁移任务中的关键组件,因为它们提供了访问数据的逻辑连接。

链接服务允许数据工厂访问和集成来自不同来源的数据,例如本地数据库、云存储或在线服务。每个链接服务在Azure Data Factory中是唯一的,并且可以被多个数据集、管道和活动共享。

链接服务的设计使得数据工程师在构建数据集成管道时,无需将敏感信息或连接详情硬编码在管道定义中。此外,它们还支持动态重用连接字符串和其他敏感信息,这些信息存储在Azure Key Vault中,增加了安全性和灵活性。

3.3.2 链接服务的创建和配置方法

创建链接服务通常在Azure Data Factory的用户界面中进行。在“管理”选项卡下,选择“链接服务”,然后点击“新建”按钮开始创建。创建链接服务需要选择一个服务类型,并根据所选类型填写必要的信息。

例如,创建一个连接到Azure SQL Database的链接服务,需要提供数据库的服务器名称、数据库名称、用户名和密码等信息。创建完成后,链接服务将被添加到数据工厂的资源列表中,随时可以被引用。

// 示例JSON配置片段 - 链接服务定义
{
    "name": "AzureSqlDatabaseLinkedService",
    "properties": {
        "type": "AzureSqlDatabase",
        "typeProperties": {
            "connectionString": "Server=tcp:***,1433;Database=mydatabase;User ID=myuser@myserver;Password=<password>;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;"
        }
    }
}

上述JSON配置片段展示了如何通过编程方式定义一个Azure SQL Database的链接服务。在这个例子中,指定了数据库的连接字符串。通过这种方式,数据工程师可以灵活地创建各种类型的链接服务,以满足不同数据集成需求。

在创建链接服务之后,就可以在定义数据集时引用这个服务,建立数据源和数据工厂之间的连接。这一步骤是构建数据管道的重要前提,没有链接服务就无法实现数据的读取和写入。

在接下来的章节中,我们将详细介绍如何创建和管理数据处理管道,包括定义管道的执行逻辑以及如何触发和监控管道的执行状态。这将涉及到更深入的Azure Data Factory使用和配置知识。

4. 创建和管理数据处理管道

创建和管理数据处理管道是Azure Data Factory服务的核心功能之一。管道是数据工厂中一系列活动的集合,用于执行数据传输和数据转换任务。在本章中,我们将深入探讨如何创建和配置数据处理管道,以及如何触发和监控管道的执行状态。

4.1 创建和配置数据处理管道

4.1.1 数据处理管道的创建过程

数据处理管道的创建通常遵循以下步骤:

  1. 定义活动 :首先需要在管道中定义一个或多个活动。活动是执行数据处理任务的最小单元,如复制活动、映射数据流、Web活动等。
  2. 配置活动参数 :为每个活动设置必要的参数,如源数据集、目标数据集、数据转换逻辑等。
  3. 链接活动 :根据数据流程的需要,将活动链接起来。例如,在复制活动中,可以将源数据集配置为活动的输入,将目标数据集配置为活动的输出。
  4. 管道验证 :完成管道设计后,使用数据工厂提供的验证功能检查管道配置是否正确,是否包含任何潜在的错误。
  5. 发布管道 :验证无误后,将管道发布到Azure Data Factory服务,使其成为服务的一部分并能够执行。

4.1.2 数据处理管道的配置方法

配置管道时,可以采用Azure Portal、Azure PowerShell、Azure SDK等多种方式。在此,我们将通过Azure Portal展示配置过程的细节:

  1. 登录Azure Portal :打开Azure Portal并登录到您的Azure账户。
  2. 选择数据工厂实例 :在资源列表中找到您之前创建的数据工厂实例。
  3. 创建新管道 :在数据工厂页面中选择“编辑”以打开管道编辑器,并点击“+ 新建管道”按钮。
  4. 设计管道界面 :在管道编辑器中,您可以将所需的活动拖放到管道设计界面上,并通过属性窗口配置活动属性。
  5. 设置活动依赖 :通过拖动活动之间的箭头,可以设置活动之间的依赖关系。
  6. 配置活动参数 :双击活动以打开配置窗口,在其中详细设置活动参数。
  7. 保存和发布管道 :完成管道配置后,点击“保存”按钮,并通过“发布”选项将管道发布到数据工厂服务中。

4.2 触发和监控管道执行状态

4.2.1 触发管道执行的方法

一旦管道发布到Azure Data Factory服务后,您可以通过以下方式触发管道的执行:

  1. 手动触发 :通过Azure Portal或Azure PowerShell等工具手动执行管道。
  2. 事件触发 :设置事件(如存储事件、计时器事件)来自动触发管道。
  3. 依赖触发 :创建依赖关系,使得一个管道的执行会触发另一个管道的执行。

4.2.2 监控管道执行状态的方法

为了确保管道的正确执行,需要对管道的执行状态进行实时监控:

  1. Azure Portal :在数据工厂实例的“监控”页面,您可以查看所有管道的执行历史记录和当前状态。
  2. 诊断日志 :启用诊断日志记录功能,记录管道执行过程中的详细信息,如活动运行情况、错误消息等。
  3. 通知和报警 :设置通知和报警机制,如电子邮件通知、短信报警等,以确保关键事件能够及时通知到相关责任人。

代码块示例

以下是一个简单的Python脚本示例,该脚本使用 azure-mgmt-datafactory 库手动触发管道并监控其执行状态:

from azure.identity import DefaultAzureCredential
from azure.mgmt.datafactory import DataFactoryManagementClient
from azure.mgmt.datafactory.models import PipelineRun

# 设置凭证和数据工厂客户端
credential = DefaultAzureCredential()
subscription_id = '你的Azure订阅ID'
resource_group_name = '资源组名称'
factory_name = '数据工厂名称'
client = DataFactoryManagementClient(credential, subscription_id)

# 触发管道
pipeline_name = '管道名称'
pipeline_run = client.pipelines.create_run(
    resource_group_name, factory_name, pipeline_name
)

# 监控管道执行状态
run_id = pipeline_run.run_id
while True:
    pipeline_run = client.pipeline_runs.get(
        resource_group_name, factory_name, run_id
    )
    if pipeline_run.status == 'InProgress':
        print("管道执行中...")
        time.sleep(5)
    else:
        print(f"管道执行完成。状态: {pipeline_run.status}")
        break

代码逻辑逐行解读

  • 第1行 :从 azure.identity 库导入 DefaultAzureCredential 类,用于认证Azure服务。
  • 第2行 :从 azure.mgmt.datafactory 库导入 DataFactoryManagementClient 类。
  • 第3行 :导入 PipelineRun 模型,用于表示管道运行实例。
  • 第5-6行 :设置Azure服务的凭证和订阅ID。
  • 第7-8行 :设置资源组名称和数据工厂实例名称。
  • 第9行 :创建一个数据工厂客户端实例。
  • 第11-15行 :使用 pipelines.create_run 方法触发指定管道的执行,并等待响应结果。
  • 第18-32行 :通过一个循环,使用 pipeline_runs.get 方法持续检查管道的执行状态。如果管道仍在执行中,则等待5秒钟后继续检查;如果管道执行完成,则打印执行结果并退出循环。

通过上述章节内容,我们已经完成了数据处理管道的创建和配置,并探讨了触发和监控管道执行的方法。为了提高数据处理的效率和可靠性,了解如何使用Azure Data Factory的各种功能是至关重要的。在下一章中,我们将进一步讨论资源管理与API接口设计的相关内容。

5. 资源管理与API接口设计

在这一章节中,我们将深入探讨Azure Data Factory的资源管理细节以及如何通过API接口与服务进行交互。资源管理是确保数据工厂高效运行的关键,而API接口设计则是使开发者能够以标准和一致的方式与服务交互的基础。

5.1 资源管理:更新、删除和查询操作

Azure Data Factory中涉及的各种资源,如数据工厂实例、数据集、管道等,都需要定期进行管理,包括更新、删除和查询操作。这些操作对于资源维护和管理至关重要。

5.1.1 更新资源的方法

更新操作通常涉及资源的配置更改,例如修改管道的活动类型、更新数据集的连接字符串等。在Azure SDK中,这可以通过以下方式实现:

``` mon.credentials import ServicePrincipalCredentials from azure.mgmt.datafactory import DataFactoryManagementClient

credentials = ServicePrincipalCredentials( client_id='你的客户端ID', secret='你的密钥', tenant='你的租户ID' )

subscription_id = '你的订阅ID' resource_group_name = '你的资源组' factory_name = '你的数据工厂名'

client = DataFactoryManagementClient(credentials, subscription_id) factory = client.factories.get(resource_group_name, factory_name)

更新资源的示例代码

factory.location = '新的位置' factory.tags = {'key':'value'} # 添加标签

updated_factory = client.factories.create_or_update( resource_group_name, factory_name, factory ) print("资源更新成功")


### 5.1.2 删除资源的方法

删除资源是一个不可逆的操作,因此在执行删除之前,确保已经做好了充分的备份和数据迁移工作是必要的。下面是一个删除数据工厂实例的示例:

```python
client.factories.delete(resource_group_name, factory_name)
print("资源删除成功")

5.1.3 查询资源的方法

对于大多数情况,了解资源的状态和配置是非常重要的。以下是如何查询资源信息的示例:

resource_list = list(client.factories.list_by_resource_group(resource_group_name))
print(f"资源数量: {len(resource_list)}")
for resource in resource_list:
    print(f"资源名称: {resource.name}, 位置: {resource.location}")

5.2 遵循Azure SDK设计原则的API接口

5.2.1 Azure SDK设计原则概述

Azure SDK设计原则包括一致性、效率、可靠性、透明性等,旨在为开发者提供简单、直观且安全的API接口。这些原则确保了不同服务之间接口的统一性,让开发者可以快速上手新的服务。

5.2.2 遵循设计原则的API接口使用方法

例如,当你想要执行一个异步操作,可以使用 begin_create_or_update 方法,该方法符合异步编程模式。

from azure.mgmt.datafactory.models import ExposureControlRequest

operation = client.factories.begin_create_or_update(
    resource_group_name,
    factory_name,
    factory
)

# 异步操作,等待操作完成
factory = operation.result()

5.3 异步编程模型的性能和响应性

5.3.1 异步编程模型的基本概念

异步编程允许程序在等待耗时操作(如网络请求)完成时继续执行其他任务,提高了程序的整体性能和响应性。Python中的 asyncio 模块提供了一种编写异步代码的方式。

5.3.2 异步编程模型的优势和应用场景

在处理I/O密集型任务时,异步编程模型尤其有效。例如,在更新或创建资源时,这些操作通常涉及与Azure服务进行网络交互,使用异步模型可以显著提高效率。

5.3.3 提高性能和响应性的策略

为提高性能和响应性,可以采用如下策略:

  • 批处理 : 对于多个小型异步任务,合并为一个较大的任务可以减少网络请求的开销。
  • 优化资源 : 确保使用的资源(如数据库连接、文件句柄等)在不再需要时立即释放。
  • 监控 : 使用应用程序性能监控(APM)工具,如Azure Monitor,来跟踪资源的使用和潜在的性能瓶颈。

通过这些策略,开发者可以确保应用程序能够高效地处理请求,即使在面对高并发的情况下也能保持良好的响应性。

以上章节介绍了Azure Data Factory的资源管理和API接口设计的核心概念和实践方法。这些知识对于管理Azure云服务以及开发高效的应用程序至关重要。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:此Python库名为 azure_mgmt_datafactory ,版本0.9.0,它为Python开发人员提供管理和操作Azure Data Factory服务的能力。该库兼容Python 2和Python 3,适用于所有平台。该库包含预编译的Python扩展和C库,安装过程简单快捷。通过这个库,开发者可以创建数据工厂,定义数据集,创建链接服务,创建并监控管道,以及进行资源管理。该库遵循Azure SDK设计原则,提供一致的API接口,并采用异步编程模型来提高性能和响应性。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值