Ошибка: схема запроса не соответствует схеме таблицы. QuerySchema = ('длинный')

Я запускаю команду .set-or-append для переноса из одной таблицы в другую. Я знаю, что запрос из исходной таблицы в порядке, и целевая таблица, если она существует, должна иметь такой же запрос, но в противном случае команда должна просто создать его. Изначально у меня не было с этим проблем. Но некоторые из моих запросов .set-or-append получали эту ошибку:

Invalid query for distributed set / append / replace operation. Error: Query schema does not match table schema. QuerySchema=('long'), TableSchema=('datetime,string,string,string,string,dynamic,dynamic,dynamic'). Query:...'

Я точно знаю, что схемы совпадают. Я запускал одну и ту же команду снова и снова, и примерно с 3-й попытки звонок был успешным. Что не имеет смысла для меня. Итак, что это за ошибка выше и почему та же команда работала после сбоя без каких-либо изменений в запросе?

Выполняемый мной запрос / команда по существу следующая:

.set-or-append async TargetTable <|
SourceTable
| where __id in ("...", "....", ........) // is aproximately 250 distinct ids in "in" operator

person Jeremy Fisher    schedule 08.08.2020    source источник
comment
Я бы порекомендовал вам включить запрос в свой вопрос, чтобы лучше понять, что вы используете. Вы также можете использовать getschema для проверки фактического совпадения схемы запроса и схемы целевой таблицы. Обратите внимание, что если несоответствие несовместимо, оно может предложить вам использовать оператор запроса или плагин, схема вывода которого зависит от входных данных и может варьироваться в зависимости от выполнения (например, pivot или bag_unpack)   -  person Yoni    schedule 08.08.2020
comment
обновил свой вопрос запросом. нет ничего подобного, просто стандартный оператор IN. Я проверил, что схемы такие же.   -  person Jeremy Fisher    schedule 08.08.2020
comment
вы уверены, что не включили агрегирование в конце запроса, например | summarize count()? если да, укажите идентификатор запроса клиента для вашей неудавшейся попытки   -  person Yoni    schedule 08.08.2020
comment
Я посмотрел на столбец .show commands Text, чтобы просмотреть свой запрос, и не увидел никаких сводок. Идентификатор активности клиента KNC.execute;adabeccc-2435-4680-a8be-8f3ac6b1011c. На данный момент я решил эту проблему, но это похоже на законную ошибку. Мой запрос был очень большим (он построен программно и включает в себя большой список в операторе IN), поэтому, возможно, столбец Text усек запрос, и поэтому я не вижу сводку?   -  person Jeremy Fisher    schedule 09.08.2020


Ответы (2)


Похоже, что используемый вами запрос расширяет данные с помощью дополнительного столбца: extend hashBucket = hash(row_number(), ...) | where hashBucket == ... - и, таким образом, вы получаете несоответствие схемы.

Возможно, вы намеревались фильтровать на основе hashBucket, и в этом случае вы можете просто использовать фильтрацию без расширения: where hash(row_number(), ...) == ...

person Alexander Sloutsky    schedule 09.08.2020
comment
вы правы, я пробовал это однажды. Однако, когда я посмотрел на столбец «Текст», я не увидел фильтр хэшбакета. Возможно ли, что столбец «Текст» усекает запрос с учетом его длины? - person Jeremy Fisher; 10.08.2020
comment
Какой UX вы используете для просмотра текста? - person Alexander Sloutsky; 10.08.2020
comment
Я использовал веб-интерфейс с портала ms - person Jeremy Fisher; 10.08.2020
comment
Можете ли вы добавить скриншот? - person Alexander Sloutsky; 11.08.2020

Йони, не могли бы вы объяснить, что вы имеете в виду под bag_unpack несогласованным несоответствием? Я выровнял свой bag_unpack ... project-reorder, чтобы он соответствовал целевой таблице, в которую я распаковываю, но он просто меняет несколько типов переменных в сообщении об ошибке:

    Query schema does not match table schema. 
    QuerySchema=(
    'datetime,long,datetime,string,string,datetime,string,
    long,real,string,bool,guid,guid,string,real'), 
    TableSchema=(
    'datetime,long,datetime,string,string,datetime,string,
    long,real,guid,guid,string,bool,string,real')

действительно запутался, что такое схема таблицы и схема запроса на этом этапе.


Для справки мой запрос выглядит так:

    .set-or-append async apiV2FormationSearchTransform <|
    //set notruncation;
    apiV2FormationSearchLatest
    | where hash(toguid(fullRecord["id"]), 1) == 0
    | project fullRecord
    | evaluate bag_unpack(fullRecord)
    | extend dateCatalogued = todatetime(column_ifexists("dateCatalogued", ""))
    , simpleId = tolong(column_ifexists("simpleId", ""))
    , dateLastModified = todatetime(column_ifexists("dateLastModified", ""))
    , reportedFormationName = tostring(column_ifexists("reportedFormationName", ""))
    , comments = tostring(column_ifexists("comments", ""))
    , dateCreated = todatetime(column_ifexists("dateCreated", ""))
    , formationName = tostring(column_ifexists("formationName", ""))
    , internalId = tolong(column_ifexists("internalId", ""))
    , topDepth = toreal(column_ifexists("topDepth", ""))
    , wellId = column_ifexists("wellId", toguid(""))
    , id = column_ifexists("id", toguid(""))
    , methodObtained = tostring(column_ifexists("methodObtained", ""))
    , isTarget = tobool(column_ifexists("isTarget", ""))
    , completionId = tostring(column_ifexists("completionId", ""))
    , baseDepth = toreal(column_ifexists("baseDepth", ""))

    | project-reorder dateCatalogued
    , simpleId
    , dateLastModified
    , reportedFormationName
    , comments
    , dateCreated
    , formationName
    , internalId
    , topDepth
    , wellId
    , id
    , methodObtained
    , isTarget
    , completionId
    , baseDepth

и это результат getschema моей целевой таблицы:

    dateCatalogued          0   System.DateTime datetime
    simpleId                1   System.Int64    long
    dateLastModified        2   System.DateTime datetime
    reportedFormationName   3   System.String   string
    comments                4   System.String   string
    dateCreated             5   System.DateTime datetime
    formationName           6   System.String   string
    internalId              7   System.Int64    long
    topDepth                8   System.Double   real
    wellId                  9   System.Guid guid
    id                      10  System.Guid guid
    methodObtained          11  System.String   string
    isTarget                12  System.SByte    bool
    completionId            13  System.String   string
    baseDepth               14  System.Double   real
person steven hurwitt    schedule 11.08.2020
comment
Может быть, причина ошибки в том, что у вас есть пустая строка между оператором «продлить» и «изменить порядок проекта»? Похоже, что "проект-переупорядочение" не доходит до сервера. - person Alexander Sloutsky; 11.08.2020
comment
так что на самом деле это немного сработало, но потом все равно не удалось? действительно запутался сейчас - person steven hurwitt; 11.08.2020
comment
Если это по-прежнему не удается, укажите ClientRequestId. - person Alexander Sloutsky; 11.08.2020
comment
это самый последний идентификатор операции: ec43c3c5-046b-4010-9aab-94405347622f странно, что он работает, если я сначала отбрасываю таблицу, но терпит неудачу, когда ее нужно добавить. - person steven hurwitt; 11.08.2020
comment
Вероятно, мы не говорим об одном и том же идентификаторе - такой идентификатор не отображается на стороне сервера. Какую ошибку вы видите сейчас? - person Alexander Sloutsky; 12.08.2020