Data Factory V2 запрашивает хранилище таблиц Azure, но использует значение подстановки

#azure #nosql #azure-table-storage #lookup-tables #azure-data-factory-2

#azure #nosql #azure-table-storage #подстановочные таблицы #azure-data-factory

Вопрос:

У меня есть таблица водяных знаков SQL, которая содержит последнюю дату в моей целевой таблице

Мои исходные данные поступают из таблицы хранилища Azure, а дата и время — это строка

Я настроил дату и время в таблице водяных знаков в соответствии с форматом в хранилище таблиц Azure

Я создаю задачу поиска и копирования

введите описание изображения здесь

Если я жестко закодирую дату в запросе для источника и запущу, это отлично сработает createdAt ge ‘2019-03-06T14:03:11.000Z’

Но, очевидно, я не хочу жестко кодировать это значение. Я хочу использовать дату из подстановки

Но когда я заменяю жестко заданную дату значением подстановки

Созданный в ge ‘activity(‘LookupWatermarkOld’).output’

Я получаю сообщение об ошибке

{
«ErrorCode»: «2200»,
«message»: «ErrorCode=FailedStorageOperation», Тип=Microsoft.dataTransfer.Common.Общий.Исключение HybridDeliveryException, сообщение = Сбой операции хранения со следующей ошибкой ‘Удаленный сервер вернул ошибку: (400) неверный запрос.’.,Источник =, «Тип =Microsoft.WindowsAzure.Хранение.Исключение StorageException, Сообщение = Удаленный сервер вернул ошибку: (400) Неверный запрос., Источник = Microsoft.WindowsAzure.Хранилище, StorageExtendedMessage=Синтаксическая ошибка в позиции 42 в операции ‘createdAt ge'(‘LookupWatermarkOld’).output».nRequestId:8c65ced9-b002-0051-79d9-d41d49000000nTime:2019-03-07T11:35:39.0640233Z,,»Type=System.Net.WebException,Message= Удаленный сервер вернул ошибку: (400) Неверный запрос., Источник = Microsoft.WindowsAzure.Хранилище,'»,
«failureType»: «Ошибка пользователя»,
«target»: «CopyMentions»
}

Кто-нибудь может мне помочь с этим? Как вы используете значение подстановки в запросе таблицы Azure?

Ответ №1:

проверьте это:

1) Действие подстановки. Поле запроса:

ВЫБЕРИТЕ MAX (имя_сумки водяного знака) в качестве последнего идентификатора ИЗ TableName;

Кроме того, убедитесь, что вы выбрали опцию «Только первая строка».

2) При копировании данных используйте действие query. Поле запроса:

@concat(‘ВЫБЕРИТЕ * ИЗ имени таблицы как s, ГДЕ s.Имя_коллектива водяного знака > «‘, activity(‘LookupActivity’).output.firstRow.lastID, «»)

Комментарии:

1. Я изменился на @concat (‘ВЫБЕРИТЕ значение водяного знака ИЗ промежуточного. таблица водяных знаков как s, ГДЕ значение водяного знака НЕ РАВНО NULL И s.Значение водяного знака> «‘, activity(‘LookupWatermarkOld’).output, «») но я все еще получаю ошибки

2. Неверный запрос., Источник = Microsoft. WindowsAzure. Хранилище, StorageExtendedMessage=Синтаксическая ошибка в позиции 21 в ‘ВЫБЕРИТЕ значение водяного знака ИЗ промежуточного. таблица водяных знаков как s, ГДЕ s. Значение водяного знака > ‘{«firstRow»:{«Значение водяного знака»: «2019-03-08T12:03:55.000Z»}, «Effective integrationruntime»: «DefaultIntegrationRuntime (Запад Europe)»}».nRequestId:2dc1c57f-8002-00bc-0ccb-d514cd000000nTime:2019-03-08T16:25:07.6841634Z,,»Type=System.Net.WebException,

3. Это потому, что фактическая исходная таблица является таблицей хранилища Azure, потому что, похоже, она выдает ошибку непосредственно перед From? Я попытался изменить его на * вместо использования имени столбца, но сразу после этого выдает ошибку *

Ответ №2:

Наконец-то я получил некоторую помощь по этому вопросу, и это работает с

Создано с помощью gt ‘@{activity(‘LookupWatermarkOld’).output.firstRow.Значение водяного знака}’

значение Waterark — это имя столбца из таблицы подстановки SQL

Подстановка создает массив, поэтому вам нужно указать firstRow из этого массива

И завершает » таким образом, оно используется как строковое значение

Ответ №3:

—Для недавнего ADFv2

Используйте водяной знак / значение подстановки / выходное значение в параметре.

Пример: ParamUserCount = @{activity('LookupActivity').output.count}

или для функции вывода

https://i.stack.imgur.com/opFWS.png

и вы можете использовать его в запросе как

Пример: "select * from userDetails where usercount = {$ParamUserCount}"

убедитесь, что вы заключили запрос в » » для установки в качестве строки, а параметр в запросе должен быть заключен в {}

введите описание изображения здесь