Мне нужно экспортировать данные Google Analytics из набора данных «события», хранящегося в BigQuery.
У меня проблема с рекламой в действии копирования данных при попытке экспортировать данные, ошибка, которую я получаю, следующая:
Failure happened on 'Source' side. ErrorCode=UserErrorOdbcOperationFailed,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=ERROR [HY000] [Microsoft][BigQuery] (310) Storage API Error: Error thrown in GAvroDataCell:BuildDefaultAvroCell.Invalid BigQueryType specified for copy/move operation. Type is : 0,Source=Microsoft.DataTransfer.ClientLibrary.Odbc.OdbcConnector,''Type=System.Data.Odbc.OdbcException,Message=ERROR [HY000] [Microsoft][BigQuery] (310) Storage API Error: Error thrown in GAvroDataCell:BuildDefaultAvroCell.Invalid BigQueryType specified for copy/move operation. Type is : 0,Source=Microsoft ODBC Driver for Google BigQuery,'
Конвейер состоит из одного действия копирования данных, и это запрос, который я выполняю:
@concat('SELECT
event_date,
event_timestamp,
event_name,
user_id,
user_pseudo_id,
TO_JSON(event_params) as event_params,
event_previous_timestamp,
event_value_in_usd,
event_bundle_sequence_id,
event_server_timestamp_offset,
TO_JSON(privacy_info) as privacy_info,
TO_JSON(user_properties) as user_properties,
user_first_touch_timestamp,
TO_JSON(user_ltv) as user_ltv,
TO_JSON(device) as device,
TO_JSON(geo) as geo,
TO_JSON(app_info) as app_info,
TO_JSON(traffic_source) as traffic_source,
TO_JSON(stream_id) as stream_id,
TO_JSON(platform) as platform,
TO_JSON(event_dimensions) as event_dimensions,
TO_JSON(ecommerce) as ecommerce,
TO_JSON(items) as items
FROM `xxxxxxxproject-bigquery.analytics_310106672.events_2023*`'
)
Связанная служба типа «BigQuery» работает, так как «тестовое соединение» дает результат «ok», а также набор данных в порядке, поскольку «данные предварительного просмотра» возвращают данные из удаленного набора данных.
«Предварительные данные» в действии «Копировать данные» выдают такую ошибку:
введите здесь описание изображения
Я обнаружил, что это как-то связано с символом "*" в имени таблицы. Данные копирования работают, когда я создаю динамический запрос следующим образом:
@concat('SELECT <fields>
FROM `xxxxxxxproject-bigquery.analytics_310106672.events_', '20230520`')
Но этот не работает:
@concat('SELECT <fields>
FROM `xxxxxxxproject-bigquery.analytics_310106672.events_', '202305', '*', '`')
Я расследую на стороне источника Google.
Привет @RakeshGovindula Я добавил запрос в текст вопроса. Спасибо за ваше время
Пробовали ли вы предварительный просмотр исходного кода при копировании с указанным выше запросом? а также нормально ли работает приведенный выше запрос в Big Query? Если возможно, предоставьте изображение активности копирования.
Запрос отлично работает в BigQuery, я добавил скриншот активности копирования.
У вас был один запрос. Вместо использования функции concat вы указали в нем запрос? Получается то же самое?
Я сделал небольшой шаг вперед. Похоже, это как-то связано с обратным ходом.
да, судя по вашему изображению активности копирования, это должно быть с запросом, так как предварительный просмотр источника не работает.
Я пока не нашел каких-либо задокументированных ограничений на экспорт данных из API BigQuery с использованием подстановочных знаков для имен таблиц. Я меняю стратегию, чтобы экспортировать каждую таблицу по одной. спасибо за поддержку @RakeshGovindula
Ваш пункт назначения?
Я думаю, что имена таблиц с подстановочными знаками в сценарии ADF в настоящее время могут не поддерживаться. Так что лучше использовать стратегию перечисления таблиц и зацикливания их в ADF.





Насколько я знаю, в настоящее время ADF может не поддерживать выбор таблицы с подстановочными знаками, например запросы Big Query, и это является причиной вашей ошибки.
Обходным путем для вашего требования может быть список всех таблиц из источника с помощью приведенного ниже запроса с действием поиска.
SELECT table_name FROM `<project>`.<dataset_id>.INFORMATION_SCHEMA.TABLES;
Если вы хотите, вы можете отфильтровать этот выходной массив с помощью starts_with(), используя активность фильтра.
Затем передайте этот выходной массив действию ForEach.

Внутри ForEach используйте действие копирования и дайте @item().table_name как для исходного набора данных, так и для набора данных приемника (здесь используйте параметры набора данных).
Если вы копируете данные в ADLS, скопируйте каждую таблицу во временную таблицу папки и после ForEach используйте другое действие копирования и используйте путь к файлу с подстановочными знаками в источнике. В приемнике действия копирования используйте тип копирования слиянием, и эти файлы будут сохранены в один файл.
Invalid BigQueryType specified for copy/move operationМожете ли вы предоставить свой запрос и изображение конвейера для лучшего понимания?