【问题标题】:Power BI Athena Incremental RefreshPower BI Athena 增量刷新
【发布时间】:2019-12-05 00:14:50
【问题描述】:

我已经成功地将 Power BI 的每日增量刷新与 MySQL 数据源一起使用。但是,我无法使用 AWS Athena 进行配置,因为后者似乎将所需参数 RangeStartRangeEnd 中的值解释为字符串。由于数据源大约有 5000 万行,我宁愿避免每天从头开始查询。

在来自 Guy in a Cubethis video 中,您可以清楚地看到 Power BI 发送到 Azure 的查询具有 convert to datetime2 函数 - 类似这样Athena/Presto 可能缺少,它需要类型构造函数 TIMESTAMP 才能进行日期时间比较 (https://stackoverflow.com/a/38041684/3675679),当然增量刷新必须基于日期时间字段。我使用日期时间字段adv_date 进行增量加载。

这是 M 查询在 Power Query 编辑器中的样子:

= Table.SelectRows(#"Removed Columns1", each [adv_date] >= RangeStart and [adv_date] < RangeEnd) 

这是 Athena 中产生的错误消息:

Your query has the following errors:SYNTAX_ERROR: line 1:1: Incorrect number of parameters: expected 2 but found 0 

虽然 Athena 是这样解释查询的:

    select "col1", "col2", "adv_date" 
    from "AwsDataCatalog"."test"."test_table" 
    where "adv_date" >= ? and "adv_date" < ?

我已联系 Power BI 支持,但未成功。有没有人有办法解决这个问题?如果需要,很乐意提供更多信息。

【问题讨论】:

  • 这方面有什么更新吗?我有同样的问题。不知何故,PowerBI 不明白它应该将参数值放在查询中。
  • 嗨@ᐅdevrimbaris,请参阅下面的答案。

标签: powerbi etl presto amazon-athena incremental-load


【解决方案1】:

所以我有各种各样的答案 - 我不相信目前可以使用标准连接将 Athena 设置为 Power BI 中的增量源。

但是,可以通过数据流执行此操作,但需要注意的是,对于我们的环境来说,它并不是特别快。但是它确实有效。

【讨论】:

    【解决方案2】:

    微软的一个人指示我使用 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
    

    我试过了,效果很好,也许你也可以用这个。

    【讨论】:

      【解决方案3】:

      直接查询也适用于我,但我最终只是将过滤器移到了 Athena 内部的一个视图中 - 遗憾的是,PBI 不能被信任来处理这样的事情。

      无论如何,M 查询有一个(某种)解决方法,以防其他人需要它:我发现如果您在过滤器之前添加某些步骤,Power BI 将不会尝试任何查询折叠,因此不会搞砸它发送给 Athena 的 SQL。就我而言,我添加了一个重复的列并将其重命名。当然,PBI仍然会加载所有数据,因为它当然会,但是一旦查询完成获取数据,它就会转储它。这样至少我们可以节省文件空间,即使加载时间保持不变。

      对不起,如果我对这个答案感到沮丧 - 原因是我对 Power BI 感到非常沮丧。

      【讨论】:

        【解决方案4】:

        我认为您正在尝试修复 Filtered Rows 步骤,但可能能够通过修复步骤 1 - 源(对 Athena 运行实际直接查询)来实现增量负载

        从另一个 question thread 粘贴我对此的回答:

        我想我已经设法使用 Athena 在 Power BI 中实现了“增量负载”。这(仍然)不允许您查看本机查询,但您仍然可以让 Power BI 操纵直接查询来实现它。

        为避免在 Athena 中全面扫描 S3 数据 - 您必须在数据集中启用 Partitions。在不偏离主题的情况下,一旦通过 Athena 对 S3 数据进行分区,您就可以用天/月/年精确定位数据集,而无需扫描整个数据集。

        完成此操作后,您可以通过运行直接查询来实现增量负载,如this 视频(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") & "
        ")
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-04-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-03-18
          • 1970-01-01
          相关资源
          最近更新 更多