我有一个大约有 1TB 数据的 SQL 表,我想将该表 ETL 到 GCS。我不明白的是 Apache Beam 如何读取表,是否以 block 的形式存在,如果是, block 的大小是多少以及如何配置它?另外,如果失败,工作是否会从离开的地方开始?
最佳答案
Apache Beam 提供 JdbcIO转换工厂类以从 JDBC 可访问的数据库读取数据。 JdbcIO 使用普通的 JDBC 构造来建立连接并读取数据。
JdbcIO 不提供分块、分片或分割其工作负载的机制。 JdbcIO.Read 转换是使用 SQL 查询创建的,并且该查询在一个步骤中执行。
如果您需要对工作负载进行分区以获得某种程度的并行化,则需要将其添加到 Apache Beam 管道中。这可以通过初始步骤计算分区边界然后将这些边界作为输入传递给 JdbcIO.Read 转换的 SQL 查询来实现。
https://nl.devoteam.com/en/blog-post/querying-jdbc-database-parallel-google-dataflow-apache-beam/是这种分区方法的一个示例。
关于google-cloud-dataflow - 在 GCP Dataflow 上运行的 Apache Beam 如何处理批量的大型 SQL 表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61679469/