Cómo importar un archivo json desde un archivo en el almacenamiento en la nube a Bigquery

Estoy tratando de importar un archivo (json.txt) desde el almacenamiento en la nube a Bigquery a través de la API y se producen errores. Cuando esto se hace a través de la interfaz de usuario web, funciona y no tiene errores (incluso configuro maxBadRecords = 0). ¿Podría alguien decirme qué estoy haciendo incorrectamente aquí? ¿El código es incorrecto o necesito cambiar alguna configuración en Bigquery en algún lugar?

El archivo es un archivo de texto simple utf-8 con el siguiente contenido: He mantenido los documentos en bigquery y json import.

{"person_id":225,"person_name":"John","object_id":1} {"person_id":226,"person_name":"John","object_id":1} {"person_id":227,"person_name":"John","object_id":null} {"person_id":229,"person_name":"John","object_id":1} 

y al importar el trabajo, se produce el siguiente error: “El valor no se puede convertir al tipo esperado”. para cada línea individual.

  { "reason": "invalid", "location": "Line:15 / Field:1", "message": "Value cannot be converted to expected type." }, { "reason": "invalid", "location": "Line:16 / Field:1", "message": "Value cannot be converted to expected type." }, { "reason": "invalid", "location": "Line:17 / Field:1", "message": "Value cannot be converted to expected type." }, { "reason": "invalid", "location": "Line:18 / Field:1", "message": "Value cannot be converted to expected type." }, { "reason": "invalid", "message": "Too many errors encountered. Limit is: 10." } ] }, "statistics": { "creationTime": "1384484132723", "startTime": "1384484142972", "endTime": "1384484182520", "load": { "inputFiles": "1", "inputFileBytes": "960", "outputRows": "0", "outputBytes": "0" } } } 

Se puede acceder al archivo aquí: http://www.sendspace.com/file/7q0o37

y mi código y esquema son los siguientes:

 def insert_and_import_table_in_dataset(tar_file, table, dataset=DATASET) config= { 'configuration'=> { 'load'=> { 'sourceUris'=> ["gs://test-bucket/#{tar_file}"], 'schema'=> { 'fields'=> [ { 'name'=>'person_id', 'type'=>'INTEGER', 'mode'=> 'nullable'}, { 'name'=>'person_name', 'type'=>'STRING', 'mode'=> 'nullable'}, { 'name'=>'object_id', 'type'=>'INTEGER', 'mode'=> 'nullable'} ] }, 'destinationTable'=> { 'projectId'=> @project_id.to_s, 'datasetId'=> dataset, 'tableId'=> table }, 'sourceFormat' => 'NEWLINE_DELIMITED_JSON', 'createDisposition' => 'CREATE_IF_NEEDED', 'maxBadRecords'=> 10, } }, } result = @client.execute( :api_method=> @bigquery.jobs.insert, :parameters=> { #'uploadType' => 'resumble', :projectId=> @project_id.to_s, :datasetId=> dataset}, :body_object=> config ) # upload = result.resumble_upload # @client.execute(upload) if upload.resumble? puts result.response.body json = JSON.parse(result.response.body) while true job_status = get_job_status(json['jobReference']['jobId']) if job_status['status']['state'] == 'DONE' puts "DONE" return true else puts job_status['status']['state'] puts job_status sleep 5 end end end 

¿Podría alguien decirme qué estoy haciendo mal? ¿Qué soluciono y dónde?

También en algún momento en el futuro, espero usar archivos comprimidos e importarlos. ¿Está bien el “tar.gz” para eso o necesito convertirlo solo en un “.gz”?

Gracias de antemano por toda la ayuda. Lo aprecio.

Usted está siendo golpeado por la misma cosa que muchas personas (incluido yo) han sido golpeados por: está importando un archivo json pero no está especificando un formato de importación, por lo que de forma predeterminada es csv.

Si configuras configuration.load.sourceFormat en NEWLINE_DELIMITED_JSON, deberías estar listo.

Tenemos un error para que sea más difícil de hacer o, al menos, poder detectar cuándo el archivo es del tipo incorrecto, pero voy a eliminar la prioridad.

Intereting Posts