Фабрика данных - SQL-запрос исторических данных с периодом в одну минуту

Я пытаюсь сделать операцию копирования для копирования данных из локальной базы данных SQL с фабрикой данных. Мне нужно динамически изменять запрос, поэтому он принимает диапазон дат, например диапазоны каждую минуту: Так, например: первая копия будет использовать динамический контент как ... И DateTime > '20230131 13:06' И DateTime < '20230131 13:07'

а затем следующий запуск будет: И DateTime > '20230131 13:07' И DateTime < '20230131 13:08'

Я пытался использовать такие переменные, как: И DateTime > @{переменные('время начала')} И DateTime < @{переменные('endtime')}

Это работает, когда я вручную задаю время переменным, но фактические данные за год, поэтому мне нужно прочитать время начала и окончания из файла или как-то автоматизировать это. Я пытался использовать блок «ForEach», но проблема в том, что я могу установить только одну переменную в качестве цикла, либо время начала, либо время окончания. какое лучшее решение для этого? Как я могу использовать блок «ForEach» во время начала и ввести время окончания таким образом, чтобы оно было через одну минуту после времени начала?

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
72
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете прочитать файл времени начала, прокрутить его и добавить минуту к каждому времени в цикле for.

  • Ниже приведены результаты моего поиска CSV-файла, содержащего start_times.

  • Прокрутите эти данные. Внутри для каждого у меня есть 2 заданных переменных действия, одно для преобразования времени начала в допустимый формат, поэтому минуты можно добавить с помощью функции addMinutes().
@concat(substring(item().start_time,0,4),'-',substring(item().start_time,4,2),'-',substring(item().start_time,6,2),' ',substring(item().start_time,9,5))

  • Теперь для этого формата добавьте минуты и замените значение -, объединенное выше.
@replace(addminutes(variables('tp'),1,'yyyy-MM-dd hh:mm'),'-','')

Это блестяще. Когда я использую AND DateTime > @{variables('ts')}, код sql похож на AND DateTime > 20230131 13:07, что выдает ошибку, поскольку мне нужна дата, окруженная знаком ', например: AND DateTime > '20230131 13:07' много раз пробовал с @concat по разным сценариям использования ''' и '''', но это не сработало. Можете ли вы помочь мне в этом хорошо? :)

Mv1365 07.02.2023 10:37

Вы можете попробовать открыть новый вопрос для этой новой проблемы, поскольку проблема с этой проблемой решена.

Saideep Arikontham 07.02.2023 10:41

Я здесь новенький, поэтому через 2 дня мне нельзя задавать новый вопрос :)

Mv1365 07.02.2023 11:56

Никогда не знал, что это вещь. Вы можете просто заключить его в одинарные кавычки вот так select * from my_table where start_time>'@{pipeline().parameters.start_time}' and end_time<'@{pipeline().parameters.end_time}'.

Saideep Arikontham 07.02.2023 11:58

Я не уверен, как это работает в фабрике данных, но в t-sql вы можете увеличить свои переменные на одну минуту с помощью функции DATEADD. Скрипка

DATEADD(*interval*, *number of intervals*, *start datetime*)

Я проверил книги в Интернете, и похоже, что фабрика данных использует datetime_add. Хотя, похоже, работает так же.

DATETIME_ADD(*interval*, *number of intervals*, *start datetime*)

Надеюсь, это поможет.

DECLARE @startdate  datetime = '20230131 13:06'
      , @enddate    datetime
      , @finishdate datetime;
    SET @enddate    = DATEADD(minute, 1, @startdate);
    SET @finishdate = DATEADD(minute, 100, @startdate); --will loop 100 times. 
                                                        --change that to whatever you want.

  WHILE @startdate < @finishdate
    BEGIN
      SELECT data 
        INTO newTable
        FROM oldTable
       WHERE oldTableDate >= @startdate 
         AND oldTableDate <= @enddate;

      SELECT @startdate = DATEADD(minute, 1, @startdate),
             @enddate = DATEADD(minute, 1, @enddate)
     END

Другие вопросы по теме