В настоящее время я использую предоставленный Google шаблон gcs-text-to-bigquery и добавляю функцию преобразования для преобразования моего файла jsonl. Jsonl довольно вложенный, и я хотел иметь возможность выводить несколько строк на одну строку json с разделителями новой строки, выполняя некоторые преобразования.
Например:
{'state': 'FL', 'metropolitan_counties':[{'name': 'miami dade', 'population':100000}, {'name': 'county2', 'population':100000}…], 'rural_counties':{'name': 'county1', 'population':100000}, {'name': 'county2', 'population':100000}….{}], 'total_state_pop':10000000,….}
Очевидно, что округов будет больше, чем 2, и в каждом штате будет одна из этих строк. Вывод, который хочет мой босс:
Когда я выполняю преобразование текста из gcs-в-bq, я получаю только одну строку на штат (поэтому я получу округ Майами-Дейд из FL, а затем независимо от того, какой первый округ находится в моем преобразовании для следующего штата ). Я прочитал немного, и я думаю, что это из-за сопоставления в шаблоне, который ожидает один вывод на jsonline. Кажется, я могу сделать pardo (DoFn?), Не уверенный, что это такое, или есть похожая опция с beam.Map в python. В преобразованиях есть некоторая бизнес-логика (сейчас это около 25 строк кода, так как у json больше столбцов, чем я показал, но это довольно просто).
Есть предложения по этому поводу? данные поступят сегодня вечером / завтра, и в таблице BQ будут сотни тысяч строк.
шаблон, который я использую, в настоящее время находится в Java, но я могу довольно легко перевести его на python, так как в Python есть много примеров в Интернете. я лучше знаю python и думаю, что он легче, учитывая различные типы (иногда поле может быть пустым), и это выглядит менее устрашающе, учитывая, что примеры, которые я видел, выглядят проще, однако открыты либо для