Ошибка копирования данных фабрики данных Azure при экспорте из BigQuery

Мне нужно экспортировать данные 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.

Invalid BigQueryType specified for copy/move operation Можете ли вы предоставить свой запрос и изображение конвейера для лучшего понимания?
Rakesh Govindula 22.05.2023 09:39

Привет @RakeshGovindula Я добавил запрос в текст вопроса. Спасибо за ваше время

foppeddittelo 22.05.2023 09:47

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

Rakesh Govindula 22.05.2023 09:49

Запрос отлично работает в BigQuery, я добавил скриншот активности копирования.

foppeddittelo 22.05.2023 09:55

У вас был один запрос. Вместо использования функции concat вы указали в нем запрос? Получается то же самое?

Rakesh Govindula 22.05.2023 10:19

Я сделал небольшой шаг вперед. Похоже, это как-то связано с обратным ходом.

foppeddittelo 22.05.2023 10:34

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

Rakesh Govindula 22.05.2023 10:37

Я пока не нашел каких-либо задокументированных ограничений на экспорт данных из API BigQuery с использованием подстановочных знаков для имен таблиц. Я меняю стратегию, чтобы экспортировать каждую таблицу по одной. спасибо за поддержку @RakeshGovindula

foppeddittelo 22.05.2023 12:00

Ваш пункт назначения?

Rakesh Govindula 22.05.2023 12:01

Я думаю, что имена таблиц с подстановочными знаками в сценарии ADF в настоящее время могут не поддерживаться. Так что лучше использовать стратегию перечисления таблиц и зацикливания их в ADF.

Rakesh Govindula 22.05.2023 12:02
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
10
70
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Насколько я знаю, в настоящее время ADF может не поддерживать выбор таблицы с подстановочными знаками, например запросы Big Query, и это является причиной вашей ошибки.

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

SELECT table_name FROM `<project>`.<dataset_id>.INFORMATION_SCHEMA.TABLES;

Если вы хотите, вы можете отфильтровать этот выходной массив с помощью starts_with(), используя активность фильтра.

Затем передайте этот выходной массив действию ForEach.

Внутри ForEach используйте действие копирования и дайте @item().table_name как для исходного набора данных, так и для набора данных приемника (здесь используйте параметры набора данных).

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

Другие вопросы по теме