gsh*_*hka 6 amazon-web-services apache-spark-sql pyspark aws-glue aws-glue-spark
我使用 Glue Studio 创建了一个 AWS Glue 作业。它从 Glue 数据目录获取数据,进行一些转换,然后写入不同的数据目录。
配置目标节点时,我启用了运行后创建新分区的选项:
该作业成功运行,数据以正确的分区文件夹结构写入 S3,但在实际的数据目录表中没有创建新分区 - 我仍然需要运行 Glue Crawler 来创建它们。
生成的脚本中负责创建分区的代码如下(作业的最后两行):
DataSink0 = glueContext.write_dynamic_frame.from_catalog(frame = Transform4, database = "tick_test", table_name = "test_obj", transformation_ctx = "DataSink0", additional_options = {"updateBehavior":"LOG","partitionKeys":["date","provider"],"enableUpdateCatalog":True})
job.commit()
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?为什么没有创建新分区?如何避免运行爬网程序才能在 Athena 中获取可用数据?
我正在使用 Glue 2.0 - PySpark 2.4
小智 2
正如文档中强调的,向数据目录添加新分区存在限制,更具体地说,请确保您的用例不与以下任何条件相矛盾:
仅支持 Amazon Simple Storage Service (Amazon S3) 目标。
仅支持以下格式:json、csv、avro 和 parquet。
要创建或更新具有 parquet 分类的表,您必须使用适用于 DynamicFrames 的 AWS Glue 优化 parquet 编写器。
当 updateBehavior 设置为 LOG 时,仅当 DynamicFrame 架构等于或包含数据目录表架构中定义的列的子集时,才会添加新分区。
ETL 脚本中传递的参数与数据目录表架构中的分区键之间的分区键必须等效且顺序相同。
| 归档时间: |
|
| 查看次数: |
1778 次 |
| 最近记录: |