Ошибка DBI ::dbWriteTable при записи в BigQuery — попытка принудительно преобразовать строку в int

#r #google-bigquery #dbplyr #r-dbi

#r #google-bigquery #dbplyr #r-dbi

Вопрос:

В записной книжке AI у меня есть следующее:

 %%R
tempdf %>% summary() %>% print()

DBI::dbWriteTable(
    conn=clinvar_conn, 
    name=table_name, 
    value=tempdf, 
    overwrite=T
)
  

Выдача

     CHROM               POS                 ID                REF           
 Length:775501      Length:775501      Length:775501      Length:775501     
 Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character  
     ALT                QUAL              FILTER              INFO          
 Length:775501      Length:775501      Length:775501      Length:775501     
 Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character  


Error: Job 'eacri-genomics.job_om9Un5yZVSHjLpt0d4ZzyF743zjy.US' failed
✖ Error while reading data, error message: JSON processing encountered too many errors, giving up. Rows: 740479; errors: 1; max bad: 0; error percent: 0 [invalid]
✖ Error while reading data, error message: JSON parsing error in row starting at position 392688729: Could not convert value 'string_value: "X"' to integer. Field: CHROM; Value: X [invalid]
Run `rlang::last_error()` to see where the error occurred.

I made sure to cast all the data as character. Why is it trying to convert "X" to an integer?

  

Комментарии:

1. В сообщении об ошибке говорится об обработке JSON, но в вопросе нет подробностей о вашем формате данных. Пожалуйста, не могли бы вы предоставить более подробную информацию? В частности, где текст string_value: "X" отображается во входных данных? а что находится в позиции 392688729?

2. В одном столбце есть хромосомы, которые в основном пронумерованы 1-34, но есть также X и Y.

3. Позиция 392688729 кажется очень высокой, если у вас всего 775501 строк. Две возможности для расследования (1) некоторые из ваших текстовых полей длиннее максимального количества символов, (2) во входных данных есть кавычки без кавычек, что означает, что несколько значений неправильно интерпретируются как одно значение.

4. Ах! возможны оба варианта. Я изучу это.

Ответ №1:

Повторная публикация комментария в качестве ответа для полноты.

Позиция 392688729 кажется очень высокой, если у вас всего 775501 строк. Это заставляет меня подозревать, что некоторые из ваших типов данных не такие, какими они считаются. Учитывая, что в сообщении об ошибке упоминается JSON, возможно, некоторые из ваших полей являются объектами JSON, и приведение их к string работает не так, как вы могли бы предположить.

Две возможности для исследования:

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