本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 Glue AWS 中使用 XML 格式
AWS Glue 從來源擷取資料,並將資料寫入以各種資料格式存放和傳輸的目標。如果您的資料是以 XML 資料格式存放或傳輸,本文件會介紹在 Glue AWS 中使用資料的可用功能。
AWS Glue 支援使用 XML 格式。此格式表示並非基於資料列或資料行的、高度可設定且嚴格定義的資料結構。XML 是高度標準化的。如需標準授權單位的格式簡介,請參閱 XML Essentials
您可以使用 AWS Glue 從 Amazon S3 讀取 XML 檔案,以及包含 XML 檔案的bzip
gzip
封存。您可以在 S3 連線參數 上設定壓縮行為,而不是在本頁討論的組態中設定。
下表顯示哪些常見的 AWS Glue 功能支援 XML 格式選項。
讀取 | 寫入 | 串流讀取 | 對小型檔案進行分組 | 任務書籤 |
---|---|---|---|---|
支援 | 不支援 | 不支援 | 支援 | 支援 |
範例:從 S3 讀取 XML
XML 讀取器接受 XML 標籤名稱。它會檢查其輸入中包含該標籤的元素,以推斷結構描述,並使用對應的值填入 DynamicFrame。Glue XML AWS 功能的行為類似於適用於 Apache Spark 的 XML 資料來源
先決條件:您需要指向希望讀取的 XML 檔案或資料夾的 S3 路徑 (s3path
) 以及有关 XML 檔案的部分資訊。您還需要希望讀取的 XML 元素的標籤,xmlTag
。
組態:在您的函數選項中,指定 format="xml"
。在您的 connection_options
中,使用 paths
鍵來指定 s3path
。您可以在 connection_options
中进一步設定讀取器與 S3 的互動方式。如需詳細資訊,請參閱 Glue 中 ETL AWS 的連線類型和選項:S3 連線參數。在您的 format_options
中,使用 rowTag
鍵來指定 xmlTag
。您可以在 format_options
中进一步設定讀取器解譯 XML 檔案的方式。如需詳細資訊,請參閱 XML 組態參考。
以下 AWS Glue ETL 指令碼顯示從 S3 讀取 XML 檔案或資料夾的流程。
XML 組態參考
無論 format_options
Glue AWS 程式庫在何處指定 ,您都可以使用下列項目format="xml"
:
-
rowTag
– 指定要將其當做一列的檔案中的 XML 標籤。Row 標籤不能自動關閉。-
類型:文字,必要
-
-
encoding
– 指定字元編碼。它可以是我们的執行時間環境支援的 Charset名稱或別名。我們不對編碼支援做出具體保證,但主要編碼應可適用。 -
類型:文字,預設:
"UTF-8"
-
-
excludeAttribute
– 指定是否要排除元素中的屬性。-
類型:布林值,預設:
false
-
-
treatEmptyValuesAsNulls
– 指定是否要將空格當做 null 值。-
類型:布林值,預設:
false
-
-
attributePrefix
– 屬性的字首,用以和子元素文字作區別。此前綴用於欄位名稱。-
類型:文字,預設:
"_"
-
-
valueTag
– 當無子元素的元素有屬性時,此標籤會當做一個值。-
類型:文字,預設:
"_VALUE"
-
-
ignoreSurroundingSpaces
– 指定是否要忽略前後均有值的空格。-
類型:布林值,預設:
false
-
-
withSchema
– 如果要覆寫推斷的結構描述,则包含預期的結構描述。若不使用此選項,AWS 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 = "" )