我正在使用Spotify Scio
创建一个由Pub/Sub
消息触发的Scala Dataflow管道。它从我们的私有DB
中读取,然后将信息插入BigQuery
中。
问题是:
WRITE_TRUNCATE
WriteDisposition.WRITE_TRUNCATE is not supported for an unbounded PCollection
Batch
管道,并指定触发频率。所以到目前为止,我有以下管道:
sc
.customInput("Job Trigger", inputIO)
.map(handleUserInformationRetrieval(dbOperationTimeout, projectName))
.flatten
.withGlobalWindow(options = windowOptions(windowingOutputTriggerDuration))
.groupBy(_.ssoId)
.map { case (ssoId, userDataCollection) => Schemas.toTableRow(ssoId, userDataCollection) }
.filter(_.isSuccess)
.map(_.get)
.saveAsBigQuery(tableName, getSchema, WRITE_TRUNCATE, CREATE_NEVER)
使用scio
API(saveAsBigQuery
)时,似乎找不到指定触发频率的方法。
它仅在本地beam
api中出现:
BigQueryIO
.write()
.withTriggeringFrequency(Duration.standardDays(1)) // This is what I'm after
.to(bqTableName)
.withSchema(getSchema)
.withCreateDisposition(CREATE_NEVER)
.withWriteDisposition(WRITE_TRUNCATE)
如果使用BigQueryIO
,则必须使用sc.pipeline.apply
而不是当前的管道。
是否可以通过某种方式将BigQueryIO
集成到我当前的管道中,或者以某种方式在当前管道上指定withTriggeringFrequency
?
答案 0 :(得分:0)
Scio当前不支持指定用于将数据加载到Big Query的方法。由于这是不可能的,因此自动STREAMING_INSERTS
用于无界集合,这显然不支持截断。因此,您需要回退到Beam的BigQueryIO
,并指定触发频率(withTriggeringFrequency(...)
)和方法(withMethod(Method.FILE_LOADS)
)。
要将其集成到Scio管道中,只需使用saveAsCustomOutput
。
也可以在此处找到示例:https://spotify.github.io/scio/io/Type-Safe-BigQuery#using-type-safe-bigquery-directly-with-beams-io-library