В настоящее время я пишу утилиту Java для импорта нескольких файлов CSV из GCS в BigQuery. Я легко могу достичь этого с помощью bq load
, но я хотел сделать это с помощью задания Dataflow. Поэтому я использую Dataflow Pipeline и ParDo transformer (возвращает TableRow, чтобы применить его к BigQueryIO), и я создал StringToRowConverter() для преобразования. Здесь начинается актуальная проблема - мне нужно указать схему для таблицы назначения, хотя я не хочу создавать новую таблицу, если она не существует, - только пытается загрузить данные. Поэтому я не хочу вручную устанавливать имя столбца для TableRow, поскольку у меня около 600 столбцов.
public class StringToRowConverter extends DoFn<String, TableRow> {
private static Logger logger = LoggerFactory.getLogger(StringToRowConverter.class);
public void processElement(ProcessContext c) {
TableRow row = new TableRow();
row.set("DO NOT KNOW THE COLUMN NAME", c.element());
c.output(row);
}
}
Кроме того, предполагается, что таблица уже существует в наборе данных BigQuery, и мне не нужно ее создавать, а также файл CSV содержит столбцы в правильном порядке.
Если в этом сценарии нет обходного пути, а для загрузки данных требуется имя столбца, то я могу получить его в первой строке файла CSV.
Любая помощь будет оценена.