Power BI Athena: постепенное обновление
Я успешно использую инкрементальное обновление Power BI ежедневно с источником данных MySQL. Тем не менее, я не могу настроить это с AWS Athena, потому что, похоже, последний интерпретирует значения в требуемых параметрах RangeStart
а также RangeEnd
как строки. Поскольку источник данных составляет около 50 миллионов строк, я бы предпочел не запрашивать это с нуля каждый день.
В этом видео от Guy in a Cube вы ясно видите, что запрос, отправленный Power BI в Azure, имеет функцию преобразования в datetime2 - что-то вроде этого, по-видимому, отсутствует в Athena/Presto, которому для выполнения требуется конструктор типов TIMESTAMP. Сравнение даты и времени ( /questions/28946541/presto-staticheskaya-data-i-metka-vremeni-v-predlozhenii-where/28946556#28946556) и, конечно, инкрементальное обновление должно основываться на полях даты и времени. Я использую поле даты и времени adv_date
для дополнительной нагрузки.
Вот как выглядит запрос M в Power Query Editor:
= 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 безуспешно. У кого-нибудь есть обходной путь для этого случайно? Рад предоставить больше информации, если это необходимо.
4 ответа
Парень из 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
Я пробовал это, и это сработало, возможно, вы тоже можете это использовать.
Я думаю, вы пытаетесь исправить шаг Filtered Rows , но, возможно, сможете добиться дополнительной нагрузки, исправив шаг 1 - Source (выполняя фактический прямой запрос к 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") & "
")
Итак, у меня есть своего рода ответ - я не верю, что в настоящее время можно настроить Athena в качестве дополнительного источника в Power BI, используя стандартное соединение.
Однако это можно сделать с помощью потока данных, но с оговоркой, что для нашей среды это было не очень быстро. Однако это работает.
Прямой запрос также работает для меня, но в конце концов я просто переместил фильтры в представление внутри Афины - к сожалению, PBI нельзя доверять, чтобы обрабатывать подобные вещи.
В любом случае, есть (своего рода) обходной путь для запросов M, на случай, если это понадобится кому-то еще: я обнаружил, что если вы добавите определенные шаги перед фильтром, Power BI не будет пытаться свернуть запрос, поэтому не испортит SQL it посылает Афине. В моем случае я добавил дублированный столбец и переименовал его. PBI, конечно, по- прежнему будет загружать все данные, потому что, конечно, это будет, но он сбросит их, как только запрос очереди завершит выборку данных. Таким образом, по крайней мере, мы можем сэкономить место в файле, даже если время загрузки останется прежним.
Извините, если я расстроен этим ответом - причина в том, что я невероятно разочарован Power BI.