Я успешно использую ежедневное добавочное обновление Power BI с источником данных MySQL. Однако я не могу настроить это с помощью AWS Athena, потому что последний, по-видимому, интерпретирует значения в обязательных параметрах RangeStart
и RangeEnd
как строки. Поскольку источник данных составляет около 50 миллионов строк, я бы предпочел не запрашивать его с нуля каждый день.
В это видео из парень в кубе вы можете ясно видеть, что запрос, отправленный Power BI в Azure, имеет функцию преобразовать в дату и время2 — что-то вроде этого предположительно отсутствует для 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
А вот как Афина интерпретирует запрос:
select "col1", "col2", "adv_date"
from "AwsDataCatalog"."test"."test_table"
where "adv_date" >= ? and "adv_date" < ?
Я безуспешно обращался в службу поддержки Power BI. У кого-нибудь есть обходной путь для этого случайно? С удовольствием предоставим дополнительную информацию, если это необходимо.
Привет @ᐅdevrimbaris, см. мой ответ ниже.
Итак, у меня есть своего рода ответ: я не верю, что в настоящее время можно настроить Athena в качестве добавочного источника в Power BI, используя стандартное соединение.
Однако это можно сделать через поток данных, с той оговоркой, что для нашей среды это было не особенно быстро. Однако это работает.
Парень из 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 - к сожалению, PBI нельзя доверять для обработки таких вещей.
В любом случае, есть (своего рода) обходной путь для M-запросов, на случай, если он понадобится кому-то еще: я обнаружил, что если вы добавите определенные шаги перед фильтром, Power BI не будет пытаться сворачивать запросы, поэтому не испортит SQL. отправляет к Афине. В моем случае я добавил дублированный столбец и переименовал его. PBI, конечно, будет все равно загрузить все данные, потому что, конечно, будет, но он сбросит его, как только запрос que завершит выборку данных. Таким образом, по меньшей мере мы можем сэкономить место в файле, даже если время загрузки останется прежним.
Извините, если я кажусь разочарованным в этом ответе - причина в том, что я невероятно разочарован Power BI.
Я думаю, вы пытаетесь исправить шаг Отфильтрованные строки, но, возможно, сможете добиться дополнительной нагрузки, исправив Шаг 1 — Источник (запуск фактического прямого запроса к Athena)
Вставка моего ответа на это из другого ветка вопросов:
Я думаю, что мне удалось добиться «дополнительной нагрузки» в Power BI с помощью Athena. Это (по-прежнему) не позволяет вам просматривать собственный запрос, но вы все равно можете заставить Power BI манипулировать прямым запросом для его реализации.
Чтобы избежать полного сканирования данных S3 в Athena, вы должны включить Перегородки в своем наборе данных. Не отходя от темы, после того, как вы разделите данные S3 через Athena, вы сможете указать наборы данных с днями/месяцами/годами без сканирования всего набора данных.
Как только вы это сделаете, вы сможете достичь добавочной нагрузки, запустив прямые запросы, как указано в видео это (начиная с 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") & "
")
Есть новости по этому поводу? У меня такая же проблема. Почему-то PowerBI не понимает, что он должен помещать в запрос значение параметра.