我已经成功地将Power BI的增量刷新每天与MySQL数据源一起使用。但是,我无法使用 AWS Athena 进行配置,因为后者似乎将所需参数中的值解释为字符串RangeStart
和RangeEnd
。 由于数据源大约有 5000 万行,我宁愿避免每天从头开始查询。
在Guy in a Cube的这段视频中,你可以清楚地看到 Power BI 发送到 Azure 的查询具有转换为 datetime2函数 - Athena/Presto 可能缺少这样的东西,它需要类型构造函数 TIMESTAMP 才能进行日期时间比较 (https://stackoverflow.com/a/38041684/3675679),当然增量刷新必须基于 datetime 字段。 我正在使用日期时间字段adv_date
进行增量加载。
下面是 M 查询在电源查询编辑器中的外观:
= Table.SelectRows(#"Removed Columns1", each [adv_date] >= RangeStart and [adv_date] < RangeEnd)
这是雅典娜中产生的错误消息:
Your query has the following errors:SYNTAX_ERROR: line 1:1: Incorrect number of parameters: expected 2 but found 0
虽然这是雅典娜对查询的解释:
select "col1", "col2", "adv_date"
from "AwsDataCatalog"."test"."test_table"
where "adv_date" >= ? and "adv_date" < ?
我已联系 Power BI 支持人员,但未成功。 有没有人对此有解决方法? 如果需要,很乐意提供更多信息。
我认为您正在尝试修复过滤行步骤,但可以通过修复步骤 1 - 源(对雅典娜运行实际直接查询)来实现增量加载
从另一个问题线程粘贴我的答案:
我想我已经设法使用 Athena 在 Power BI 中实现了"增量加载"。这(仍然)不允许你查看本机查询,但你仍可以让 Power BI 操作直接查询来实现它。
为避免在 Athena 中完全扫描 S3 数据 - 您必须在数据集中启用分区。无需偏离主题,一旦通过 Athena 对 S3 数据进行分区,您就可以用几天/几个月/几年来精确定位数据集,而无需扫描整个数据集。
完成此操作后,可以通过运行此视频(20:00 以后)中所述的直接查询来实现增量加载,并实现资源高效的查询执行。
最终查询将如下所示 -
Odbc.Query("dsn=Simba Athena",
"SELECT * FROM tablename
WHERE year >= " & DateTime.ToText(RangeStart, "yyyy") & "
AND month >= " & DateTime.ToText(RangeStart, "MM") & "
AND day >= " & DateTime.ToText(RangeStart, "dd") & "
AND year <= " & DateTime.ToText(RangeEnd, "yyyy") & "
AND month <= " & DateTime.ToText(RangeEnd, "MM") & "
AND day <= " & DateTime.ToText(RangeEnd, "dd") & "
")
编辑#1:或干脆
Odbc.Query("dsn=Simba Athena",
"SELECT * FROM tablename
WHERE dt >= '" & DateTime.ToText(RangeStart, "yyyy/MM/dd") & "'
AND dt <= '" & DateTime.ToText(RangeEnd, "yyyy/MM/dd") & "'
")
Microsoft的一个人指示我使用Odbc.Query而不是使用Odbc.Datasource。以下是他发送的URL中的一个例子:
let
Source = Odbc.Query("dsn=Google BigQuery", "SELECT line_of_business, category_group FROM masterdata.item_d WHERE line_of_business in ('" & LOB & "')")
in
Source
我已经尝试过这个并且它有效,也许你也可以使用它。
所以我有各种各样的答案 - 我不相信目前可以使用标准连接将 Athena 设置为Power BI 中的增量源。
但是,可以通过数据流执行此操作,但需要注意的是,对于我们的环境来说,它不是特别快。 但是它确实有效。
直接查询也对我有用,但我最终只是将过滤器移动到 Athena 内部的视图 - 可悲的是,不能信任 PBI 来处理这样的事情。
无论如何,M 查询有一个(某种)解决方法,以防其他人需要它:我发现如果在筛选器之前添加某些步骤,Power BI 将不会尝试任何查询折叠,因此不会弄乱它发送到 Athena 的 SQL。就我而言,我添加了一个重复的列并重命名了它。当然,PBI仍然会加载所有数据,因为它当然会,但是一旦 que 查询完成获取数据,它就会转储它。这样,即使加载时间保持不变,我们至少可以节省文件空间。
抱歉,如果我在这个答案中听起来很沮丧 - 原因是我对 Power BI 感到非常沮丧。