如何从Oracle数据库直接筛选指定列而非后续删除?
从Oracle数据库直接筛选指定列优化性能
你的问题出在先加载全表所有列再删除不需要的列,这会导致数据库返回大量不必要的数据,拖慢整体速度。正确的做法是让数据库直接只返回你需要的列,减少数据传输量。
方法一:直接用SQL查询指定列(最可靠高效)
通过Oracle.Database的Query参数直接执行SQL语句,让数据库端完成列筛选,只返回需要的数据:
let Source = Oracle.Database("orcl", [ HierarchicalNavigation=true, Query="SELECT 列名1, 列名2, 列名3 FROM NOVA_SHF.GL_VCHRDETAIL" ]), // 可选:根据实际需求设置列数据类型 #"设置列类型" = Table.TransformColumnTypes(Source, { {"列名1", type text}, {"列名2", type number}, {"列名3", type date} }) in #"设置列类型"
把上面的列名1, 列名2替换成你实际需要保留的列即可,也就是原代码中没被删除的那些列。
方法二:使用Table.SelectColumns触发查询折叠
如果不想写SQL,可以用Table.SelectColumns替代Table.RemoveColumns,Power Query通常会将这个操作折叠到数据库端执行(即让数据库只返回指定列):
let Source = Oracle.Database("orcl", [HierarchicalNavigation=true]), NOVA_SHF = Source{[Schema="NOVA_SHF"]}[Data], GL_VCHRDETAIL1 = NOVA_SHF{[Name="GL_VCHRDETAIL"]}[Data], #"筛选指定列" = Table.SelectColumns(GL_VCHRDETAIL1, {"需要的列名1", "需要的列名2"}) in #"筛选指定列"
这种方法的前提是Power Query能识别并折叠这个操作,相比直接写SQL,可靠性稍弱,但更符合Power Query的可视化操作逻辑。
内容的提问来源于stack exchange,提问作者mohsin naseem
相关产品推荐
相关产品推荐

