首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使用Apache光束库[org.apache.beam.sdk.io.*]获取/添加GCS文件用户定义的元数据

Apache Beam是一个开源的、统一的编程模型,用于批处理和流式处理大规模数据集。它允许开发者使用统一的API编写可移植、分布式的数据处理流水线,可以在各种分布式处理引擎上运行,包括Apache Flink、Apache Spark和Google Cloud Dataflow等。

要使用Apache Beam的GCS文件用户定义的元数据,可以通过Apache Beam的GCS IO模块来实现。Apache Beam提供了一组用于处理Google Cloud Storage(GCS)的输入输出(IO)函数。您可以使用这些函数来读取和写入GCS中的文件,同时还可以访问和修改文件的用户定义的元数据。

首先,您需要在您的项目中引入Apache Beam的相应依赖,以便使用其GCS IO模块。例如,如果您使用Maven进行构建管理,可以在pom.xml文件中添加以下依赖:

代码语言:txt
复制
<dependency>
  <groupId>org.apache.beam</groupId>
  <artifactId>beam-sdks-java-io-google-cloud-platform</artifactId>
  <version>2.30.0</version>
</dependency>

然后,您可以使用Apache Beam的GCS IO模块中的函数来获取或添加GCS文件的用户定义的元数据。具体而言,您可以使用以下函数:

  1. readMetadata()函数:该函数用于读取GCS文件的元数据。它返回一个包含文件元数据的PCollection集合。您可以使用Beam的转换操作对这些元数据进行进一步处理或分析。
  2. writeMetadata()函数:该函数用于向GCS文件添加用户定义的元数据。您可以将元数据添加到GCS文件的描述属性中,以便后续的处理或查询。

以下是一个使用Apache Beam的GCS IO模块获取/添加GCS文件用户定义的元数据的示例代码:

代码语言:txt
复制
import org.apache.beam.sdk.Pipeline;
import org.apache.beam.sdk.io.gcp.storage.GcsIO;
import org.apache.beam.sdk.options.PipelineOptions;
import org.apache.beam.sdk.options.PipelineOptionsFactory;
import org.apache.beam.sdk.transforms.ParDo;

public class GCSMetadataExample {
  public static void main(String[] args) {
    // 创建PipelineOptions
    PipelineOptions options = PipelineOptionsFactory.create();

    // 创建Pipeline
    Pipeline pipeline = Pipeline.create(options);

    // 从GCS读取文件元数据
    pipeline
      .apply(GcsIO.readMetadata().from("gs://your-bucket/your-file"))
      .apply(ParDo.of(new ProcessMetadataFn()));

    // 向GCS文件添加用户定义的元数据
    pipeline
      .apply(GcsIO.writeMetadata().to("gs://your-bucket/your-file"))
      .apply(ParDo.of(new AddMetadataFn()));

    // 运行Pipeline
    pipeline.run().waitUntilFinish();
  }

  // 自定义处理元数据的函数
  static class ProcessMetadataFn extends DoFn<GcsIO.ReadableMetadata, Void> {
    @ProcessElement
    public void processElement(ProcessContext c) {
      GcsIO.ReadableMetadata metadata = c.element();
      // 处理元数据,例如打印或存储到数据库
      System.out.println(metadata);
    }
  }

  // 自定义添加元数据的函数
  static class AddMetadataFn extends DoFn<GcsIO.WritableMetadata, Void> {
    @ProcessElement
    public void processElement(ProcessContext c) {
      GcsIO.WritableMetadata metadata = c.element();
      // 添加元数据到描述属性
      metadata.getMetadata().set("key", "value");
      c.output(metadata);
    }
  }
}

上述示例代码演示了如何使用Apache Beam的GCS IO模块从GCS文件获取元数据,并向GCS文件添加用户定义的元数据。

推荐的腾讯云相关产品:腾讯云对象存储(COS) 腾讯云对象存储(COS)是腾讯云提供的一种可扩展的云存储服务,适用于存储、备份和归档海量数据。它提供了高可靠性、低成本、高可扩展性的存储解决方案,并与其他腾讯云服务(如腾讯云函数计算、腾讯云数据万象等)集成,为开发者提供更丰富的功能和服务。

腾讯云对象存储(COS)的优势:

  • 高可靠性和持久性:数据在多个设备上进行副本存储,可提供99.999999999%的数据持久性。
  • 低成本:提供灵活的计费方式和价格优势,能够满足不同规模和需求的用户。
  • 高可扩展性:能够支持海量数据存储和高并发请求访问。
  • 安全性:提供数据加密、访问权限控制等多层级安全保护机制。

腾讯云对象存储(COS)的应用场景包括但不限于:

  • 大规模数据备份和归档:将数据存储在COS中,实现高可靠性和持久性的数据备份和归档。
  • 图片、视频等多媒体文件存储和分发:通过腾讯云数据万象等服务,实现快速的图片、视频处理和分发。
  • 静态网站托管:将网站的静态资源(如HTML、CSS、JavaScript文件)存储在COS中,通过腾讯云CDN实现快速的内容分发。
  • 数据分析和处理:将数据存储在COS中,通过腾讯云大数据平台等服务进行数据分析和处理。

您可以访问以下链接了解更多关于腾讯云对象存储(COS)的信息:

请注意,上述答案仅针对Apache Beam的GCS IO模块获取/添加GCS文件用户定义的元数据的内容进行了回答,并推荐了腾讯云相关产品。如需了解其他云计算、IT互联网领域的名词词汇或相关问题的答案,请提供具体的问答内容。

相关搜索:如何使用PnP.js获取sharepoint文件自定义元数据如何通过Spark向S3对象添加用户定义的元数据如何在使用spark写入拼图文件时添加额外的元数据如何使用flask rest API向Mysql数据库添加用户时获取JSON结果如何使用Shell脚本连接到用户定义的Oracle数据库?如何使用flutter从firebase数据库中获取基于用户on的值如何使用Firestore从我的位置获取附近的用户(从firebase数据库)?如何使用Xamarin (Android)获取用户设备中所有音频文件的数据?如何使用firebase作为数据库来获取android中附近的用户名?在哪里/如何调用firebase数据库来获取currentUser数据,以便用户可以查看自己的配置文件?如何使用从远程服务器获取的属性文件配置数据库连接在Informix中使用sysmaster用户连接时,如何获取特定数据库的表列表?在SQLAlchemy中使用适当的文件结构,以及如何将数据添加到数据库如何将多个文件(图像)名称发送到数据库,并获取用户上传的所有图像如何使用JavaScript获取Firebase数据库和文件存储中的存储空间使用率如何从我的数据库获取用户id并使用ASP.NET核心MVC显示它?如何使用实体框架核心从所有消息的数据库中获取用户对话框列表如何在我的自定义插件中使用WP将插件添加到我的数据库中?如何使用JavaScript中的MutationObserver检测DOM中添加的<li>标记,并在IFRAME中获取数据文件名?如何使用Django-Rest-Framework从一个数据库中获取用户并将其配置文件保存到另一个数据库中?
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

大规模运行 Apache Airflow 经验和教训

我们编写了一个自定义脚本,使该卷状态与 GCS 同步,因此,当 DAG 被上传或者管理时,用户可以与 GCS 进行交互。这个脚本在同一个集群内单独 pod 中运行。...总而言之,这为我们提供了快速文件存取作为一个稳定外部数据源,同时保持了我们快速添加或修改 Airflow 中 DAG 文件能力。...但是,从规模上看,数据正在迅速地累积。一段时间之后,就可能开始对数据产生额外负载。...在这个文件中,他们将包括作业所有者和源 github 仓库(甚至是源 GCS 桶)信息,以及为其 DAG 定义一些基本限制。...总结一下我们主要收获: GCS 和 NFS 组合可以实现高性能和易于使用文件管理。 数据保留策略可以减少 Airflow 性能下降。

2.7K20

apache hudi 0.13.0版本重磅发布

不覆盖内部数据表配置 由于错误配置可能导致数据完整性问题,在 0.13.0 中,我们努力使用户数据表配置更加简单。 在内部,Hudi 确定这些配置最佳选择,以实现系统最佳性能和稳定性。...Metaserver 存储 Hudi 表数据,如表名、数据、所有者; 以及时间线数据,如提交瞬间、动作、状态等。...随着它流行,在 0.13.0 版本中,我们添加了一个新记录有效负载实现 PartialUpdateAvroPayload,以支持这种开箱即用功能,因此用户可以使用该实现而不必编写自己定义实现。...使用Bucket索引,每个分区Bucket/文件组是静态分配,而使用一致性哈希索引,Bucket可以动态增长,因此用户无需担心数据倾斜。 Bucket将根据每个分区负载因子扩展和收缩。...在0.13.0版本之前,这种重叠数据文件冲突检测是在提交数据之前和数据写入完成之后进行。 如果在最后阶段检测到任何冲突,则可能会浪费计算资源,因为数据写入已经完成。

1.8K10
  • 重磅!Onehouse 携手微软、谷歌宣布开源 OneTable

    在云存储系统(如S3、GCS、ADLS)上构建数据湖仓,并将数据存储在开放格式中,提供了一个您技术栈中几乎每个数据服务都可以利用无处不在基础。...这三个项目都在 Apache Parquet 文件之上提供了一个特殊数据层。...Hudi 使用数据时间线,Iceberg 使用 Avro 格式清单文件,Delta 使用 JSON 事务日志,但这些格式共同点是 Parquet 文件实际数据。...数据转换是通过轻量级抽象层实现,这些抽象层定义了用于决定表内存内通用模型。这个通用模型可以解释和转换包括从模式、分区信息到文件数据(如列级统计信息、行数和大小)在内所有信息。...更多详细信息请参考 GitHub 代码:https://github.com/onetable-io/onetable 组织机构们目前如何使用 OneTable Onehouse 当前已经支持了多个客户在生产环境中使用

    69230

    基于Apache Parquet™更细粒度加密方法

    甚至某些系统(即 Presto)也使用了可能与开源版本不完全一致定义 Parquet 。...通过控制每个键权限,可以实现列级更细粒度访问控制。当 Parquet 读取器解析文件页脚时,格式中定义加密数据将指示在读取数据之前首先从哪个 Parquet 获取密钥。...数据标记实体添加字段隐私属性,用于指示该字段是否将被加密,以及如果加密将使用什么密钥。数据被放在一个存储中。...中间层显示数据如何从事务性上游业务存储(例如,RDBMS 数据、通过 Kafka 消息系统 Key-Val 数据获取数据,并以 Apache Parquet™ 格式存储在文件存储系统中。...在读取路径上,加密数据存储在每个文件(格式)中,并且 Parquet™ 使用它来确定要检索什么密钥来解密数据。 KMS 客户端包含相同插件。 如果用户对密钥具有权限,则数据将被解密为明文。

    2K30

    GDAL对缺失投影定义AIG文件根据经纬度坐标提取像

    基于GDAL批量提取经纬度/投影坐标对应像值 查找gdal支持数据格式,了解gdal支持AIG数据格式: gdal文档 具体格式介绍如上,只需知在给予‘hdr.adf'文件路径条件下即可打开AIG...[image.png] 查看prj文件 打开'prj.adf',虽然获取了投影信息,但是不知道怎样得到投影定义表达式。...[image.png] 获取投影表达方式 在QGIS中将原本AIG文件转为tiff格式文件,打开tiff文件源信息: [image.png] 点击右侧投影信息: [image.png] 可以看到左下角投影定义语句...我是通过gdal读取tiff文件,然后使用下面代码获取。...(行列号)转为投影或地理坐标(根据具体数据坐标系统转换) :param extend:图像空间范围 :param row:像行号 :param col:像列号

    1.8K00

    访谈:Airbnb数据流程框架Airflow与数据工程学未来

    先前版本,一个DAG文件简单sys.exit()语句就可以使调度器停止运行。 用NVD3替代Highcharts图表。...Highcharts有一个非Apache兼容许可证,拿掉它将把我们带出法律灰色地带。 Unix系统模拟和控制组,允许以特殊Unix用户方式运行任务,特定控制组可以在任务级限制资源利用率。...谷歌云服务(GCS)与改进后操作(operator)和挂钩集(hooks)集成。...[问题2]从Airbnb内部工具到Apache项目工具是如何过渡? 这个过渡还是很顺利Apache社区通过允许很多外部贡献者合并pull请求来衡量社区贡献,一方面加速了项目改进速度。...似乎我们仍然在急剧扩张阶段,每天都有新分布式数据、新框架结构、新和新合作对象。由于这些系统更加复杂和快速发展,拥有像Airflow这样可以让所有的东西聚集在一个健全环境下是非常重要

    1.4K20

    优化 Apache Flink 应用程序 7 个技巧!

    下面将向您介绍 Apache Flink 应用程序关键课程有哪些方面的介绍。 1. 找到适合分析工具 手头拥有的分析工具是深入了解如何解决问题关键。...结合起来,您可以将任务管理和管理设置为自动分配器转储内存配置,然后可以使用内存配置进行分析发现这对于您长时间观察有帮助,可以帮助我们使用 Rock 检测数据中趋势应用程序内存泄漏。...它可以用于读取 jemalloc 输出堆转储,提供GCS文件接收器内存不足问题时,该工具非常有用,我们将在下面进行。...从调试类加载: Java 类路径: Java 通用类路径,它包括 JDK ,以及 Flink /lib 文件夹中所有代码(Apache Flink 类和一些依赖项)。...我们有一个支持这一多位相关 RocksDB 问题:该发现用户在过去三年中与我们报告了内存相关问题。

    1.4K30

    NVIDIApython-GPU算法生态 ︱ RAPIDS 0.10

    支持实例 如何在GPU实例上使用RAPIDS加速 参考文献 ---- RAPIDS RAPIDS定义 RAPIDS,全称Real-time Acceleration Platform for Integrated...虽然新工具和工作流程出现激动人心,但很少有人反过来思考在Apache Arrow之前,这些和框架如何进行有效协作。...“我最讨厌Pandas10个问题”列表 1、内部构件离“metal”太远; 2、不支持内存映射数据集; 3、数据文件摄取/导出性能不佳; 4、Warty缺少数据支持; 5、缺乏内存使用透明度和RAM...该编译器还可以针对RAPIDS在我们所有中都大量使用GPU。由于能够任意扩展功能并使用纯Python编写用户定义函数(UDF),因此Python生态系统具有许多其他语言所没有的优势。...此外,RAPIDS添加了cuStreamz数据包,因此可以使用cuDF和Streamz简化GPU加速流处理。

    2.9K31

    云原生 PostgreSQL 集群 - PGO:来自 Crunchy Data Postgres Operator

    目录 Postgres 集群供应 高可用性 灾难恢复 TLS 监控 PostgreSQL 用户管理 升级管理 高级复制支持 克隆 连接池 K8S 亲和力和容忍度 定期备份 备份到 S3 或 GCS 多命名空间支持...Postgres 集群,还是需要在生产中部署一个高可用性、容错群集群,或者是运行自己数据即服务(database-as-a-service),PostgreSQL Operator 都提供了保持云原生...适用于非常大数据!...使用强大命令从您 PostgreSQL 集群中快速添加和删除用户。...#using-gcs 多命名空间支持 您可以控制 PGO(Postgres Operator) 如何利用具有多种不同部署模型 Kubernetes 命名空间: 将 PGO 和所有 PostgreSQL

    2.1K10

    使用NiFi每秒处理十亿个事件

    有没有想过Apache NiFi 有多快? 有没有想过NiFi扩展能力如何? 单个NiFi集群每天可以处理数万亿个事件和PB级数据,并具有完整数据来源和血缘。这是如何做到。...答案几乎总是响亮“是!” 在本文中,我们定义了一个常见用例,并演示了NiFi如何在实际数据处理场景中实现高可伸缩性和高性能。 用例 在深入研究数字和统计信息之前,了解用例很重要。...我们可以看一下流程开始,从GCS那里获取数据,但这并不是一个很好表示,因为有些数据被压缩而有些没有压缩,因此很难理解正在处理多少数据。...我们还使用了比以前试用版更小磁盘,内容存储使用130 GB卷,FlowFile存储使用10 GB卷,而Provenance存储使用20 GB卷。...要解决此问题,我们在流中添加了DuplicateFlowFile处理器,该处理器将负责为从GCS提取每个日志文件创建25个副本。这样可以确保我们不会很快耗尽数据。 但是,这有点作弊。

    3K30

    Cosmopolitan Libc:让 C 语言一次构建、随处运行 | 开源日报 No.109

    核心优势包括实践教学方法,从真实案例中获取经验并分享给用户。...apache/incubator-opendal[3] Stars: 2.2k License: Apache-2.0 picture OpenDAL 是一个数据访问层,允许用户以统一方式轻松高效地从各种存储服务中检索数据...(如 ftp、webdav)、对象存储服务 (如 s3、gcs 等)、文件存储服务 (如 fs、azdls 等),消费者云存储服务和键值/缓存数据后端。...其关键特点和优势包括: 支持多种编程语言 统一接口方便使用不同类型数据源 多样化且广泛覆盖了常见云端与本地文件系统资源 开放式开发模式鼓励社区参与贡献 EmergeTools/Pow[4] Stars...用户可以通过自定义 .pif.json 文件伪装 GMS 不稳定进程定义值。此外,在故障排除方面提供了详细步骤指导。

    39410

    Grafana Loki 简明教程

    然后日志数据本身会被压缩,并以 chunks(块)形式存储在对象存储(比如 S3 或者 GCS)甚至本地文件系统。...*blip"}' 3.3 Label 标签 Label 标签是一个键值对,可以定义任何东西,我们喜欢称它们为描述日志流数据。...- targets: - localhost labels: job: syslog __path__: /var/log/syslog 这个配置将获取日志文件数据添加一个...job=~"apache|syslog"} <- 显示 job 标签为 apache 或者 syslog 日志 最后一种方式我们使用是一个 regex 标签匹配器来获取 job 标签值为 apache...为了了解是如何工作,让我们回过头来看看上面我们查询访问日志数据特定 IP 地址例子,我们不使用标签来存储 IP,相反,我们使用一个过滤器表达式来查询它。

    13K41

    什么是坐标系,不同坐标系之间有什么区别

    它包含一个 GCS,但它使用数学(投影算法)和其他参数将该 GCS 转换为平面。它单位是线性,最常见是米。 ? GCS数据了解地球表面确切位置所必需。在平面地图上绘制数据需要 PCS。...一个GCS如何配合坐标值在地球上真实位置完整定义。除了基准面,GCS 还包括本初子午线(指定 0° 经度位置)和角度单位(通常为度)。 ?...一个PCS是一个特定圆形地球模型是如何投影到平面地图完整定义。...该投影定义工具主要用于当数据有未知坐标系。它重新分配数据坐标系信息。它不会改变实际坐标值。 该项目的工具转换从一个所有坐标系到另一个。它还更新数据信息。...如果您数据使用与地图不同 GCS,并且您不使用地理变换,则数据将绘制在错误位置。 要了解更多信息,可以查阅ARCGIS帮助中动态投影和地理变换。 ? 空间参考和坐标系有什么区别? ?

    1.8K40

    利用ArcGIS Python批量处理地理数据坐标系

    试想一下,你是一名GIS工作新人,你领导总是让你做一些基础工作,这一次他交给你政府和甲方提供shp格式用地数据、兴趣点数据、街道数据等,你需要将分散在各个文件一些数据集转换为统一坐标系,然后将其导入到地理数据中...1.数据准备 本次演示文件在"Workflow"文件夹中,为了便于理解,只包含一个地理数据数据要素类和交通运输有关,我们需要将要素类需要存储在相同同一个要素数据集中,并且具有相同坐标系。...在处理 Python 代码之前,用ArcGIS打开名为Workflow.aprx工程文件,检查一下数据结构,如何所示: 数据结构 2.手动流程 试想以下手动执行检查并统一坐标系流程:检查要素类坐标系...虽然软件提供了批量投影 工具,但是也不能同时批量处理所有文件,有时候还会遇见有的要素类没有投影,还需要先定义投影,然后才能进行投影工作。 检查坐标系,并决定是否需要运行投影工具。...为了统一坐标系,我使用 Python 代码检查要素类坐标系,并使用投影工具对所有当前不在正确坐标系中数据集进行转换,从而将其复制到新地理数据和要素数据集。

    37210

    5000字阐述云原生消息中间件Apache Pulsar核心特性和设计概览

    图 1 展示了三者之间如何协同工作。 ? Bookie Apache Pulsar 使用 Apache BookKeeper 作为存储层。...,是用于存储bookie相关数据,比如bookie上有哪些ledger,bookkeeper目前使用是zk存储,所在在部署bookkeeper前,要先有zk集群 Journal 其实就是bookkeeper...ZooKeeper负责存储数据,集群配置,协调:其中local zk负责Pulsar Cluster内部配置,global zk则用于Pulsar Cluster之间数据复制。...Pulsar 当前支持 S3, Google Cloud Storage (GCS) 和文件系统(filesystem)来做长期存储(long term store)。...此外,当在Bookie上写入数据时,首先将该消息写入日志文件,这是一个预写日志(WAL),它可以帮助BookKeeper在发生故障时避免数据丢失。它与关系型数据持久化保证机制相同。

    97730

    云端迁移 - Evernote 基于Google 云平台架构设计和技术转型(上)

    同时还在考虑如何更好地利用GCP全球足迹来提高访问Evernote服务时用户延迟。 在这一点上,我们已经定义了需求,并做出了一些战略决策。现在需要是进入具体工程。...实现这一功能是一个叫做“Reco”服务。(也就是'recognition’缩写) 由于过去各种架构限制,Reco服务器使用轮询模式来获取要处理新资源列表。...用户附件存储 (从多个 WebDavs 到 Google 云存储) 我们有120亿个用户附件和数据文件,可以从原始WebDavs复制到Google云端存储中新家。...为了确保成功上传给定资源,我们将本地计算散列以及文件内容传递给GCS API,GCS具有独立计算其自己散列并将其与提供散列进行比较特征。...将应用升级并迁移至GCS 最后,我们需要考虑如何更新我们应用程序代码,以使用GCS读取和写入资源,而不是WebDav。 我们决定添加多个开关,允许打开和关闭特定GCS读/写功能。

    2.5K110

    通过 App Engine 强制下载文件

    这对于某些类型文件(如视频和音频)来说通常是理想,但对于其他类型文件(如图像和文档)来说,用户可能希望直接下载该文件。...这将告诉 App Engine 在用户访问文件时自动添加 Content-Disposition: attachment 头。...force_download=true代码示例以下是一个使用 App Engine 内置 appengine_gcs 实现强制下载功能示例:from google.appengine.api import...filename 是要下载文件名称,file_name 是要在浏览器中显示文件名称。函数首先获取 App Engine 默认 GCS 存储桶名称。...Content-Disposition 头告诉浏览器将文件下载到用户计算机而不是在浏览器中显示它。最后,函数获取 BlobInfo 对象,然后使用 open() 方法打开 BlobFile 对象。

    11610

    MySQL8.03 RC 已发布

    为P_S中SETUP_INSTRUMENT中instruments添加数据数据作为在线文档,由用户或工具查看。...如果不想使用结果集返回数据用户可以设置CLIENT_OPTIONAL_RESULTSET_METADATA标记。...错误,警告信息将按服务错误记录组件定义输出。使用组复制时,调试和跟踪消息将发送到文件。默认情况下,用作调试接收信息文件将被命名为GCS_DEBUG_TRACE,并将被放置在数据目录中。...数据字典 支持DDLcrash-safe。实现了为服务器和存储引擎层提供一个常用事务数据字典主要优点之一,即Server和InnoDB不再可能为数据对象拥有不同数据。...这涉及跨外键关系获取表上数据锁,以便阻止如果父表更改则更新FK数据冲突操作。这个工作是由通用数据字典启用,这使得外键对server层可见,从而进行数据锁定。

    1.1K20

    Google Earth Engine(GEE)—有JS和python为什么GEE还要使用rgee?

    与平台交互方式有以下几种: discover 代码编辑器 Javascript 客户端 Python客户端 R 客户端 本网站重点介绍最后一个,您可以使用 R 客户端向地球引擎服务器和开发Web...组件: 地球引擎主要组成部分是: 数据集:公开可用遥感图像和其他数据 PB 级存档。探索数据目录。 计算能力:谷歌计算基础设施针对地理空间数据并行处理进行了优化。...认识地球引擎 用户必须考虑到地球引擎 API 和高级地球引擎功能是实验性,可能会发生变化。访问受到限制,需要通过表单请求访问。查看地球引擎官网获取更多信息。 5....内置身份验证 对 R 用户更友好 I/O API。 有限输入/输出功能 许多绘图选项 无法与其他 JS 集成 需要一些rgee(和维护)! 6....但是,rgee::ee_install() 使用不是强制性。您可以依靠自己定义安装。这也是允许

    20510
    领券