是否有任何方法可以使用azure data factory将数据从azure data lake存储复制到azure analysis server中的数据库?
我正在尝试使用复制活动来执行相同的任务,但我不知道如何将Analysis Server数据库指定为输出数据集中的目标。对于不在data factory支持列表中的数据连接器,您可以编写自定义活动来访问数据
这是文件:
谢谢,
Charles对于不在data factory支持列表中的数据连接器,您可以编写自定义活动来访问数据
这是文件:
我正在运行一个管道,在该管道中,我将遍历INFORMATION.SCHEMA.tables中的所有表,并将其复制到Azure Data lake store。我的问题是,仅当任何表复制失败时,我如何为失败的表运行此管道
我发现最好的方法是将您的流程编码为:
0. Yes, root cause the failure and identify if it is something wrong with the pipeline or if it is a “feature” of your de
场景:azure数据流处理来自csv数据集的批量记录。为了在目标位置执行依赖作业,sql需要从该csv的多行中使用逗号分隔的ID。有人能帮我怎么做吗
尝试将派生列步骤与coalesce、concat函数一起使用,但未获得查找结果
使用collect()聚合函数。这将起到字符串agg的作用。上周刚刚发布
Hi Mark,collect是一个不错的选择,但是collect返回一个数组,我有时间找到解决方案,将其转换为逗号分隔的值以传递给存储过程。出于这个原因,我正在寻找其他解决方案。如果我的目标数
我正在创建一个数据工厂管道,将数据从RESTAPI端点复制到Azure Blob存储。API限制一次只能返回1000条记录,因此我在管道中构建了一个循环,循环遍历所有页面。我想知道的是,是否可以使用复制活动附加到Azure Blob中的同一个文件,而不是为每个页面创建单独的文件
下面是API响应的样子。我从每个响应中需要的唯一值是“记录”列表,因此我在想,如果可能的话,我可以去掉其他内容,并在循环运行时继续附加到同一个文件中——尽管我不知道复制活动是否能够做到这一点。这可能吗?或者,唯一的方法是
我在数据工厂内有一个数据流,带有一个ADLS gen 2接收器。基本上,我正在尝试将一些拼花地板文件从一个区域移动到另一个区域。当关于“优化”选项卡中选择的选项时,问题来了,我在流程末尾缺少了一些数据。其他人遇到过这种情况吗?拼花地板中的分区与数据流中的分区无关。分区是通过分割文件形成的。如果您想要相同数量的文件,您应该在源和接收器上使用“存储文件名的列”功能,并创建与源相同数量的文件。您能告诉我们有关您的问题的更多详细信息吗?发生了什么,你是如何设置数据流的?嗨,LeonYue。基本上,我从数
我有一个Azure数据流,它有一个非常简单的数据流,所花的时间比我预期的要长。该流从Azure Blob存储中获取JSON文件,添加一些新列,然后将其存储在Cosmos DB中(参见下图)
JSON文件非常小,大小从1-15kb不等,我目前在blob容器中有大约200k个文件
当我试图在管道中独自执行此数据流时,我让它运行了8个多小时,然后取消了该活动。然后,我将数据迁移到一个高级存储帐户,并重新运行该活动,认为SA可能是瓶颈。它已经运行了将近2个小时,我还没有看到任何插入到Cosmos数据库
我是Azure Data Factory的新手,遇到了一个问题,在我的ADF管道的“接收器”部分,如果我将“合并文件”指定为“复制行为”,我的输出文件名将被扭曲。如果不是这样的话,输出文件的名称将与输入文件的名称相同,现在输出文件的名称是“data\u后跟一些\u随机\u空格\u分隔的\u数字”。我怎样才能解决这个问题?提前感谢。是的,这是预期的行为。您需要知道此操作的含义,它可以将多个文件复制到一个文件中。如果要指定其名称,则应在设置复制行为时指定最终名称。我发现您提到了“失真”一词,所以我认
我是ADF&ARM的新手。我有一个空白的Data Factory-v2(TestDataFactory-123Test),我想使用现有的ADF(TestDataFactory-123)填充它。我一步一步地遵循官方文件中提到的内容。部署显示已成功,但我看不到其中的任何内容。我在门户中使用了“在编辑器中构建您自己的模板”选项来导入现有的ARM模板。我遗漏了什么吗
下面是我通过“导出”TestDataFactory-123的ARM获得的ARM:
{
"$schema": "http://schem
尝试创建参数化映射数据流时出错。更具体地说,我有以下错误。有人对如何修复它或错误可能是什么有建议吗
{ "Message": "ErrorCode=InvalidTemplate, ErrorMessage=Unable to parse expression 'body('DataFlowDebugExpressionResolver')?.Data Vault Loadb734571b6d5a414ea8387a08077f1ff1?.DataVaultSource.sourcetable'
我已经为我的Azure Data Factory管道每日测试创建了一个翻转窗口触发器,重复时间为24小时。对于这个管道,我添加了一个依赖触发器,比如说Test_Hourly(每小时运行一次),偏移量为1.00:00:00(1天)
即使依赖项触发器已成功运行,测试\u每日管道也未被触发。例如,如果每日管道WindowsStartTime为2020-09-20 00:00:00,并且WindowsStartTime 2020-09-21 00:00:00每小时测试一次已成功运行,则应触发每日管道。然
时间在源CSV文件中以HH:mm格式生成。但当它需要通过数据流在sink Azure SQL中的时间(7)列中进行复制时,它总是显示空值
我试图在最后计算:00.000000,但不起作用
任何帮助都将不胜感激 我通过在“派生列”中添加列模式来解决这个问题:$$-->concat('1900-01-01',$$,':00')
我仍然想知道是否有任何方法可以使用Azure data factory中的复制活动或数据流活动将数据从一个data lake文件夹复制到另一个data lake文件夹
假设,我的输入文件夹中有一个文件,上面写着input/employee.csv,该文件包含3月21日之前的数据,我已将该数据加载到输出文件夹output/employee.csv中的datalake中
现在,从下一次运行开始,我只想提取过去7天内修改过的数据。为此,我查询了源系统,在一个文件中获得了7天的数据,现在,我需要根据我的
我正在尝试使用SQL内部联接将prem server上的多个表中的数据拉到DocumentDB中的单个集合中。我是否需要为SQL数据库中的每个表创建数据集?如果我需要为每个表创建一个独立的数据集,我可以在管道中有多个输入吗
"inputs": [
{
"name": "SQLServerDataset-Table1"
},
{
我正在尝试创建一个高级计划触发器,如下所示:
我创建了一个非常简单的管道:
尝试手动运行,结果正常:
创建计划(每1分钟)触发器
打开该触发器的JSON并将其修改为:
{
“名称”:“测试”,
“财产”:{
“runtimeState”:“已启动”,
“管道”:[
{
“pipelineReference”:{
“referenceName”:“ForEachMetadata”,
“类型”:“PipelineReference”
}
}
],
“类型”:“ScheduleTrigger”,
我们在ADF中有一个复制活动,要求在失败时中止操作,发送带有错误消息的邮件,并将错误信息记录在blob存储中的文本文件中
直到发送带有错误消息的邮件,该任务是使用逻辑应用程序完成的。在我们的案例中,由于无法在ADF容错中完成跳过和记录,因此无法将错误信息存储在blob存储中。当复制活动的容错设置为“第一个不兼容行上的中止活动”时,我们是否可以使用ADF将错误信息记录在blob存储中的文本文件中
请告诉我,当容错为“第一个不兼容行上的中止活动”时,是否有任何方法在blob存储中记录错误信息。vic
有没有办法使用Azure Data Lake查找目录中最旧的文件
我假设我可以使用元数据活动获取所有文件名和日期(我可以)。然后,我想我可以使用forEach在管道中设置两个变量(Name和Date),如果列表中的值比变量的当前值旧,则使用它们。这不起作用,因为所有文件都是并行处理的。这真的不应该这么难。是的,Azure Data Factory中的ForEach活动默认情况下是并行工作的,但您可以通过选中Sequential选项更改为按顺序工作
更多详细信息,您可以参考。是的,Azure D
我有大量包含日志数据的blob,需要将它们复制到azure sql表中,并且会定期收到更多blob。blob的命名格式为[ORIGINALTARFILENAME].tar.gz.log
如何使用data factory,使其在不超时的情况下执行初始回填,然后将同一管道转换为按常规计划运行,从而不会对blob进行两次处理
它本质上是:
创建一次性流程
VS中的开放进程
修改json以包含某种计划
部署更改
这取决于数据的组织方式。Data Factory最适用于可以轻松划分为基于时间的切片的数据集
我在尝试使用Azure data Factory从Microsoft Dynamics Marketing OData源复制到Azure Blob存储时遇到以下错误。有人能指导我解决问题吗
不支持数据类型对象。详细信息:
ErrorCode=DataTypeNotSupported,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=Column:
名称、位置:源、格式:Csv/Tsv,数据类型对象
我有在Azure上的Blob存储中积累的文件,这些文件每小时都会通过data factory移动到ADL。。。每小时大约有1000个文件,每个文件有10到60kb
以下各项的最佳组合是什么:
"parallelCopies": ?
"cloudDataMovementUnits": ?
而且
"concurrency": ?
使用
目前,我将所有这些设置为10,每小时一片大约需要5分钟,这似乎很慢
ADL或Blob是否会受到限制,我如何判断呢?在优化复制活动时,不会有一个适合所有情况的解决方
我们希望使用Azure Data Factory读取XML文档,并能够将文档中的列映射到SQL Server表,以便将文档中包含的数据移动到SQL表。这在ADF中可能吗?请注意,基于XML,复制活动中的文件类型不受支持
我建议您投票支持另一位Azure客户提交的
负责构建Azure的Microsoft工程团队将监控和审查您在这些论坛中共享的所有反馈
作为解决办法,也许你可以从中得到一些线索
假定管道将几个表从prem SQL Server复制到ADLS拼花文件(在每个处理过程中删除和创建)。入口依赖于自托管集成运行时。配置期间的所有测试均成功(即成功检索表结构,连接测试均为绿色等)。但是,管道会生成以下执行错误:
活动复制\u DetailPricingLevelHierarchy失败:失败发生在“接收器”端。ErrorCode=UserErrorFailedFileOperation,'Type=Microsoft.DataTransfer.Common.Shared.Hybri
我正在为每个活动使用数据工厂。但是,子序列活动是按顺序运行的。即使是顺序也不能检查。让我们看看下面的屏幕。
你的子活动在做什么?我确实尝试了一个非常简单的测试,我认为它是预期的工作。请分享更多信息,我想在这方面进一步调查
这就是我试过的
创建了一个以数组为变量的管道,只需向其中添加四个元素,然后在foreach循环中使用Set variable activity打印值。我添加了一个等待活动以使其更可见。我将sequential设置为false,将batch count设置为2。
这就是我看到
我在尝试使用Polybase+启用暂存Blob存储将数据从Azure SQL拉入Azure DW数据库时收到此错误消息
此服务器上未启用托管服务标识。请启用托管服务标识并重试
我尝试创建一个托管标识用户,将其分配给web服务,并授予其权限,将此用户链接到在数据库中具有所有者权限的AAD组,但它不起作用
您的接收器、源和blob是否属于同一订阅?因为错误是关于SQDWH访问的,所以我认为您需要检查一下
一定要让我知道进展如何
我假设您在接收器端使用的身份验证类型=托管标识
我们需要给予ADF足够
我们不能更改活动依赖项的逻辑顺序(和/或)有点烦人。然而,我有另一个问题。我已经说过,我有一些关于在DB中记录错误消息失败的活动,因为记录活动成功了,所以整个管道也成功了!是否有任何变通方法可以说明,如果任何活动失败,那么整个管道和父管道(如果从另一个管道调用)都应该失败
在我的屏幕截图中,我选择了完成时依赖项来记录成功或错误
我看到您将复制活动的“成功时”定义为运行“usp\U后期执行”。请定义复制活动的“失败时”并添加任何活动(可能是用于测试的设置变量)并执行管道。管道将失败
只是为了给你更
无法在Azure数据工厂中将Dynamics 365添加为源,将公共数据服务(Data verse)添加为目标。请参考下面的屏幕截图,数据集已禁用,无法选择
是否遗漏了任何配置
Requirement正在使用Azure数据工厂将动态365数据推送到data verse web API
您没有遗漏任何配置。这是因为数据流不支持它们作为源/接收器。您可以参考和获取支持的连接器。如果图标为灰色,则表示数据流中不支持它们。请参考连接器概述。
我尝试使用数据流缓存查找来实现从SQL源到SQL目标的动态列映射。其思想是将映射持久化到元数据表上,作为源读取到数据流中,并作为缓存查找存储。看起来是这样的:
(键列设置为sourceField)
现在,我们只需要将此映射使用到基于规则的映射到选择转换中,以便选择仅映射的列并应用目标命名。表达式如下所示:
此配置将导致选择任务出现运行时错误:
你知道为什么吗?错误消息没有帮助
编辑:在完整脚本定义下面
parameters{
sourceSchema as string (&quo
我有一个Azure Data Factory Visual Studio项目,其中我正在使用Azure Data Lake链接服务。当我创建它们时,我必须首先对它们进行授权。但给定的授权将在特定时间段(以天为单位)后过期
我找不到重新授权链接服务的选项。我尝试从门户重新授权另一个链接服务,并将该授权用于在VS中创建的链接服务,但这不起作用
我必须删除并重新创建链接服务以获得新的授权
是否缺少此功能,或者是否有其他方法可以为VS中的Data Lake链接服务获取新授权?目前,Visual Stud
我想用ADF将遥测数据从Azure Blob存储加载到Azure DWH
Azure Blob存储帐户位于美国中部
Azure DWH位于美国中部
但ADF在美国西部和东部都可用
看起来我将有一个模式:
blob存储(美国中部)--->adf拷贝活动(美国西部)--->azure dwh(美国中部)
在上述情况下,我会对区域间的流量收费吗?
复制活动将在美国中部或西部的何处执行?
我已经看过下面的文件了
但我不能100%确定它们的真正含义:
此:blob存储(美国中部)-->adf复制活动(美
我正在尝试使用ARM模板部署数据工厂。使用导出的模板创建部署管道很容易
但是,由于数据工厂需要访问本地数据库服务器,因此我需要一个集成的运行时。问题是如何在arm模板中包含运行时
模板如下所示,我们可以看到它正在尝试包含运行时:
{
"name": "[concat(parameters('factoryName'), '/OnPremisesSqlServer')]",
"type": "Microsoft.DataFactory/factories/linkedService
环境和细节
Azure数据工厂
内部部署-IaaS服务器
Azure数据湖
场景
我已经开发了ADF管道并部署到azure数据工厂。作为管道的一部分,我有将近50个复制活动,从本地服务器复制数据,并以CSV格式将数据写入azure data lake
我有一个管道,其中有50个复制活动
所有活动在UTC时间上午12:00开始
问题
如何计算管道完成操作的总时间?不适用于单个切片
您可以使用PowerShell返回此信息。例如:
$SubId = Get-AzureSubscriptio
我计划将Azure Data factory用于ETL过程,我想知道Azure Data factory是否使用数据目录中捕获的元模型。请注意不,当前您无法在Azure Data Factory中直接重用存储在Azure Data Catalog中的元数据。您可以尝试重用一些元数据,通过restapi()检索数据资产,但我认为在Azure Data Factory中进行设置会更快。还要注意,数据工厂的主要重点是移动和编排。对于大数据转换,您将使用e。GDatabricks活动,用于“经典”ETL
我的实际用例更复杂(并且基于SCD Type 2模板管道),但在尝试调试错误时,我创建了以下格式的新简化数据流:
数据源(数据集是具有主键列和多个其他可空列的Azure SQL数据库表)
派生列(创建名为“NewRowStatus”的新列设置为文字字符串“Historic”)
更改行(单个条件“如果更新”设置为true(),因此所有行都将更新)
接收到我们开始使用的同一数据集,将“NewRowStatus”映射到“Row Status”数据库列,并将我的主键作为键列,从而允许更新
对于数据流中的
我用下面的表达式计算Sink转换中作为动态内容的“分区数”
toInteger (round( iif(toDecimal('5671478512', 38, 2) <= 104857600, toDecimal(1.00) , toDecimal('5671478512', 38, 2)/104857600) ) )
toInteger(圆形)(iif(toDecimal('5671478512',38,2)根据@Mark Kromer的评论分享答案。
不幸的是,“我们没有在分区数属性
我使用ADF管道将数据从数据湖复制到blob存储,然后复制到表存储。表存储有一列,其中包含整数值列:Age。尝试查询表存储中的数据时出错
https://myaccount.table.core.windows.net/Customers()?$filter=Age%20eq%2030 -> (age 30 is considered as integer)
输出为空
关于将查询更新为
https://myaccount.table.core.windows.net/Customers(
我正在Azure数据工厂中使用数据流。我有与数据库链接的源代码。我想导入模式。但它是空白的
但是,当我单击“数据预览”时,确实会看到包含所有列的数据。那么为什么会说“架构中不存在列”?很难找到错误的根本原因。它可能是一个错误或其他东西。我们也不能重复
我很高兴创建了一个新的数据流,一切正常
这就是解决方案,这对其他社区成员是有益的
如果有任何人有相同的经验,请提供任何建议。尝试刷新浏览器或更改浏览器,但仍报告此错误?@Joseph Xu是的,事实上是这样。我试着刷新它,但没有luck@Dine
我认为这个问题以前可能曾提过,但我未能找到一个明确或清晰的答案,以恰当地解决这一情况。考虑到这种操作的普遍性,我忍不住觉得必须有一种好的方法来做到这一点,而不需要复杂的层次
情景:
我有一个存储帐户容器,应用程序以不同的速率向其中发送数据文件。如果应用程序遇到需求,它可能会每分钟将数据文件推入该容器一次。如果应用程序不需要,数据文件可能每隔几分钟写入一个。在任何一种极端情况下,文件的元数据都是事实的来源:最新的文件,即我需要处理的文件,在元数据中具有最新的上次修改时间
我看到的“获取”最新文件的
我需要将一个巨大的数据集拆分为多个文件,每个文件的行数不得超过100000行。
我不知道数据流和条件拆分是否可行?如果您只想按固定数量的行进行拆分,我已经创建了一个简单的测试
在数据流中声明一个参数以存储源数据集的行数。如果源数据集是Azure sql,则可以使用查找活动获取最大行号。如果源数据集是Azure存储,则可以使用Azure函数活动获取最大行号。然后将值传递给参数。
在这里,为测试设置一个静态默认值。
然后我们可以设置分区数表达式$RowCount/10,如果您想要每个文件10
我已经使用复制数据向导创建了两个管道,但是当我单击图表操作时,这两个管道都没有显示出来。我得到的信息是“这个工厂不包含管道或数据集”。管道都成功运行,并且在单击管道时显示。两条管道都配置为一次。关于为什么会发生这种情况以及如何解决它,您有什么想法吗?Azure Data Factory的监视和管理视图当前没有显示“运行一次”(也称为一次性或仅一次)管道的图表,如下所示:
图表视图不显示一次性管道。这种行为是由
设计
如果确实想查看,请使用只有一个切片的计划重新配置。但是,您仍然可以通过单击窗格下
我注意到,通过azure门户在data factory中保存数据集定义时
“已发布”:错误
在定义中,我看到dataset的工作与发布的false很好。但也看到一些似乎只开始与出版:真的,但这可能是一个巧合
我找不到任何有关此属性的文档
{
"name": "DataLakeDummyXmlInput",
"properties": {
"published": false,
"type": "AzureDataLakeStore",
如Micr
我在使用Azure Data Factory V2运行U-SQL脚本时遇到了一个问题
此U-SQL脚本在门户或vs中运行良好:
@a =
SELECT * FROM
(VALUES
("Contoso", 1500.0, "2017-03-39"),
("Woodgrove", 2700.0, "2017-04-10")
) AS D( customer, amount );
@results =
SELECT
custo
我有一个额外的API,我需要使用我的Python REST客户机来访问它(OAuth和令牌都已排序)。但是我想在我的数据工厂中调用这个python客户机,因为我想将结果存储到Azure SQL仓库中
有关于如何操作的帮助吗?您需要的是一个自定义活动,这样您就可以使用Data Factory运行Python脚本。为此,您需要创建一个额外的资源,Azure批处理
更多信息请点击这里
如果你不喜欢这个选项,你可以使用一个Web活动,也可以调用一个定制的RESTAPI。文件:
希望这有帮助 谢谢你,马丁
让我先说一句,我是逻辑应用程序和数据工厂的noob。无论如何,我目前正在进行集成,其中一部分是我需要从逻辑应用程序触发数据工厂中的管道。我已经成功地做到了这一点,但有一部分我似乎还没有弄清楚,那就是如何将参数传递给我的管道。我尝试在“参数”和“触发器”部分下修改JSON,但到目前为止还没有得到任何可点击的内容。管道最终执行,但仅使用默认参数
有人在这方面取得过成功吗?非常感谢您的帮助。正如我在评论中所说,我使用azure功能创建了一个解决方案。Azure功能和逻辑应用程序配合良好。
在此链接上,
我正在尝试从Web服务API接收数据,源是XML格式,因为Azure data Factory不支持XML格式,我正在以二进制格式读取数据,并将其加载到Azure data lake gen2中,然后使用Azure DataRicks转换为XML、csv
问题:
我可以从API中读取令牌id,但不能读取实际数据,这意味着使用令牌id我必须获取实际数据。请任何人对此提供帮助。
注意:使用HTTP链接服务接收数据。
所有接头良好,测试连接成功。
下面是我从ADF中看到的错误消息
"errorCode
Azure数据工厂中是否有任何方法可用于退出for each循环。我使用for-each循环遍历文件并对其进行处理。但是,当放置在循环中的复制活动失败时,循环将执行多次以重新处理失败的文件。我认为这与Get元数据数组中可用文件的数量有关。有人能提出解决这个问题的方法吗
问候,,
Sandeep像@Jay Gong说的,如果内部复制活动失败,Data factory不支持中断循环
其他人已经创建了一个数据工厂,它已经被投票支持了14次
但仍然没有回应
希望这有帮助。即使我已经创建了一个变量,如果
我们有一个父管道,它获取一个表列表并将其提供给ForEach。在ForEach中,我们然后调用另一个管道来传递一些配置,这个子管道移动它作为配置传递的表的数据
当我们按比例运行时,我经常看到监视器中创建了20个左右的子管道实例。除4个外,其余4个都将“排队”,其他4个将作为“正在进行”执行。我似乎找不到任何设置4的限制。我们有几百条管道要执行,我真的可以一次执行超过4条管道。我在整个管道和任务中将并发设置为20,因此我们启动了20个实例。但我不知道我需要做什么才能同时执行4个以上的任务
前额看起
我目前正在Azure Blob存储上上载.json文件。除了我尝试将上传文件的MD5散列与本地文件(与上传的文件完全相同)进行混合外,所有操作都正常。本地文件返回一个字节数组,其中是blob.Properties.ContentMD5返回一个字符串,但两者不匹配
本地MD5哈希:67a45ac2700d14cc867c897182fde402(十六进制)
blob.Properties.ContentMD5:c9QoHkamgiKTRANifltOGQ==
是否有任何可能的方法来匹配这两个?Bl
在ADF数据流中,我设置了一个源,在“源选项”选项卡中,我将“存储文件名的列”中的值设置为“myFileName”
但是,我在列列表中没有看到这个新的“myFileName”,用于流后面的任何转换
如何访问此列值
它绝对应该在那里:
在随后的衍生列中,在“检查”下:
当我尝试将ADF项目从visual studio部署到azure时,出现以下错误:
21.02.2017 13:03:32- Publishing Project 'MyProj.DataFactory'....
21.02.2017 13:03:32- Validating 10 json files
21.02.2017 13:03:37- Publishing Project 'MyProj.DataFactory' to Data Factory 'MyProjDataFactory'
在我的复制数据源中,我使用的查询如下:
您可以看到,我正在向结果集中添加两个不属于基表的附加列。当我转到“映射”选项卡时,这两列不会出现在源代码中。我想应该是这样的?这是因为您的查询是一个表达式而不是一个文本字符串。在这种情况下,如果您转到mapping选项卡并单击ImportSchemes,它实际上不会调用API来检索您的模式,因为表达式需要在运行时进行计算。因此,UI将只使用您在“源数据集模式”选项卡中指定的模式。在您的情况下,可以在那里添加列。这是因为您的查询是一个表达式而不是一个文本字
我需要创建一个数据工厂管道,将数据从sftp移动到blob存储。在这一点上,我只是在做一个POC,我想知道如何读取配置设置并基于这些配置设置启动管道
配置设置的示例是(请注意,其中大约有1000个):
+--------------------+-----------+-----------+------------------------+----------------+
| sftp server | sftp user | sftp pass | blob de
1 2 3 4 5 6 ...
下一页 最后一页 共 10 页