2015-08-05 2 views
1

Я пытаюсь создать таблицу Bigquery как часть потока данных. В примерах показано, что эта схема рассматривается как экземпляр TableFieldSchema. Однако таблицы, которые у меня есть, зависят от данных и, следовательно, могут быть в лучшем случае созданы как элемент в PCollection < TableFieldSchema>. Например:Есть ли способ создать таблицу Bigquery с зависимой от данных схемой в Google Dataflow?

PCollection<TableRow> quotes = ...; 

    quotes.apply(BigQueryIO.Write 
     .named("Write") 
     .to("my-project:output.output_table") 
     .withSchema(schema) 
     .withWriteDisposition(BigQueryIO.Write.WriteDisposition.WRITE_TRUNCATE) 
    .withCreateDisposition(BigQueryIO.Write.CreateDisposition.CREATE_IF_NEEDED)); 

Здесь схемы должен быть TableFieldSchema, но у меня есть как PCollection < TableFieldSchema>.

+0

Возможный дубликат [Запись различных значений для разных таблиц BigQuery в Apache Beam] (http://stackoverflow.com/questions/43505534/writing-different-values-to-different-bigquery-tables-in-apache-beam) – jkff

ответ

3

У нас, к сожалению, нет встроенного API для записи в таблицу BigQuery с динамической схемой. Тем не менее, мы работаем над улучшением гибкости в этой области. В настоящее время оценок нет, но мы надеемся скоро это получить.

В то же время, некоторые обходные пути были предложены на другие вопросы StackOverflow:

+0

Жаль, что здесь есть noob. Итак, я могу написать Custom Source, но я все равно получаю PCollection < TableFieldSchema>, а не tablefieldSchema. Я думаю, я боюсь, как написать функцию примерно так: 'public static TableFieldSchema convFn (PCollection ) schColl)' – user2254391

+0

Я думаю, что я ищу что-то похожее на 'rdd.collect()' Apache Spark. – user2254391

+0

Пользовательские источники/раковины еще не поддерживают боковые входы, поэтому, вероятно, будет сложно передать PCollection и PCollection одновременно. Тем не менее, если схема может быть вычислена в пользовательском приемнике, а не передана ему, это может быть жизнеспособным. –

Смежные вопросы