2016-05-25 4 views
2

Проблема, которую я имею, - это когда я читаю данные из GBQ с нулевыми значениями, а затем, если я попытаюсь сопоставить любую функцию с столбцом нулевых значений, это приведет к ошибкам.Сделка с нулевыми значениями из BigQuery в Google Cloud Dataflow Python

Когда я пишу input_data из GBQ в текст, выходной файл json не имеет ключа с нулевыми значениями. Я считаю, что это проблема, которая должна быть исправлена.

Например: - Входной key_1,key_2,key_3 value_1,,value_3

  • Ожидаемый результат: {"key_1":"value_1","key_2":null,"key_3":"value_3"}

  • Выход из DataFlow {"key_1":"value_1","key_3":"value_3"}

ответ

3

В настоящее время, существует не так много мы можем делать на уровне потока данных , Как вы указали, JSON, выходящий из BigQuery, не имеет нулевых значений. Это будет улучшено (но не в следующем немедленном выпуске), если мы перейдем на AVRO в качестве промежуточного формата для экспорта. Вы можете вставить однострочную функцию для «очистки» данных, добавив отсутствующие поля с нулевым значением. См. Пример ниже:

def add_null_field(row, field): 
    row.update({field: row.get(field, None)}) 
    return row 

(p 
    | df.io.Read(df.io.BigQuerySource('PROJECT:DATASET.TABLE')) 
    | df.Map(add_null_field, field='value') 
    | df.io.Write(df.io.TextFileSink('gs://BUCKET/FILES))) 

Надеюсь, это поможет.

Смежные вопросы