我们有一个分区胶表: table_name
在粘合数据库中: source
. 它是由 year
以及 month
. 支持此表的数据位于 S3
是吗 crawled
通过 Glue Crawler
.
我正在研究获取分区的各种方法的性能:
# Option 1
df = glueContext.create_dynamic_frame.from_catalog(
database=source,
table_name=table_name,
push_down_predicate='year=2020 and month=01')
与
# Option 2
df = glueContext.create_dynamic_frame.from_catalog(
database=source,
table_name=table_name)
df_filtered = Filter.apply(frame=df, f=lambda x:x[item['year']] == '2020'] &&
x[item['month']] == '01' ])
与
# Option 3
df = glueContext.create_dynamic_frame.from_catalog(
database=source,
table_name=table_name)
dataFrame = df.toDF()
dataFrame = dataFrame.filter( ( col(item['year']) == '2020' ) )
.filter( ( col(item['month']) == '01' ) )
我怀疑选项1和选项3将具有良好的优化性能,因为glue能够确定我正在尝试访问一个分区,并且可以通过转到正确的s3路径来快速检索该分区。
我怀疑选项2本质上是一个扫描。我不知道glue如何确定filter lambda函数的内容,如何优化以确定我感兴趣的分区并快速获取正确的分区。
由于复杂的原因,我实际上无法运行代码并分析它。因此,理论上的思考在这里是值得赞赏的。
暂无答案!
目前还没有任何答案,快来回答吧!