Как преобразовать pipe (). Parameters.windowStart в эпоху в фабрике данных Azure. Копировать конвейерный запрос. - PullRequest
0 голосов
/ 15 января 2019

У меня есть столбец отметки времени в DocDb, я хочу запросить его в конвейере копирования фабрики данных Azure, который копирует DocDb в озеро данных Azure

Я бы хотел

select * from c
where c._ts > '@{pipeline().parameters.windowStart}'

Но я получил

Errors":["An invalid query has been specified with filters against path(s) that are not range-indexed.

В политике DocDb у меня есть

"includedPaths": [
    {
        "path": "/*",
        "indexes": [
            {
                "kind": "Range",
                "dataType": "Number",
                "precision": -1
            },
            {
                "kind": "Hash",
                "dataType": "String",
                "precision": 3
            }
        ]
    }
  ]

Я думаю, что это должно позволить _ts int64 быть опрошенным по диапазону.

Где я ошибся?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Спасибо, @ Джей.

Я использовал UDF

function dateTime2Epoch(dateTimeString){
    return Math.trunc(new Date(dateTimeString).getTime()/1000);
}

в Космосе БД. Затем в запросе фабрики данных Azure

select * from c 
where c._ts >= udf.dateTime2Epoch('@{pipeline().parameters.windowStart}')
  and c._ts < udf.dateTime2Epoch('@{pipeline().parameters.windowEnd}')

Однако запрос кажется очень медленным. Я обновлю это, когда найду больше.

Обновление : Закончено копирование целиком.

0 голосов
/ 15 января 2019

Я воспроизвожу вашу проблему с вашим sql и вашей политикой индекса.

enter image description here

Исходя из моих наблюдений, кажется, что фильтр обрабатывается как String, а не Int.Вы можете удалить ' в вашем sql и попробовать еще раз, он работает для меня.

SQL:

select * from c
where c._ts > @{pipeline().parameters.windowStart}

Выход:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...