Последние несколько недель при работе с Google BigQuery через пакет bigrquery, при записи данных в новую таблицу вы могли столкнутся с ошибкой:
Error: Invalid JSON payload received. Unknown name "autodetect" at 'job.configuration.load': Proto field is not repeating, cannot start list. [invalid]
Ещё раз обращу ваше внимание, это касается только процесса создания и записи в таблицы которых нет в вашем наборе данных.
Решить эту проблему добавив в функцию bq_table_upload аргумент fields. И в этот аргумент необходимо передать результат выполнения функции as_bq_fields(data_frame), где вместо data\_frame подставьте название дата фрейма данные из которого вы плариуете передать в новую таблицу в Google BigQuery.
Пример.
%
bq_table_upload res, fields = as_bq_fields(data_to_load) )
Более подробное описание решения данной проблемы можно найти на GitHub.
Кстати, раз уж речь зашла о работе с Google BigQuery, то расскажу об ещё одном пакете который упростит вам процесс создания новых таблиц. Дело в том, что Google BigQuery достаточно строго относится к именам полей в создаваемых вами таблицах, допускается использование только латинских букв, цифр и нижнего подчёркивания. А большинство рекламных платформ при работе с API могут возвращать вам названия столбцов с точками, процентами и прочими спец символами.
Для того что бы не заниматься корректировкой имён столбцов можно использовать пакет snakecase, и с его помощью перевести имена столбцов перед отправкой в BigQuery в так называемый змеиный регист:
Пример:
Вот в таком виде я получил имена столбцов при загрузке данных из API Google Ads:
[1] "Day" "Campaign" "Impressions" "Clicks" "Interactions" "Cost" "Conversions"
[8] "ConversionValue" "View-throughconv." "Cross-deviceconv." "SearchImpr.share" "Searchabs.topIS" "ContentImpr.share" "Videoplayedto100%"
[15] "Videoplayedto25%" "Videoplayedto50%" "Videoplayedto75%" "Viewrate"
Как видите тут и проценты, и тире и точки, символы которые не пропустит в имена столбцов Google BigQuery.
Допустим что эти данные мы получили в дата фрейм mydata, тогда для их преоразования в змеиный регистр можно использовать следующий пример:
names(mydata)
Error: Invalid JSON payload received. Unknown name "autodetect" at 'job.configuration.load': Proto field is not repeating, cannot start list. [invalid]
Ещё раз обращу ваше внимание, это касается только процесса создания и записи в таблицы которых нет в вашем наборе данных.
Решить эту проблему добавив в функцию bq_table_upload аргумент fields. И в этот аргумент необходимо передать результат выполнения функции as_bq_fields(data_frame), где вместо data\_frame подставьте название дата фрейма данные из которого вы плариуете передать в новую таблицу в Google BigQuery.
Пример.
%
bq_table_upload res, fields = as_bq_fields(data_to_load) )
Более подробное описание решения данной проблемы можно найти на GitHub.
Кстати, раз уж речь зашла о работе с Google BigQuery, то расскажу об ещё одном пакете который упростит вам процесс создания новых таблиц. Дело в том, что Google BigQuery достаточно строго относится к именам полей в создаваемых вами таблицах, допускается использование только латинских букв, цифр и нижнего подчёркивания. А большинство рекламных платформ при работе с API могут возвращать вам названия столбцов с точками, процентами и прочими спец символами.
Для того что бы не заниматься корректировкой имён столбцов можно использовать пакет snakecase, и с его помощью перевести имена столбцов перед отправкой в BigQuery в так называемый змеиный регист:
Пример:
Вот в таком виде я получил имена столбцов при загрузке данных из API Google Ads:
[1] "Day" "Campaign" "Impressions" "Clicks" "Interactions" "Cost" "Conversions"
[8] "ConversionValue" "View-throughconv." "Cross-deviceconv." "SearchImpr.share" "Searchabs.topIS" "ContentImpr.share" "Videoplayedto100%"
[15] "Videoplayedto25%" "Videoplayedto50%" "Videoplayedto75%" "Viewrate"
Как видите тут и проценты, и тире и точки, символы которые не пропустит в имена столбцов Google BigQuery.
Допустим что эти данные мы получили в дата фрейм mydata, тогда для их преоразования в змеиный регистр можно использовать следующий пример:
names(mydata)