Здесь нужно решить две проблемы
- Пропуск заголовка при чтении данных и
- Использование заголовка для правильного заполнения столбцов таблицы больших запросов.
Для (1) это, по состоянию на июнь 2019 года, изначально не реализовано , хотя вы можете попробовать опции, перечисленные в Пропуск строк заголовка - возможно ли это с Cloud DataFlow? .Для (2) проще всего было бы прочитать первую строку вашего CSV в главной программе и передать список имен столбцов в конструкторе в DoFn, который преобразует строки CSV в объекты TableRow, готовые для записи в Bigquery.
Ваша окончательная программа будет выглядеть примерно так:
public void CsvToBigquery(csvInputPattern, bigqueryTable) {
final String[] columns = readAndSplitFirstLineOfFirstFile(csvInputPattern);
Pipeline p = new Pipeline.create(...);
p
.apply(TextIO.read().from(csvInputPattern)
.apply(Filter.by(new MatchIfNonHeader())
.apply(ParDo.of(new DoFn<String, TableRow>() {
... // use columns here to TableRows
})
.apply(BigtableIO.write().withTableId(bigqueryTable)...);
}