Вопрос или проблема
При попытке вставить объекты на основе вложенных массивов в набор данных в 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
Объяснение
-
Изменения в INSERT: Мы исключили префикс
_spnam.
из имен полей в операторе вставки. Теперь просто определяемprofileIds
иarrayOfObjects
без дополнительных обозначений. -
Использование STRUCT: Мы оборачиваем
airB_UID
вSTRUCT
, чтобы убедиться, что он соответствует типу данных дляprofileIds
. -
ARRAY_AGG и GROUP BY: Мы продолжаем использовать
ARRAY_AGG
, чтобы собрать элементы в массив, однако, сначала убедитесь, чтоarrayOfObjects
правильно определён.
Проверка типов данных
Также убедитесь, что типы данных profileIds
и arrayOfObjects
в вашей таблице b_array_processed_data_wip
совпадают с теми, что вы пытаетесь вставить. Это может вызвать ошибки, если типы данных не совпадают.
Заключение
Проверьте указанные изменения и попробуйте выполнить запрос снова. Если возникнут дополнительные ошибки, пожалуйста, предоставьте больше информации о структуре ваших данных и типах, чтобы я мог предложить более точные решения.