当前位置: 首页 > 知识库问答 >
问题:

在Apache Beam中向不同的BigQuery表写入不同的值

滕成双
2023-03-14

假设我有一个pcollection ,我想把它写到多个BigQuery表中,为每个foo选择一个可能不同的表。

如何使用Apache BeamBigqueryioAPI来完成此操作?

共有1个答案

鲁波光
2023-03-14

使用最近添加到Apache Beam中的bigqueryio中的一个特性可以实现这一点。

PCollection<Foo> foos = ...;
foos.apply(BigQueryIO.write().to(new SerializableFunction<ValueInSingleWindow<Foo>, TableDestination>() {
  @Override
  public TableDestination apply(ValueInSingleWindow<Foo> value) {  
    Foo foo = value.getValue();
    // Also available: value.getWindow(), getTimestamp(), getPane()
    String tableSpec = ...;
    String tableDescription = ...;
    return new TableDestination(tableSpec, tableDescription);
  }
}).withFormatFunction(new SerializableFunction<Foo, TableRow>() {
  @Override
  public TableRow apply(Foo foo) {
    return ...;
  }
}).withSchema(...));

根据输入pcollection 是有界还是无界,这将创建多个BigQuery导入作业(根据数据量,每个表一个或多个),或者使用BigQuery流插入API。

最灵活的API版本使用DynamicDestinations,它允许您使用不同的模式将不同的值写入不同的表,甚至允许您在所有这些计算中使用来自管道其余部分的侧输入。

 类似资料:
  • 我在BigQuery:count distinct concat(col1,col2,col3,col4,col5)中尝试了PostgreSQL:count distinct(col1,col2,col3,col4,col5) 我的设想是,我需要在BigQuery中获得与PostgreSQL相同的结果 虽然这个场景适用于3列,但我并没有得到与5列PostgreSQL相同的值。 示例查询: 当我删除

  • 问题内容: 我有一个表,定义如下: 我的基本选择语句是: 如何按索引升序和日期降序对选择进行排序?即小索引先于大索引。如果两个索引相同,则以较晚的日期为准。 文档将我指向COLLATion,但是我不确定那是什么。 问题答案: 虽然我知道您已经在这里有了自己的答案,但我认为在这里工作的细节很重要。 首先,该子句按指定的列或表达式的顺序排列。在这种情况下: 从小到大(结尾), 然后 从大到小(结尾)排

  • 问题内容: 只是想知道是否可以将一个类中的jTextArea追加到一个单独的类中?我基本上有一个简单的类,该类会不断运行计算,并且我想在自己的类中创建的GUI上查看输出。该程序可以通过System.out.println执行良好,但是我现在想在我的textarea上查看它。在此先感谢您的指导。 已更新-以下代码是我正在运行的代码。问题区域如下(这是一个很大类的方法): 我希望将此输出写入单独的jT

  • 类别表 元表 meta和cats表公共是c_id meta表cats c_id(1)meta表有2(Abhijit1,Abhijit2)行和m_id(1,2) 事务表 交易和元表通用的是m_id交易m_id 1有两行t_id(1,2)。此表主要用于支付金额和日期 我想为每个类别求和()所有成本(从元表)和金额(从事件表)。 表与 这是错的。猫的成本ID 1是300,但这里我有400 这里的总和(m

  • 现在我使用这样的结构:Appender: 记录器: 但它不适用于MDC密钥。如何使用xml中的MDC键配置RollingFileAppender?

  • 问题内容: 现在,我正在使用如下结构:Appender: 记录器: 但是它不适用于MDC密钥。如何在xml中使用MDC密钥配置RollingFileAppender? 问题答案: 看一下RoutingAppender。也许这可以帮助您入门: