BigQueryで1つの列を変更し、手動で他の列をすべて手作業で保存することなく更新されたデータを新しい表に書きたいと思います。私は次のコードでやりたいものを達成することができます - 私は100+の列(または本当にさえ10+列を持っていた場合は単一のBigQuery列を変更して新しい表に書き込む
row = p | 'ReadFromBigQuery' >> beam.io.Read(beam.io.BigQuerySource(query=query))
new_row = row | beam.Map(lambda x: (x["col1"], x["col2"], preprocess(x["text_col"]))
output = new_row | beam.Map(lambda (col1, col2, processed_text): {"col1": col1, "col2": col2, "text": processed_text}
output | beam.io.WriteToBigQuery(path_to_new_table)
、これは基本的に書くと手ですべての列を維持するために私を必要とし)これは非常に扱いにくく、扱いにくいです。行の上でいくつかの関数(この例ではpreprocess()
)を実行し、その列だけを更新して他の列を保持する簡単な方法はありますか?
ヒント:いないタプルとしてではなく、辞書としてデータ要素を表現してみてください。次に、.copy()を使用して辞書をコピーし、必要に応じてコピーを修正し、変更された辞書を返すことができます。 – jkff
ああ、これは辞書を受け入れる別個の関数でなければならず、そこで変更が発生する可能性があります。 – reese0106
@jkff私の答えをチェックし、これがあなたが意図したものかどうかを教えてください:) – reese0106