基于AWS Athena查询的PowerBI Folding on Native Query-增量刷新

问题描述 投票:0回答:3

我正在尝试确定 AWS Athena 查询是否成功折叠在 PowerBI 中的本机查询上,以设置增量刷新。我创建了参数,根据这些参数过滤了日期时间列,并尝试了诊断工具(请参阅 https://www.youtube.com/watch?v=QEFze-LdLqo 从 4:50 开始),但它一直在运行并且没有显示任何结果。因此,我正在尝试在高级编辑器中查询的方法(https://www.youtube.com/watch?v=KEh2Udm6ibA&feature=youtu.be 20:00 起)。但由于这个示例是用 SQL 编写的,并且我正在使用 AWS Athena,所以我不断收到错误。以下是我迄今为止尝试过的高级编辑器查询:

示例1:

> let
>     Source = Odbc.Query("dsn=Simba Athena", "SELECT * FROM ""databasename"".""tablename"" where StartTimeCET>= ' " &
> DateTime.From(RangeStart) & "' and StartTimeCET< '" &
> DateTime.From(RangeEnd) & "' ") in Source

错误:我们无法将运算符 & 应用于 Text 和 DateTime 类型。

示例2:

> let
>     Source= Odbc.Query("dsn=Simba Athena", "SELECT * FROM ""database"".""tablename""
> where StartTimeCET>= ' "  DateTime.From(RangeStart)  "' and
> StartTimeCET< '"  DateTime.From(RangeEnd)  "' ")

错误:需要令牌逗号。

示例3:

      let
     Source = Odbc.Query("dsn=Simba Athena", "SELECT * FROM ""database"".""tablename"" where StartTimeCET>= ' "" &
   Text.From(RangeStart) & ""' and StartTimeCET < '"" & Text.From(RangeEnd) & "" ' ") in Source

错误:解析查询时出现异常 SELECT * FROM ""database"".""tablename"" where StartTimeCET>= ' " & Text.From(RangeStart) & "' 和 StartTimeCET < '" & Text.From(RangeEnd) & " ' with parser version athena_v1 and context QueryExecutionContext(queryId=null, database=default, catalog=null) [Execution ID: ]

关于如何为 AWS Athena 编写此类高级编辑器查询有什么想法吗?为了简化,我想根据 RangeStart 和 RangeEnd 参数过滤 PowerBI 中的高级编辑器查询。参数和 StartTimeCET 列都是日期/时间类型。

powerbi amazon-athena
3个回答
1
投票

我想我解决了错误,但仍然无法“查看本机查询”。

您可以通过使用 Presto 语法编写并使用具有适当日期格式的 DateTime.ToText() 函数来通过手动 Athena 直接查询步骤,即

Odbc.Query("dsn=Simba Athena", 
"SELECT * FROM tablename 
WHERE StartTimeCET >= TIMESTAMP '" & DateTime.ToText(RangeStart, "yyyy-MM-dd") & "' 
AND StartTimeCET < TIMESTAMP '" & DateTime.ToText(RangeEnd, "yyyy-MM-dd") & "'
")

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

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

完成此操作后,您可以通过运行您共享的上一个视频链接中提到的直接查询来实现增量负载,并实现资源高效的查询执行。

最终查询将类似于 -

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") & "
")

编辑#2:或者简单地

    Odbc.Query("dsn=Simba Athena", 
        "SELECT * FROM tablename 
        WHERE dt >= '" & DateTime.ToText(RangeStart, "yyyy/MM/dd") & "'
        AND dt <= '" & DateTime.ToText(RangeEnd, "yyyy/MM/dd") & "'
    ")

0
投票

始终 >= RangeStart 和 < RangeEnd to avoid duplicates


0
投票

如果我们使用ODBC。(“dsn=xyz”,“sql”),默认情况下不会进入“导入”模式吗? Power BI 本机查询不支持 Athena。

© www.soinside.com 2019 - 2024. All rights reserved.