我正在计划一个从S3桶到BigQuery的管道。我设置了每天从S3传输的bigquery数据,如下所述。因此,我有一个数据传输配置,它每天查找前缀为s3://mybucket/my/path/
的文件,并将它们添加到BigQuery表中。
现在,其中一些文件正在定期更新。幸运的是,数据传输服务足够聪明,只获取新文件或更新的文件。
我的问题:由于S3没有提供一种有效的(即服务器端)方式来根据修改的日期时间列出文件,我想知道它是如何工作的。google是否跟踪每个PUT事件并将元数据保存在某个地方,包括修改时间,以便他们知道在下次传输运行时要传输哪些文件?
为什么我问这个:桶迟早会变得巨大,里面的很多文件都会定期更新(即相同的密钥,但内容会改变),所以我想知道是否每次数据传输运行都必须扫描整个桶!
当然,我相信谷歌的工程师会实现最好的解决方案,我不怀疑这一点,但我想确保这不会成为一个瓶颈。
定时传输使用修改时间过滤来避免传输重复数据。在性能方面,主要的瓶颈将是全球S3到GCP的带宽限制,这很难预测,并且在区域之间变化很大,但通常在x10Gbps范围内。
对于结构化<15tb数据,一般建议使用BigQuery数据传输服务。这里有非常通用的网络传输时间估计。您还应该考虑传输操作的相关配额。
虽然TLS用于数据传输,但如果您希望通过安全的私有连接进行数据传输,您应该考虑使用VPC-SC。