如何为 Power Query 设置最大运行时间/超时时间?

10
有没有一种方法在Power Query中设置最大运行时间或超时因子,以便在指定的时间段后,不管是否成功执行查询,它都会自动终止?
这对我很重要,因为我在工作场所构建了各种查询,通常运行良好(例如,我已经每天运行它数月甚至数年),但偶尔会挂起(可能是因为与服务器上另一个进程冲突,在服务器负载繁重的情况下)。此时,查询会在服务器上进行无限制的读取请求。有一次IT告诉我,他们在几个小时内从我的计算机向数据库记录了超过700万次读取。在某些情况下,这些问题导致服务器崩溃,从而导致长时间停机。
因此,我想知道是否有任何设置或任何东西可以构建到查询本身中,以确保它在一定时间后终止。
我精通M Power Query语言。
谢谢。
[更新1] 感谢Alexis提出的关于在编写连接时设置CommandTimeout值的建议。这是一个很好的指针。
我会尝试它,进行一些测试,并报告是否彻底解决了问题。
但与此同时,我已经深入研究了Microsoft的Power Query文档,并发现CommandTimeout参数本身已经具有默认值为10分钟的内置值,因此理论上即使我们没有指定该参数,查询也应该自动终止。但事实并非如此。它运行了数小时。
我想知道这是否是Excel版本Power Query的错误?因为我也在Power BI中使用Power Query,在那里我还没有看到它崩溃和挂起(诚然,我更频繁地使用Excel版本而不是Power BI)。
但是,如果有人对解决此问题的其他建议,请告诉我。谢谢。
1个回答

15
我在这里找到了一个相当不错的答案(点击此处)。 这是在该论坛上发布的步骤:
  1. 打开Power BI Desktop文件并进入“报告视图”
  2. 单击“外部数据”中的“编辑查询”箭头
  3. 会出现下拉菜单 - 然后单击“数据源设置”
  4. 数据源设置弹出窗口将出现
  5. 单击“更改源…”
  6. 另一个弹出窗口将出现
  7. 单击高级选项(在弹出窗口内会出现某种下拉菜单)
  8. “命令超时时间(分钟)(可选)”将是第一个选项
  9. 输入一个值 - 我选择输入60分钟,但请随意输入任何值
  10. 然后应用查询更改并等待刷新完成

虽然这是为Power BI撰写的,但它在Excel查询编辑器中也适用。 总之,

  1. 打开查询编辑器
  2. 选择 文件 > 选项和设置 > 数据源设置
  3. 选择您的来源并单击“更改源…”
  4. 展开高级选项并输入命令超时值

当我尝试将此连接到SQL服务器时,它会在我的"源步骤"中添加一个CommandTimeout参数。 您可以直接使用此代码而跳过所有点击:

= Sql.Database("server", "DB", [CommandTimeout=#duration(0, 0, 15, 0)])

如果您没有连接到 SQL 服务器,则通过数据源设置执行可能更可取,因为参数可能会有所不同。例如:

= Web.Page(Web.Contents("URL", [Timeout=#duration(0,0,15,0)]))
= OData.Feed("http://some.url/service.svc/", null, [Timeout=#duration(0, 0, 15, 0)])

谢谢Alexis,好主意。感谢你指出连接设置的代码等效性,这真的很有帮助。我会试一下。但我担心它可能不是我遇到的挂起问题的解决方法,因为按照你的建议,我已经对Microsoft的Powerquery文档进行了一些挖掘,并发现CommandTimeout参数本身已经内置了10分钟的默认值,所以即使我们没有指定该参数,查询也应该自行终止。但事实并非如此。它运行了数小时。 - J Henkinson
你知道如何使用本地源文件夹完成这个任务吗?例如,我的高级编辑器将此显示为源行:Source = Folder.Files("URL"),你可以告诉我如何对此应用超时吗? - Janzaib M Baloch
1
@JanzaibMasood 在我看来,Folder.Files 没有类似的选项。 - Alexis Olson
@AlexisOlson,你认为有没有其他方法可以增加我的发布过程的超时时间?我已经解决了这个问题很多天了,我的pbix文件大小为1.5GB。当我尝试发布时,我会遇到读取、写入和现有连接错误。我的数据集或pbix中没有错误,而且我正在使用最新版本的PowerBi Desktop。我已经查找了所有在线资源,我快要放弃了。 - Janzaib M Baloch
1
我以前做过的一件事是将所有数据预先聚合到一个文件中(在Excel中使用相同的查询,加载到表中,保存xlsx),然后将pbix连接到xlsx。我不确定这是否有助于您的情况。您应该发布一个单独的问题,包括您看到的错误消息。 - Alexis Olson
非常好的答案,我正在使用´= Web.Page(Web.Contents("URL", [Timeout=#duration(0,0,0,5)]))´ 进行测试,但是在5秒后查询并没有失败。@AlexisOlson,你是否遇到过这个问题? - Francesco Mantovani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接