Google bigquery Python Apache Beam:BigQuery按行id进行流式重复数据消除

Google bigquery Python Apache Beam:BigQuery按行id进行流式重复数据消除,google-bigquery,google-cloud-dataflow,apache-beam,Google Bigquery,Google Cloud Dataflow,Apache Beam,根据BigQuery文档,您可以通过提供插入ID()来确保数据的一致性。如果未提供,BQ将根据内部ID和最大努力确保一致性 通过使用bqapi,您可以使用行idparam()实现这一点,但对于apachebeampythonsdk,我找不到相同的方法 查看SDK时,我注意到存在一个“unique_row_id”属性,但我真的不知道如何将参数传递到WriteToBigQuery() 如何写入BQ(流式处理),为重复数据消除提供行Id?更新: 如果使用WriteToBigQuery,它将自动创建 为

根据BigQuery文档,您可以通过提供
插入ID
()来确保数据的一致性。如果未提供,BQ将根据内部ID和最大努力确保一致性

通过使用bqapi,您可以使用
行id
param()实现这一点,但对于apachebeampythonsdk,我找不到相同的方法

查看SDK时,我注意到存在一个“unique_row_id”属性,但我真的不知道如何将参数传递到
WriteToBigQuery()

如何写入BQ(流式处理),为重复数据消除提供行Id?

更新: 如果使用
WriteToBigQuery
,它将自动创建 为您插入一个名为
insertId
的唯一行id,它将被插入到bigquery中。它是为您处理的,您不必担心它。:)

  • WriteToBigQuery
    是一种
    p转换
    ,在它的
    expand
    方法中调用
    BigQueryWriteFn
  • BigQueryWriteFn
    是一个
    DoFn
    ,在它的
    过程中
    方法调用
    \u flush\u batch
  • \u flush\u batch
    是一个调用
    BigQueryRapper.insert\u rows
    方法的方法
  • BigQueryWrspper.insert_rows
    创建一个包含
    bigquery.TableDataInsertAllRequest.RowsValueListEntry
    对象的列表,这些对象包含
    insertId
    和作为json对象的行数据
  • insertId
    是通过调用
    unique\u row\u id
    方法生成的,该方法返回一个由UUID4组成的值,UUID4与
    \u
    连接并带有一个自动递增的数字
  • 在当前的2.7.0代码中,有这样一条快乐的评论;我也证实了这是真的:)

    *不要使用
    bigQueryLink
    至少,不是以它当前的形式,因为它不支持流媒体。我想这可能会改变


    原始(非)答案 好问题,我也看了看,找不到确切的答案

    Apache Beam似乎没有使用您链接到的google.cloud.bigquery客户端sdk,它有一些内部生成的api客户端,但它似乎是最新的

    我查看了来源:
    insertall
    方法就在那里

    我还发现了前面提到的
    insertid

    因此,如果可以进行InsertAll调用,它将使用
    TableDataInsertAllRequest
    并传递
    RowsValueListEntry

    class TableDataInsertAllRequest(_messages.Message):
      """A TableDataInsertAllRequest object.
      Messages:
        RowsValueListEntry: A RowsValueListEntry object.
    
    RowsValueListEntry
    消息是插入ID的位置

    这是用于“全部插入”的API文档

    我将对此进行更多的研究,因为我没有看到
    WriteToBigQuery()
    公开这一点

    我怀疑“bigquery将至少记住这一点一分钟”对于重复数据消除来说是一个相当宽松的保证。如果您需要事务,文档建议使用数据存储。否则,您可能需要使用窗口函数运行SQL以在运行时执行重复数据消除,或者在bigquery上运行其他一些重复数据消除作业

    也许使用
    WriteToBigQuery()
    batch\u size
    参数,并在数据流中运行组合(或最坏的情况下是GroupByKey)步骤,是在写入之前更稳定的重复数据消除方法

    class TableDataInsertAllRequest(_messages.Message):
      """A TableDataInsertAllRequest object.
      Messages:
        RowsValueListEntry: A RowsValueListEntry object.