本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 Amazon Glue 中使用 XML 格式
Amazon Glue 从源中检索数据,并将数据写入以各种数据格式存储和传输的目标。如果您的数据以 XML 数据格式存储或传输,本文档将向您介绍供您使用 Amazon Glue 中的数据的可用功能。
Amazon Glue 支持使用 XML 格式。此格式表示高度可配置、严格定义的数据结构,这些数据结构不是基于行或列的。XML 是高度标准化格式。有关标准颁发机构对该格式的简介,请参阅 XML Essentials
您可以使用 Amazon Glue 从 Amazon S3 以及含有 XML 文件的 bzip
和 gzip
存档中读取 XML 文件。请在 S3 连接参数 上而非本页中讨论的配置中配置压缩行为。
下表显示了哪些常用 Amazon Glue 功能支持 XML 格式选项。
读取 | 写入 | 流式处理读取 | 对小文件进行分组 | 作业书签 |
---|---|---|---|---|
支持 | 不支持 | 不支持 | 支持 | 支持 |
示例:从 S3 读取 XML
XML 读取器采用 XML 标签名称。它检查输入中带有该标签的元素以推断架构,并使用相应的值填充 DynamicFrame。Amazon Glue XML 功能的行为类似于 XML Data Source for Apache Spark
先决条件:您将需要至您想要读取的 XML 文件或文件夹以及有关您的 XML 文件的一些信息的 S3 路径(s3path
)。您还需要您想要读取的 XML 元素的标签 xmlTag
。
配置:在函数选项中,请指定 format="xml"
。在您的 connection_options
中,请使用 paths
键指定 s3path
。您可以在 connection_options
中进一步配置读取器与 S3 的交互方式。有关详细信息,请参阅 Amazon Glue 中 ETL 的连接类型和选项:S3 连接参数。在您的 format_options
中,请使用 rowTag
键指定 xmlTag
。您可以进一步配置读取器如何解释 format_options
中的 XML 文件。有关详细信息,请参阅 XML 配置参考。
以下 Amazon Glue ETL 脚本显示了从 S3 读取 XML 文件或文件夹的过程。
XML 配置参考
您可以在 Amazon Glue 库指定 format="xml"
的任何位置使用以下 format_options
:
-
rowTag
– 指定文件中要视为行的 XML 标签。行标签不能自结束。-
类型:文本,必填项
-
-
encoding
– 指定字符编码。它可以是由我们的运行时环境支持的字符集的名称或别名。我们没有对编码支持做出具体的保证,但主编码应该起作用。 -
类型:文本,默认值:
"UTF-8"
-
-
excludeAttribute
– 指定是否要排除元素中的属性。-
类型:布尔值,默认值:
false
-
-
treatEmptyValuesAsNulls
– 指定是否将空格视为空值。-
类型:布尔值,默认值:
false
-
-
attributePrefix
– 用于将属性与子元素文本区分开来的属性的前缀。此前缀用于字段名称。-
类型:文本,默认值:
"_"
-
-
valueTag
– 在元素中具有没有子项的属性时用于值的标签。-
类型:文本,默认值:
"_VALUE"
-
-
ignoreSurroundingSpaces
– 指定是否应忽略值周围的空格。-
类型:布尔值,默认值:
false
-
-
withSchema
– 在您想要覆盖推断的架构的情况下,包含预期的架构。如果您不使用此选项,Amazon Glue 会推断 XML 数据中的架构。-
类型:文本,默认值:不适用
-
该值应该是代表
StructType
的一个 JSON 对象。
-
手动指定 XML 架构
手动 XML 架构示例
此示例使用 withSchema
格式选项来指定 XML 数据的架构。
from awsglue.gluetypes import * schema = StructType([ Field("id", IntegerType()), Field("name", StringType()), Field("nested", StructType([ Field("x", IntegerType()), Field("y", StringType()), Field("z", ChoiceType([IntegerType(), StringType()])) ])) ]) datasource0 = create_dynamic_frame_from_options( connection_type, connection_options={"paths": ["s3://xml_bucket/someprefix"]}, format="xml", format_options={"withSchema": json.dumps(schema.jsonValue())}, transformation_ctx = "" )