将 Java 对象转换为 BigQuery TableRow

Convert Java object to BigQuery TableRow

我正在探索 Google Cloud Dataflow。

我想知道是否可以在 java 对象或 JSON 之间自动转换为 TableRow。

就像我们可以自动将JSON解析为POJO class一样。

找不到相关资料。 希望不要重复问题。

如有任何信息,我们将不胜感激!

问候

我一直在寻找相同的示例,但没有成功。我创建了一个 POJO class,它几乎匹配 bigquery table 的架构,并且匹配作为管道输入的 JSON 对象的结构。最后,当我必须将这些对象转换为 TableRow 时,对于嵌套和重复的值,我做了如下所示的操作,并且转换是由 API

    TableRow row = new TableRow()
            .set("items", c.element().getItems())
            .set("orderDate", c.element().getOrderDate())
            .set("orderNumber", c.element().getOrderNumber());

其中项目 class 是订单对象的一部分:

@JsonProperty("items")
private List<Item> items = null;

这是项目 class 的代码:

import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
    "id",
    "code",
    "detail",
    "name",
    "shortName",
    "description",
    "sku",
    "quantity",
    "category",
    "products"
})
public class Item implements Serializable
{

    @JsonProperty("id")
    private Integer id;
    @JsonProperty("code")
    private String code;
    @JsonProperty("detail")
    private String detail;
    @JsonProperty("name")
    private String name;
    @JsonProperty("shortName")
    private String shortName;
    @JsonProperty("description")
    private String description;
    @JsonProperty("sku")
    private String sku;
    @JsonProperty("quantity")
    private Integer quantity;
    @JsonProperty("category")
    private Category category;
    @JsonProperty("products")
    private List<Product> products = null;
    @JsonIgnore
    private Map<String, Object> additionalProperties = new HashMap<String, Object>();
    private final static long serialVersionUID = -5644586446669059821L;

    @JsonProperty("id")
    public Integer getId() {
        return id;
    }

    @JsonProperty("id")
    public void setId(Integer id) {
        this.id = id;
    }

    @JsonProperty("code")
    public String getCode() {
        return code;
    }

    @JsonProperty("code")
    public void setCode(String code) {
        this.code = code;
    }

    @JsonProperty("detail")
    public String getDetail() {
        return detail;
    }

    @JsonProperty("detail")
    public void setDetail(String detail) {
        this.detail = detail;
    }

    @JsonProperty("name")
    public String getName() {
        return name;
    }

    @JsonProperty("name")
    public void setName(String name) {
        this.name = name;
    }

    @JsonProperty("shortName")
    public String getShortName() {
        return shortName;
    }

    @JsonProperty("shortName")
    public void setShortName(String shortName) {
        this.shortName = shortName;
    }

    @JsonProperty("description")
    public String getDescription() {
        return description;
    }

    @JsonProperty("description")
    public void setDescription(String description) {
        this.description = description;
    }

    @JsonProperty("sku")
    public String getSku() {
        return sku;
    }

    @JsonProperty("sku")
    public void setSku(String sku) {
        this.sku = sku;
    }

    @JsonProperty("quantity")
    public Integer getQuantity() {
        return quantity;
    }

    @JsonProperty("quantity")
    public void setQuantity(Integer quantity) {
        this.quantity = quantity;
    }

    @JsonProperty("category")
    public Category getCategory() {
        return category;
    }

    @JsonProperty("category")
    public void setCategory(Category category) {
        this.category = category;
    }

    @JsonProperty("products")
    public List<Product> getProducts() {
        return products;
    }

@JsonProperty("products")
public void setProducts(List<Product> products) {
    this.products = products;
}

@JsonAnyGetter
public Map<String, Object> getAdditionalProperties() {
    return this.additionalProperties;
}

@JsonAnySetter
public void setAdditionalProperty(String name, Object value) {
    this.additionalProperties.put(name, value);
}
}

这是关于 Items 的 BigQuery table 架构,其中 Item 是一个 RECORD 和 REPEATED 字段,还包含一个嵌套的 RECORD 和 REPEATED 字段:products。查看架构的屏幕截图

Item schema fields in BQ