サンプル: Glue カタログに以下の DDL を含むパーティション テーブルがあります。
CREATE EXTERNAL TABLE `test`(
`id` int,
`data` struct<a:string,b:string>)
PARTITIONED BY (
`partition_0` string)
ROW FORMAT SERDE
'org.openx.data.jsonserde.JsonSerDe'
S3 の基礎となるデータは、さまざまなスキーマを持つ json ファイルです。これは、一部の要素が一部のファイルに存在せず、他のファイルに存在する可能性があることを意味します。
このサンプルの partition_0='01' には、すべての要素を含む json ファイルが含まれています。
{"id": 1,"data": {"a": "value-a", "b": "value-b"}}
partition_0='02' のファイルには要素データが含まれていません。b:
{"id": 1,"data": {"a": "value-a"}}
問題: Glue (私は Python を使用) で DynamicFrame を作成すると、そのスキーマはクエリするデータに依存します。partition_0='01' からのデータを含めると、すべての要素がスキーマに存在します。
id_partition_predicate="partition_0 = '01'"
print("partition with 'b'")
glueContext.create_dynamic_frame.from_catalog(database = glue_source_database, table_name = "test", push_down_predicate = id_partition_predicate).printSchema()
partition with 'b'
root
|-- id: int
|-- data: struct
| |-- a: string
| |-- b: string
|-- partition_0: string
print("both partitions")
glueContext.create_dynamic_frame.from_catalog(database = glue_source_database, table_name = "test").printSchema()
both partitions
root
|-- id: int
|-- data: struct
| |-- a: string
| |-- b: string
|-- partition_0: string
partition_0='02' からのデータのみをクエリすると、要素 data.b は、テーブル定義に存在するにもかかわらず、DynamicFrame スキーマに存在しません。
print("partition without 'b'")
id_partition_predicate="partition_0 = '02'"
glueContext.create_dynamic_frame.from_catalog(database = glue_source_database, table_name = "test", push_down_predicate = id_partition_predicate).printSchema()
partition without 'b'
root
|-- id: int
|-- data: struct
| |-- a: string
|-- partition_0: string
質問: Glue テーブルのスキーマのすべての要素を常に含む DynamicFrame または DataFrame を作成するにはどうすればよいですか?
前もって感謝します!