Apache Beam ReadFromBigQuery — столбцы BQ перемешиваются

Я работаю над требованием, которое считывает данные из BigQuery и записывает результаты в корзину GCS в формате csv. я могу читать из bigquery и записывать в GCS, но столбцы bq переупорядочиваются. Я хочу, чтобы столбцы были в csv в том же порядке, что и в таблице bigquery.

Может ли кто-нибудь помочь мне с этим? почему столбцы перемешиваются? как я могу исправить заказы?

код, который я написал:

def yield_values(x):
    return x.values()


def csv_format(x):
    return ','.join(['"' + str(column) + '"' for column in x])


read_rows = (
        p
        | 'QueryTableStdSQL' >> beam.io.ReadFromBigQuery(
            query='SELECT customer_id, date, timestamp, order_id, items, amount, mode, restaurant, status, ratings, feedback FROM `unique-caldron-305709.food_orders_dataset.cleaned_orders` WHERE DATE(_PARTITIONTIME) > "2021-01-24"',
            use_standard_sql=True,
            gcs_location='gs://food-order/snapshot/')
        | 'ReadValues' >> beam.Map(yield_values)
        | 'CSVFormat' >> beam.Map(csv_format)
        | 'WriteToStorage' >> beam.io.WriteToText(outputs_prefix, file_name_suffix='.csv', header='customer_id, date, time, order_id, items, amount, mode, restaurant, status, ratings, feedback')
)

Буду признателен за любую оказанную помощь. Спасибо!!!


person Ramsankar Pandian    schedule 25.02.2021    source источник
comment
Я предполагаю, что это связано с характером параллельной обработки потока данных, вы можете более внимательно взглянуть на этот thread, а также на Java Beam SDK, вы можете рассмотреть возможность написания собственной sink реализации класса WriteToText() в Python Beam SDK, чтобы позволить заголовки заказ. Это то, что вы ищете?   -  person Nick_Kh    schedule 08.03.2021