从数据流流式传输 pub/sub 到 BigQuery 的首选数据格式是什么?
What is the preferred data format for streaming pub/sub from dataflow to BigQuery?
我们的流程目前有点笨拙,我们正在从数据库中获取批处理的 CSV 输出,这些输出被转换为 json 并流式传输到 pub/sub。
这很麻烦,因为 json 中的每个元素都是 STRING 格式,当我们尝试写入 bigquery 时它会失败,除非 Java 中有类型转换。
是否有任何我们可以用于小批量的首选类型化平面文件格式,以便在我们使用 pub/sub 传输时,我们将在记录级别保留类型信息?
取决于您的管道设置的准确程度。
一般来说,PubsubIO
有几种方法可以read/write发消息:
PubsubIO.readAvros()
读取带有 Avros 负载的消息并解析对象;
PubsubIO.readProtos()
对具有 Protobuf 负载的消息做同样的事情;
PubsubIO.readMessages()
为您提供未解析的原始字节;
Avros 和 Protos 可以帮助您简化 Pubsub 的 serialization/deserialization 步骤,以避免将所有内容都放入字符串中。
但是,正如 Yurci 提到的,您仍然需要将从 Pubsub 消息到 TableRows 的有效负载转换为 write them to BigQuery。
我们的流程目前有点笨拙,我们正在从数据库中获取批处理的 CSV 输出,这些输出被转换为 json 并流式传输到 pub/sub。
这很麻烦,因为 json 中的每个元素都是 STRING 格式,当我们尝试写入 bigquery 时它会失败,除非 Java 中有类型转换。
是否有任何我们可以用于小批量的首选类型化平面文件格式,以便在我们使用 pub/sub 传输时,我们将在记录级别保留类型信息?
取决于您的管道设置的准确程度。
一般来说,PubsubIO
有几种方法可以read/write发消息:
PubsubIO.readAvros()
读取带有 Avros 负载的消息并解析对象;PubsubIO.readProtos()
对具有 Protobuf 负载的消息做同样的事情;PubsubIO.readMessages()
为您提供未解析的原始字节;
Avros 和 Protos 可以帮助您简化 Pubsub 的 serialization/deserialization 步骤,以避免将所有内容都放入字符串中。
但是,正如 Yurci 提到的,您仍然需要将从 Pubsub 消息到 TableRows 的有效负载转换为 write them to BigQuery。