Carga BigQuery con nueva línea

Sé que podemos usar la opción de nuevas líneas clasificadas en BQ. Pero mis datos no están cargando incluso con esta opción. No tengo idea de por qué está rompiendo la carga.

Línea CSV:

"49602"|"AFFF7240654213"|"FROM MASTER: TESTing part. Goodluck: example.com/wp.png (tarifado) 
 
"|"MO"|||0.000|0.000|50.7000|"NET"

Me está dando este error.

Error while reading data, error message: Error detected while parsing row starting at position: 436388389. Error: Missing close double quote (") character.

Pero con allow-quoted-newline Debería funcionar bien?

También aquí está la exacta columna de Postgres (la fuente de datos)

FROM MASTER: TESTing part. Goodluck: example.com/wp.png (tarifado) \r
\r

Pregunta hecha hace 3 años, 4 meses, 29 días - Por codeglitch


3 Respuestas:

  • Guardé su línea CSV de muestra en una prueba. csv archivo y cuando se ejecuta

    bq load  --autodetect  --source_format=CSV dataset.test_table "gs://my-bucket/test.csv"
    

    de hecho veo el mismo error

    Error detected while parsing row starting at position: 0. Error: Missing close
    double quote (") character.
    

    Sin embargo, al agregar la bandera para permitir nuevas líneas citadas funcionó bien

    bq load  --autodetect --allow_quoted_newlines --source_format=CSV dataset.test_table "gs://my-bucket/test.csv"
    

    Y la mesa de barbacoa, test_table parece así

    Rowint64_field_0string_field_1string_field_2string_field_3string_field_4string_field_5double_field_6double_field_7double_field_8string_field_9
    149602AFFF7240654213Parte de ensayo. Goodluck: example.com/wp.png (tarifado)MOnulonulo0,00,050,7NET

    Respondida el Dec 17, 2020 a las 13:51 - por htmlhelix

    Votos positivos: 0 | Votos negativos: 0

  • El error que estás experimentando se debe a que la opción allow-quoted-newline en BigQuery no está funcionando correctamente en este caso. La presencia de nuevas líneas dentro de un campo entre comillas puede ser problemática, ya que BigQuery no es capaz de interpretar correctamente esta estructura de datos sin un cierre de comillas adecuado.

    Para solucionar este problema, te recomendaría dos posibles enfoques:

    • Limpiar tus datos: Antes de cargar los datos en BigQuery, puedes limpiar el campo que contiene las nuevas líneas para asegurarte de que no haya ninguna nueva línea dentro de las comillas. Esto puede hacerse utilizando herramientas de procesamiento de texto o scripting para eliminar o reemplazar las nuevas líneas problemáticas.
    • Cambiar el formato de tus datos: En lugar de utilizar nuevas líneas dentro de campos entre comillas, puedes considerar cambiar el formato de tus datos. Por ejemplo, podrías utilizar un separador distinto en lugar de las comillas (por ejemplo, `|` en lugar de `"`), o guardar los datos en un formato que sea más compatible con BigQuery.

    Espero que estas sugerencias te sean de ayuda para solucionar el problema de carga de tus datos en BigQuery. Si necesitas más ayuda o tienes alguna otra pregunta, por favor házmelo saber.

    Respondida el Dec 18, 2020 a las 13:49 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Problema:

    Los datos CSV contienen caracteres de nueva línea (\r y \n) en un campo delimitado por comillas dobles ("), lo que interrumpe la carga de BigQuery incluso con la opción allow-quoted-newline habilitada.

    Solución:

    Hay dos posibles soluciones:

    1. Utilizar un carácter de escape:

    Agrega un carácter de escape (\) antes de cada carácter de nueva línea en el campo delimitado por comillas dobles. Por ejemplo, el CSV actualizado se vería así:

    
    "49602"|"AFFF7240654213"|"FROM MASTER: TESTing part. Goodluck: example.com/wp.png (tarifado) \\r\\n\\r\\n"|"MO"|||0.000|0.000|50.7000|"NET"
    

    2. Cargar los datos en formato JSON:

    Convierte los datos CSV a formato JSON, donde las nuevas líneas se pueden escapar automáticamente. Puedes utilizar una herramienta como jq o csvjson para realizar la conversión.

    Ejemplo con jq:

    
    cat data.csv | jq -Rnc --stream 'fromstream(1|truncate_stream(inputs)) | .csv'
    

    Ejemplo con csvjson:

    
    csvjson data.csv | jq -nrc --stream 'fromstream(1|truncate_stream(inputs))'
    

    El resultado JSON se verá similar a esto:

    
    {
      "49602": "AFFF7240654213",
      "FROM MASTER: TESTing part. Goodluck: example.com/wp.png (tarifado) \r\n\r\n": "MO",
      "0.000": null,
      "0.000": null,
      "50.7000": null,
      "NET": null
    }
    

    Luego, puedes cargar los datos JSON en BigQuery utilizando el formato JSON.

    Respondida el Dec 18, 2020 a las 13:51 - por Gemini

    Votos positivos: 0 | Votos negativos: 0