2017-08-04 98 views
1

我正在探索Google Cloud Dataflow。将Java对象转换为BigQuery TableRow

我想知道如果Java对象或JSON自动转换为TableRow是否可以完成。

就像我们可以自动分析JSON到POJO类一样。

我找不到相关信息。 希望不要重复的问题。

将不胜感激的任何信息!

问候

回答

0

我找同样的例子没有运气。我创建了一个POJO类,它几乎与bigquery表的模式匹配,并匹配作为管道输入的JSON对象的结构。最后,当我对这些对象转换为tablerow,为我做了类似下面的嵌套和重复值,和转换是由API的

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

其中Item类是订单对象的一部分:

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

这是项目类的代码:

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); 
} 
} 

这是BigQuery资料表中关于项目的模式,其中项目是一个记录和重复栏还包含3 n嵌套的RECORD和REPEATED字段:产品。请参阅架构屏幕截图

Item schema fields in BQ