Ошибка несоответствия входных данных при загрузке объектов с вложенными массивами в набор данных в Adobe Experience Platform

Вопрос или проблема

При попытке вставить объекты на основе вложенных массивов в набор данных в Adobe Experience Platform возникает ошибка несоответствия входных данных.

Запрос выглядит следующим образом:

insert into b_array_processed_data_wip(_spnam.profileIds,_spnam.arrayOfObjects)
SELECT
_spnam.profileIds.airB_UID as UID,
ARRAY_AGG(STRUCT(_spnam.arrayOfObjects.coolestInt,_spnam.arrayOfObjects.FavDessert)) AS arrayOfObjects
FROM
b_array_processed_data_wip
GROUP BY
_spnam.profileIds.air_UID

profileIds и arrayOfObjects оба являются объектами.

Ошибка выглядит следующим образом:
ErrorCode: 42601 queryId: 46c028bc-0d03-4724-be1d-ce46752bc260 Обнаружена ошибка синтаксиса. Причина: [строка 1:49: несоответствие входных данных ‘.’ ожидая {‘,’, ‘)’}]

Я пытался вставить в таблицу без имен столбцов (просто чтобы попробовать, хотя это неверно) и также пытался использовать имена столбцов без полностью квалифицированного имени, но в этом случае также возникает ошибка.

Ответ или решение

Ошибка "mismatch input" при попытке вставки объектов на основе вложенных массивов в набор данных Adobe Experience Platform может быть связана с неправильным использованием синтаксиса SQL в вашем запросе. Давайте рассмотрим, как исправить это.

Проблема

Ваша текущая попытка вставки включает в себя использование точечной (.) нотации при указании имен столбцов объектов. В вашем случае вы используете _spnam.profileIds и _spnam.arrayOfObjects, что вызывает синтаксическую ошибку. В SQL для работы с объектами и массивами нужно следовать определенным правилам.

Решение

Вам нужно исключить использование точечной нотации в операторе INSERT. Прежде чем выполнить вставку, убедитесь, что вы правильно получили данные из источника. В вашем случае запрос может выглядеть следующим образом:

INSERT INTO b_array_processed_data_wip (profileIds, arrayOfObjects)
SELECT
  STRUCT(airB_UID) AS profileIds,
  ARRAY_AGG(STRUCT(arrayOfObjects.coolestInt, arrayOfObjects.FavDessert)) AS arrayOfObjects
FROM 
  b_array_processed_data_wip
GROUP BY
  airB_UID

Объяснение

  1. Изменения в INSERT: Мы исключили префикс _spnam. из имен полей в операторе вставки. Теперь просто определяем profileIds и arrayOfObjects без дополнительных обозначений.

  2. Использование STRUCT: Мы оборачиваем airB_UID в STRUCT, чтобы убедиться, что он соответствует типу данных для profileIds.

  3. ARRAY_AGG и GROUP BY: Мы продолжаем использовать ARRAY_AGG, чтобы собрать элементы в массив, однако, сначала убедитесь, что arrayOfObjects правильно определён.

Проверка типов данных

Также убедитесь, что типы данных profileIds и arrayOfObjects в вашей таблице b_array_processed_data_wip совпадают с теми, что вы пытаетесь вставить. Это может вызвать ошибки, если типы данных не совпадают.

Заключение

Проверьте указанные изменения и попробуйте выполнить запрос снова. Если возникнут дополнительные ошибки, пожалуйста, предоставьте больше информации о структуре ваших данных и типах, чтобы я мог предложить более точные решения.

Оцените материал
Добавить комментарий

Капча загружается...